[Một Gói Mỗi Ngày] Trình Kiểm Tra Truy Vấn Django

By JoeVu, at: 18:03 Ngày 02 tháng 11 năm 2023

Thời gian đọc ước tính: __READING_TIME__ minutes

[One Package Per Day] Django Query Inspector
[One Package Per Day] Django Query Inspector

Trong loạt bài "Một gói mỗi ngày", nơi chúng ta khám phá các gói tiện ích có thể nâng cao các dự án Django của bạn, và hôm nay, chúng ta đang khám phá Django Query Inspector—một công cụ mạnh mẽ để giám sát và tối ưu hóa các truy vấn cơ sở dữ liệu trong ứng dụng Django của bạn.

 

Cài đặt

 

Để cài đặt Django Query Inspector, chỉ cần sử dụng pip:

 

pip install django-query-inspector


Sau khi cài đặt, thêm 'query_inspector' vào INSTALLED_APPS của bạn trong cài đặt Django:

 

INSTALLED_APPS = [
    # Các ứng dụng đã cài đặt khác
    'query_inspector',
]


Thêm middleware vào cài đặt MIDDLEWARE của bạn:

 

MIDDLEWARE = [
    # Các middleware khác
    'query_inspector.middleware.QueryInspectorMiddleware',
]

 

Bắt đầu

 

Sau khi cài đặt và cấu hình, Django Query Inspector sẽ bắt đầu giám sát các truy vấn cơ sở dữ liệu của bạn. Bạn có thể truy cập trình kiểm tra truy vấn thông qua giao diện quản trị Django hoặc sử dụng middleware để ghi nhật ký chi tiết truy vấn cho mỗi yêu cầu.

[SQL] truy vấn lặp lại (10x): SELECT "books"."id",
    "books"."author_id", "books"."name"
    FROM "books" WHERE "books"."author_id" = ?

 

Các tính năng chính

 

  1. Ghi nhật ký truy vấn: Ghi nhật ký tất cả các truy vấn SQL được thực hiện trong một yêu cầu.
     
  2. Phát hiện truy vấn trùng lặp: Xác định và làm nổi bật các truy vấn trùng lặp.
     
  3. Phát hiện truy vấn chậm: Cờ các truy vấn mất nhiều thời gian hơn ngưỡng đã chỉ định.
     
  4. Báo cáo truy vấn chi tiết: Cung cấp báo cáo chi tiết về hiệu suất và thống kê truy vấn.

 

Ưu điểm và nhược điểm

 


Ưu điểm

  • Cung cấp thông tin toàn diện về hiệu suất truy vấn cơ sở dữ liệu.
     
  • Giúp xác định và loại bỏ các truy vấn không hiệu quả.
     
  • Dễ dàng tích hợp với các dự án Django hiện có.
     
  • Giải quyết vấn đề với vấn đề truy vấn N+1 trong Django


Nhược điểm

  • Có thể gây ra chi phí nếu ghi nhật ký một số lượng lớn các truy vấn.
     
  • Nên sử dụng thận trọng trong môi trường sản xuất để tránh ảnh hưởng đến hiệu suất.

 

Vấn đề truy vấn N+1

 

Trường hợp sử dụng

 

  • Tối ưu hóa hiệu suất: Xác định các truy vấn chậm và trùng lặp để tối ưu hóa hiệu suất cơ sở dữ liệu.
     
  • Gỡ lỗi: Khắc phục sự cố liên quan đến các truy vấn cơ sở dữ liệu.
     
  • Giám sát: Theo dõi hiệu suất truy vấn và phát hiện các tắc nghẽn tiềm ẩn.

 

Thực tiễn tốt nhất

 

  • Sử dụng trình kiểm tra truy vấn chủ yếu trong môi trường phát triển và môi trường staging.
     
  • Thường xuyên xem xét nhật ký và báo cáo truy vấn để xác định và khắc phục sự thiếu hiệu quả.
     
  • Đặt ngưỡng thích hợp để phát hiện truy vấn chậm để cân bằng việc giám sát hiệu suất và chi phí.
     

Tùy chỉnh

 

Django Query Inspector cho phép tùy chỉnh hành vi của nó thông qua nhiều cài đặt.

Ví dụ: bạn có thể cấu hình ngưỡng truy vấn chậm và bật hoặc tắt các tính năng cụ thể:

