Tìm kiếm và log câu SQL bị chậm trên PostgreSQL


Hiện PostgreSQL đang dần trở lên phổ biến và sử dụng rộng rãi trong các hệ thống Web, phần mềm,… PostgreSQL có năng lực xử lý dữ liệu rất tốt. Tuy nhiên với những câu lệnh SQL không thực sự tối ưu nó cũng sẽ thực thi mất rất nhiều thời gian. Nếu vấn đề này xảy ra trên hệ thống của bạn thì bạn cần điều tra để xác nhận được đâu là câu SQL cần tối ưu.

Để làm được việc đó PostgreSQL cung cấp cho chúng ta 1 tham số đó là log_min_duration_statement để log lại những câu SQL thực thi quá thời gian mà chúng ta quy định.

Mặc định tham số log_min_duration_statement sẽ bị comment lại, và giá trị mặc định là -1. Nếu chúng ta set giá trị cho chúng là:

  • – 1 : Không log câu SQL gì cả
  • 0: Là logc toàn bộ câu SQL
  • <number> : Nhập 1 số cụ thể nghĩa là log câu SQL có thời gian chạy lớn giá trị này. Đơn vị là mini giây. (miniseconds)

Để log lại những câu lệnh SQL thực thi chậm chúng ta thực hiện qua 3 bước sau:

Bước 1: Tìm và sửa file cấu hình postgresql.conf. Tùy vào từng hệ thống mà nó ở đường dẫn khác nhau. VD: Trên Ubuntu nó nằm ở đường dẫn: /etc/postgresql/<version>/main/postgresql.conf  Với <version> là version của PostgreSQL

Bước 2: Sau đó sửa tham số log_min_duration_statement sang một giá trị cụ thể. Ví dụ 1000 (Tức là 1000 mini giây, tương đương với 1 giây)

log_min_duration_statement = 1000

Save file lại

 Bước 3: Cuối cùng là restart PostgreSQL. VD: trên Ubuntu bằng lệnh sau

sudo systemctl restart postgresql

Để kiểm tra xem sau khi sửa config nó có hoạt động đúng không chúng ta sử dụng câu lệnh SQL sau để test.

SELECT pg_sleep(2);

pg_sleep(2) là 1 function của PostgreSQL, và 2 là số giây sleep (ngủ) của câu lệnh.

Kết quả là câu lệnh SQL đã bị log lại do lớn hơn 1 giây đã config được lưu lại trong file log.

Bạn có thể tìm file log ở trên Linux là đường dẫn /var/log/postgresql

Nguồn: vinasupport.com

 

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web