Tanda -tanda umum dari masalah kueri N+1 termasuk indikator terperinci berikut:
- Jumlah kueri yang berlebihan: Tanda yang paling jelas adalah bahwa aplikasi Anda mengeksekusi lebih banyak kueri basis data dari yang diharapkan. Biasanya, Anda melihat satu kueri awal untuk mengambil daftar catatan, diikuti oleh kueri tambahan untuk setiap catatan untuk mengambil data terkait. Misalnya, mengambil 10 pengguna dan kemudian menjalankan 10 kueri terpisah untuk mendapatkan posting setiap pengguna menghasilkan 11 kueri, bukan hanya satu kueri yang dioptimalkan [1] [3].
- Waktu respons aplikasi yang lambat: Karena setiap kueri membutuhkan perjalanan pulang pergi ke database, efek kumulatif dari banyak kueri kecil secara signifikan memperlambat pengambilan data. Ini mengarah pada beban halaman yang lebih lambat atau respons API, membuat aplikasi kurang responsif terhadap permintaan pengguna [1] [5].
- Beban Basis Data Tinggi: Server database mengalami peningkatan beban karena banyaknya kueri, yang dapat membuat sumber daya dan mengurangi keseluruhan throughput sistem. Ini dapat menurunkan kinerja dan membatasi skalabilitas karena jumlah pengguna atau data tumbuh [3] [5] [6].
- Tidak terlihat dalam log kueri lambat: Tidak seperti satu kueri lambat, masalah N+1 sering tidak diperhatikan dalam log kueri lambat karena setiap permintaan individu berjalan dengan cepat. Namun, efek agregat dari banyak pertanyaan menyebabkan degradasi kinerja [2].
- Kueri tak terduga atau tersembunyi yang dipicu oleh ORM: Saat menggunakan kerangka kerja pemetaan objek-relasional (ORM), masalah n+1 sering muncul karena pemuatan malas atau salah konfigurasi. Mengakses entitas terkait dalam loop dapat memicu kueri tambahan tanpa panggilan eksplisit dalam kode, membuatnya sulit untuk dideteksi hanya dengan melihat kode sumber [2] [5] [6].
- Hambatan kinerja dalam pola pengambilan data: Jika aplikasi Anda memiliki hubungan objek yang kompleks dan mengambil data terkait dalam beberapa langkah daripada dalam satu kueri yang dioptimalkan, pola ini merupakan indikator kuat dari masalah n+1 [6].
Singkatnya, tanda -tanda umum adalah jumlah kueri basis data yang sangat tinggi untuk apa yang seharusnya menjadi pengambilan data sederhana, waktu respons yang lambat karena beberapa perjalanan pulang pergi database, peningkatan beban pada server database, dan kesulitan menemukan masalah karena setiap kueri secara individual mengeksekusi dengan cepat tetapi secara kolektif menyebabkan keterlambatan. Gejala -gejala ini sangat lazim dalam aplikasi menggunakan ORM dengan perilaku pemuatan malas default [1] [2] [3] [5] [6] [7].
Kutipan:
[1] https://planetscale.com/blog/what-is-n-1-query-problem-and-how-to-solve-it
[2] https://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem-in-orm-Object-relational-Mapping
[3] https://www.pingcap.com/article/how-to-eficiently-solve-the-n1-query-problem/
[4] https://evnedev.com/blog/development/the-n1-query-problem-what-is-it-and-how-do-you-solve-it-/
[5] https://digma.ai/n1-query-problem-and-how-to-detect-it/
[6] https://www.neurelo.com/post/what-is-the-n --1-query-problem
[7] https://dev.to/lovestaco/the-n1-query-problem-the-silent-performance-killer-2b1c
[8] https://www.pullrequest.com/blog/avoiding-n-1-database-queries-in-asp-net-a-practical-guide/