# Cho dù Trình kiểm tra Truy vấn có nên làm bất cứ điều gì hay không (mặc định: False)
QUERY_INSPECT_ENABLED = True
# Cho dù có ghi nhật ký thống kê thông qua nhật ký Django hay không (mặc định: True)
QUERY_INSPECT_LOG_STATS = True
# Cho dù có thêm tiêu đề thống kê hay không (mặc định: True)
QUERY_INSPECT_HEADER_STATS = True
# Cho dù có ghi nhật ký các truy vấn trùng lặp hay không (mặc định: False)
QUERY_INSPECT_LOG_QUERIES = True
# Cho dù có ghi nhật ký các truy vấn vượt quá giới hạn tuyệt đối hay không (mặc định: None - bị vô hiệu hóa)
QUERY_INSPECT_ABSOLUTE_LIMIT = 100 # tính bằng mili giây
# Cho dù có ghi nhật ký các truy vấn nhiều hơn X độ lệch chuẩn so với thời gian truy vấn trung bình hay không (mặc định: None - bị vô hiệu hóa)
QUERY_INSPECT_STANDARD_DEVIATION_LIMIT = 2
# Cho dù có bao gồm dấu vết trong nhật ký hay không (mặc định: False)
QUERY_INSPECT_LOG_TRACEBACKS = True
# Root dự án (một danh sách các thư mục, xem bên dưới - mặc định trống)
QUERY_INSPECT_TRACEBACK_ROOTS = ['/path/to/my/django/project/']
# Số lượng trùng lặp tối thiểu cần thiết để ghi nhật ký truy vấn (mặc định: 2)
QUERY_INSPECT_DUPLICATE_MIN = 1 # để buộc ghi nhật ký tất cả các truy vấn
# Cho dù có cắt ngắn các truy vấn SQL trong nhật ký thành kích thước đã chỉ định hay không, để mục đích dễ đọc (mặc định: None - truy vấn SQL đầy đủ được bao gồm)
QUERY_INSPECT_SQL_LOG_LIMIT = 120 # giới hạn ở 120 ký tự

 

Tích hợp

 

Django Query Inspector tích hợp liền mạch với giao diện quản trị Django, cung cấp một cách dễ dàng để xem nhật ký và báo cáo truy vấn. Nó cũng có thể được sử dụng cùng với các công cụ giám sát hiệu suất khác.

 

Xem xét hiệu suất

 

Mặc dù Django Query Inspector là một công cụ mạnh mẽ để giám sát hiệu suất truy vấn, nhưng nó có thể gây ra một số chi phí. Điều quan trọng là phải sử dụng nó một cách thận trọng, đặc biệt là trong môi trường sản xuất, để tránh sự suy giảm hiệu suất.

 

So sánh với các gói tương tự

 

Django Query Inspector so với django-debug-toolbar:

  • Django Query Inspector tập trung cụ thể vào các truy vấn cơ sở dữ liệu, cung cấp thông tin chi tiết và báo cáo chi tiết hơn.
     
  • django-debug-toolbar cung cấp một phạm vi rộng hơn các công cụ gỡ lỗi, bao gồm cả việc giám sát truy vấn.
     

Django Query Inspector so với django-silk:

  • django-silk cung cấp khả năng phân tích và giám sát toàn diện, bao gồm cả việc kiểm tra truy vấn.
     
  • Django Query Inspector tập trung nhiều hơn vào hiệu suất và tối ưu hóa truy vấn.

 

Các gói hữu ích khác từ cộng đồng Django

 

  • Django Extensions: Dành cho các lệnh và công cụ quản lý bổ sung.
     
  • Django Debug Toolbar: Dành cho việc gỡ lỗi và phân tích hiệu suất thời gian thực.
     
  • django-silk: Dành cho việc phân tích và giám sát chi tiết các ứng dụng Django.

 

Cộng đồng và Tài liệu

 

Django Query Inspector có một cộng đồng hỗ trợ và tài liệu toàn diện có sẵn tại Tài liệu Django Query Inspector. Cộng đồng đang hoạt động trên GitHub, cung cấp hỗ trợ và đóng góp.

 

Kết luận

 

Django Query Inspector là một công cụ vô giá đối với bất kỳ nhà phát triển Django nào muốn tối ưu hóa hiệu suất cơ sở dữ liệu. Bằng cách cung cấp thông tin chi tiết về việc thực thi và hiệu suất truy vấn, nó giúp bạn xác định và khắc phục sự thiếu hiệu quả trong tương tác cơ sở dữ liệu của ứng dụng.

Tag list:
- Query duplication check
- Django N+1 issues
- Query analyze
- Query N+1 Django
- Django Query inspect
- Query check

Liên quan

Django rest framework Python

Đọc thêm

Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.