1. Kiểm tra định kỳ

a. Kiểm tra log và cảnh báo

Log là nguồn thông tin quan trọng để theo dõi các hoạt động bất thường và cảnh báo hệ thống. Bạn nên thường xuyên kiểm tra log để phát hiện các truy vấn chậm, lỗi hoặc các sự cố bảo mật.

Bật log truy vấn để theo dõi các truy vấn chậm:

log_min_duration_statement = 500  # Log các truy vấn lâu hơn 500ms

Kiểm tra log định kỳ bằng cách xem các tệp log nằm trong thư mục được cấu hình trong postgresql.conf:

log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

b. Kiểm tra tình trạng bảng (VACUUM)

Sử dụng lệnh VACUUM để dọn dẹp không gian đĩa và cải thiện hiệu suất cho các bảng. Thực hiện VACUUM định kỳ để tránh việc phân mảnh và duy trì hiệu suất cơ sở dữ liệu.

VACUUM ANALYZE;

Lệnh này sẽ dọn dẹp không gian và cập nhật thống kê cho bảng để tối ưu hóa các truy vấn.


2. Bảo trì định kỳ

a. Cập nhật thống kê với ANALYZE

Thực hiện lệnh ANALYZE giúp PostgreSQL thu thập các thống kê mới nhất về các bảng. Điều này giúp bộ lập kế hoạch truy vấn (query planner) có thể tối ưu hóa các truy vấn tốt hơn.

ANALYZE;

b. Kiểm tra và sửa lỗi chỉ mục (REINDEX)

Đôi khi, chỉ mục (index) có thể bị lỗi hoặc bị phân mảnh, gây ảnh hưởng đến hiệu suất truy vấn. Thực hiện lệnh REINDEX để xây dựng lại các chỉ mục.

REINDEX DATABASE dbname;

Nếu bạn muốn chỉ reindex một bảng cụ thể:

REINDEX TABLE my_table;

c. Dọn dẹp các tệp WAL (Write-Ahead Logging)

PostgreSQL sử dụng WAL để ghi lại các thay đổi trước khi thực hiện chúng. Tuy nhiên, các tệp WAL có thể chiếm nhiều không gian, nên cần thực hiện sao lưu định kỳ hoặc cấu hình archive_mode để dọn dẹp.

Kích hoạt archive_mode trong postgresql.conf:

archive_mode = on
archive_command = 'cp %p /path/to/archive/%f'

d. Xác thực và kiểm tra tính toàn vẹn của dữ liệu

PostgreSQL có công cụ pg_dump để tạo bản sao lưu dữ liệu. Thực hiện kiểm tra định kỳ bằng cách tạo các bản sao lưu và đảm bảo rằng dữ liệu có thể phục hồi chính xác.

Tạo một bản sao lưu định kỳ:

pg_dump -U username -F c -b -v -f /path/to/backup dbname

Kiểm tra tính toàn vẹn của bản sao lưu:

pg_restore -l /path/to/backup

3. Kiểm tra hiệu suất

a. Theo dõi chỉ số hiệu suất với pg_stat_statements

Tiện ích mở rộng pg_stat_statements giúp bạn theo dõi các truy vấn tốn thời gian và cải thiện chúng. Đầu tiên, bạn cần kích hoạt tiện ích này trong PostgreSQL:

Kích hoạt tiện ích trong postgresql.conf:

shared_preload_libraries = 'pg_stat_statements'

Sau đó, tạo tiện ích mở rộng trong cơ sở dữ liệu:

CREATE EXTENSION pg_stat_statements;

Kiểm tra các truy vấn chậm:

SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;

b. Giám sát sử dụng tài nguyên

Thường xuyên theo dõi sử dụng tài nguyên (CPU, RAM, I/O) của PostgreSQL để xác định các vấn đề tiềm ẩn. Bạn có thể sử dụng các công cụ giám sát như pgAdmin, Nagios, hoặc Prometheus để thu thập dữ liệu giám sát.


4. Cập nhật phiên bản và bản vá

Thường xuyên cập nhật PostgreSQL để áp dụng các bản vá bảo mật và cải thiện hiệu suất. Trước khi cập nhật, hãy sao lưu toàn bộ dữ liệu và kiểm tra tính tương thích với phiên bản mới.

Cập nhật PostgreSQL trên hệ thống Ubuntu:

sudo apt update
sudo apt upgrade postgresql

5. Quản lý kết nối và khóa

a. Theo dõi và quản lý khóa (Locks)

Các truy vấn có thể bị kẹt do khóa (locks). Sử dụng câu lệnh dưới đây để kiểm tra các truy vấn đang bị khóa và tiến hành xử lý nếu cần.

SELECT * FROM pg_stat_activity WHERE wait_event_type = 'Lock';

b. Giới hạn số kết nối

Cấu hình số lượng kết nối tối đa để tránh tình trạng quá tải. Điều chỉnh giá trị max_connections trong postgresql.conf:

max_connections = 100

Bằng cách thực hiện các kiểm tra và bảo trì định kỳ như trên, bạn sẽ đảm bảo rằng hệ thống PostgreSQL của mình hoạt động ổn định và an toàn, đồng thời cải thiện hiệu suất và tối ưu hóa tài nguyên hệ thống.