1. Giới thiệu
pg_profile trong PostgreSQL là gì?
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 công cụ pg_profile nhé.
2. 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.
3. 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_statements và pg_stat_kcache.
1. 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é.
2. Cài đặt extension db
pg_profile thường được cài đặt lên trên database 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
1. 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é
2. 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 đó.
3. Đặ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)
4. 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?
Như vậy tôi đã hướng dẫn xong các bạn các bước cài đặt pg_profile cho postgresql. Hẹn gặp lại các bạn ở các bài viết tiếp theo.