PostgreSQL Làm sao để xem hiệu năng trong quá khứ của câu lệnh

Không phải lúc nào, khi chúng ta vào kiểm tra hệ thống, cũng là đúng lúc thời gian cao tải hoặc có vấn đề.

Làm sao để chúng ta có thể xem lại hiệu năng trong 1 khoảng thời gian trong quá khứ để có số liệu chính xác nhất?

Các hệ quản trị CSDL thường có các công cụ để giúp chúng ta làm điều này. Ví dụ: Oracle Database có Automatic Workload Repository (AWR), SQL Server có Query Store.

Thật không may, PostgreSQL mặc định lại không có 1 công cụ đại loại như vậy. Nhưng chúng ta có thể cài đặt riêng 1 extension bên ngoài, nó gọi là pg_profile..

Cơ chế của nó là chụp ảnh lại (snapshot) hiệu năng của database định kỳ (có thể cấu hình 1h/1 lần). Chúng ta có thể xem báo cáo hiệu năng (theo định dạng HTML) trong 1 khoảng thời gian bằng cách chọn 2 điểm snapshot tương ứng với khoảng thời gian mà chúng ta muốn.

Trong bài viết này tôi sẽ hướng dẫn các bạn cài đặt và sử dụng nó nhé.


   Download pg_profile

Các bạn có thể download pg_profile tại đường link sau:

https://github.com/zubkov-andrei/pg_profile/releases

Bạn download extension này về và upload lên server PostgreSQL. Tên file là: pg_profile–0.3.3.tar.gz tại thời điểm tôi viết bài này.


   Cài đặt pg_profile

Theo tài liệu mô tả đi kèm, pg_profile dựa trên dữ liệu thống kê của pg_stat_statementspg_stat_kcache.

   Cài đặt extension pg_stat_statements

Bạn cần phải cài đặt pg_stat_statements trước, conf pg_stat_kcache thì đã có rồi, không cần phải cài đặt thêm. Tôi đã có 1 bài hướng dẫn đây rồi, các bạn tham khảo nhé.

Đọc thêm  Sử dụng pg_stat_statements để giám sát câu lệnh trên PostgreSQL

   Cài đặt extension db

pg_profile thường được cài đặt lên trên cluster mà các bạn muốn giám sát hiệu năng. Tuy nhiên, bạn cũng hoàn toàn có thể cài đặt pg_profile lên 1 cluster để monitor 1 cluster khác. Nó kết nối đến cluster dựa trên dblink, nên do đó, cũng cần phải cài đặt extension này.

CREATE EXTENSION dblink;

Chú ý: Cả 2 extension dblink và pg_stat_statements đều nằm trong gói postgresql13-contrib (con số đi theo phiên bản của PostgreSQL nhé, VD ở đây là phiên bản 13). Nên bạn cần phải cài đặt gói này trước, nếu không có thể gặp lỗi:

postgres=# CREATE EXTENSION dblink;
ERROR:  could not open extension control file "/usr/pgsql-13/share/extension/dblink.control": No such file or directory

   Thay đổi tham số

Tiếp theo, bạn cần thay đổi các tham số như dưới đây:

alter system set track_activities = on;
alter system set track_counts = on;
alter system set track_io_timing = on;
alter system set track_functions = 'all';

và nhớ restart lại cluster để các giá trị mới có hiệu lực nhé

   Cài đặt pg_profile

Tiếp theo bạn hãy giải nén pg_profile vào trong thư mục extension của PostgreSQL. Bạn có thể tìm đường dẫn đến thư mục này bằng câu lệnh sau

-bash-4.2$ pg_config --sharedir
/usr/pgsql-13/share

Thư mục extension nằm trong thư mục bên trên nhé.

Sau đó bạn giải nén các file của pg_profile vào trong thư mục extension nhé.

tar -xzf pg_profile--0.3.3.tar.gz --directory /usr/pgsql-13/share/extension

Ok rồi đó, tiếp tục đăng nhập vào PostgreSQL và thực hiện lệnh sau:

CREATE EXTENSION pg_profile;

Như vậy là đã xong bước cài đặt pg_profile rồi đó.

   Đặt lịch tạo Sample (hay snapshot)

Bây giờ chúng ta cần cấu hình để pg_profile định kỳ snapshot lại các thông tin hiệu năng (pg_profile gọi đây là các sample). Đơn giản bước này bạn chỉ cần cấu hình trong crontab là được.

Giả sử, bây giờ tôi sẽ cấu hình để pg_profile tạo sample 1h/1 lần nhé.

crontab -e

0 * * * *   psql -c 'SELECT take_sample()' >> /var/lib/pgsql/13/data/log/pg_profile.log

Bạn có thể liệt kê các sample đã tạo bằng câu lệnh:

postgres=# select * from show_samples();
 sample |      sample_time       | sizes_collected | dbstats_reset | clustats_reset | archstats_reset
--------+------------------------+-----------------+---------------+----------------+-----------------
      1 | 2021-08-15 10:46:03+07 | t               |               |                |
      2 | 2021-08-15 10:57:50+07 | t               |               |                |
      3 | 2021-08-15 10:57:57+07 | t               |               |                |
      4 | 2021-08-15 11:05:30+07 | t               |               |                |
(4 rows)

   Xem báo cáo

Bây giờ tôi thử lấy báo cáo hiệu năng tại sample 1 và 2 xem sao nhé

psql -Aqtc "SELECT get_report(1,2)" -o report_1_2.html

Và đây là 1 vài ảnh chụp lại báo cáo. Nhìn cũng khá xịn xò đúng không?

Bài viết đến đây là kết thúc, nếu có câu hỏi hay thắc mắc nào, các bạn có thể để lại comment bên dưới, hoặc tham gia vào group “Kho tài liệu kiến thức database” nhé”. Hẹn gặp lại các bạn ở bài viết tiếp theo.

Mục lục pg_profileSQL StatisticsServer statistics

Nguồn: https://dangxuanduy.com/

   Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé

     

     

     

     

     

    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments