Các dấu hiệu phổ biến của bài toán truy vấn N+1 bao gồm các chỉ số chi tiết sau:
- Số lượng truy vấn quá mức: Dấu hiệu rõ ràng nhất là ứng dụng của bạn thực hiện nhiều truy vấn cơ sở dữ liệu hơn dự kiến. Thông thường, bạn thấy một truy vấn ban đầu để tìm nạp danh sách các bản ghi, theo sau là một truy vấn bổ sung cho mỗi bản ghi để tìm nạp dữ liệu liên quan. Ví dụ: tìm nạp 10 người dùng và sau đó chạy 10 truy vấn riêng biệt để nhận kết quả bài đăng của mỗi người dùng trong 11 truy vấn thay vì chỉ một truy vấn được tối ưu hóa [1] [3].
- Thời gian phản hồi ứng dụng chậm: Bởi vì mỗi truy vấn yêu cầu một chuyến đi tròn đến cơ sở dữ liệu, hiệu ứng tích lũy của nhiều truy vấn nhỏ làm chậm đáng kể việc truy xuất dữ liệu. Điều này dẫn đến tải trang chậm hơn hoặc phản hồi API, làm cho ứng dụng ít phản hồi hơn với các yêu cầu của người dùng [1] [5].
- Tải trọng cơ sở dữ liệu cao: Máy chủ cơ sở dữ liệu trải nghiệm tải tăng do số lượng lớn các truy vấn, có thể làm căng tài nguyên và giảm thông lượng tổng thể của hệ thống. Điều này có thể làm giảm hiệu suất và hạn chế khả năng mở rộng khi số lượng người dùng hoặc dữ liệu tăng lên [3] [5] [6].
- Vô hình trong nhật ký truy vấn chậm: Không giống như một truy vấn chậm, vấn đề N+1 thường không được chú ý trong nhật ký truy vấn chậm vì mỗi truy vấn riêng lẻ chạy nhanh. Tuy nhiên, hiệu ứng tổng hợp của nhiều truy vấn gây ra sự suy giảm hiệu suất [2].
- Các truy vấn bất ngờ hoặc ẩn được kích hoạt bởi ORM: Khi sử dụng các khung ánh xạ quan hệ đối tượng (ORM), vấn đề N+1 thường phát sinh do tải lười biếng hoặc cấu hình sai. Truy cập các thực thể liên quan trong một vòng lặp có thể kích hoạt các truy vấn bổ sung mà không cần các cuộc gọi rõ ràng trong mã, khiến bạn khó phát hiện chỉ bằng cách xem mã nguồn [2] [5] [6].
- Cổ nút hiệu suất trong các mẫu tìm nạp dữ liệu: Nếu ứng dụng của bạn có các mối quan hệ đối tượng phức tạp và tìm nạp dữ liệu liên quan trong nhiều bước thay vì trong một truy vấn được tối ưu hóa, mẫu này là một chỉ số mạnh mẽ của vấn đề N+1 [6].
Tóm lại, các dấu hiệu phổ biến là một số lượng lớn các truy vấn cơ sở dữ liệu bất ngờ cho việc truy xuất dữ liệu đơn giản, thời gian phản hồi chậm do nhiều chuyến đi vòng cơ sở dữ liệu, tăng tải trên máy chủ cơ sở dữ liệu và khó khăn trong việc phát hiện sự cố vì mỗi truy vấn thực hiện nhanh chóng nhưng gây ra sự chậm trễ. Các triệu chứng này đặc biệt phổ biến trong các ứng dụng sử dụng các orm với hành vi tải lười biếng mặc định [1] [2] [3] [5] [6] [7].
Trích dẫn:
[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
.
.
[5] https:
[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
.