Cấu hình Greenplum Monitor và xem dashboard hiệu năng
Bước đầu tiên là kích hoạt và cấu hình Greenplum Monitor để theo dõi trạng thái thời gian thực của cluster trong môi trường hybrid OLTP/OLAP.
Greenplum Monitor thu thập dữ liệu từ master và segment nodes, lưu vào database riêng (gpmonitor) và cung cấp giao diện web để trực quan hóa các chỉ số như CPU, Memory, Disk I/O và Query Latency.
Trước tiên, cần khởi động dịch vụ monitor nếu chưa chạy và cấu hình biến môi trường để truy cập giao diện web.
source /usr/local/greenplum-db-7x/greenplum-db/greenplum_path.sh
export GPMONITOR_HOME=/usr/local/greenplum-db-7x/greenplum-db
cd $GPMONITOR_HOME
./gpm_start
Kết quả mong đợi: Dịch vụ khởi động thành công, hiển thị thông báo "Greenplum Monitor started" và các tiến trình monitor chạy trên master node.
Cấu hình biến môi trường và truy cập Dashboard
Để truy cập dashboard, cần chỉ định biến môi trường PORT và đảm bảo firewall cho phép truy cập port 9000 (mặc định).
export GPMONITOR_PORT=9000
echo "export GPMONITOR_PORT=9000" >> ~/.bashrc
source ~/.bashrc
Kết quả mong đợi: Biến môi trường được lưu vào file ~/.bashrc và có thể truy cập giao diện web qua trình duyệt.
Verify kết quả
Mở trình duyệt web và truy cập địa chỉ: http://<IP_MASTER_NODE>:9000/gpmonitor. Nếu thấy dashboard hiển thị biểu đồ hiệu năng của cluster, cấu hình thành công.
Kiểm tra tiến trình monitor đang chạy bằng lệnh:
ps -ef | grep gpm_monitor
Kết quả mong đợi: Danh sách tiến trình chứa "gpm_monitor" đang hoạt động trên master node.
Phân tích log lỗi trong thư mục log của Master và Segment
Trong môi trường hybrid, log là nguồn thông tin quan trọng nhất để xác định nguyên nhân sự cố. Master log ghi lại các lỗi hệ thống, còn segment log ghi lại lỗi tại các node dữ liệu.
Vị trí mặc định của log file Greenplum nằm trong thư mục $MASTER_DATA_DIRECTORY/log và $SEGMENT_DATA_DIRECTORY/log.
Xác định vị trí thư mục log
Truy cập vào thư mục log của master để tìm các file log gần đây nhất.
export MASTER_DATA_DIRECTORY=/data/primary/gp-7.0.0/master/gpseg-1
ls -lt $MASTER_DATA_DIRECTORY/log | head -n 5
Kết quả mong đợi: Danh sách các file log được sắp xếp theo thời gian, file mới nhất nằm trên cùng (ví dụ: postgresql.log).
Xuất và phân tích lỗi từ log Master
Sử dụng lệnh grep để lọc các dòng chứa "ERROR", "FATAL", hoặc "PANIC" trong file log mới nhất của master.
tail -f $MASTER_DATA_DIRECTORY/log/postgresql.log | grep -E "ERROR|FATAL|PANIC|WARNING"
Kết quả mong đợi: Dòng lệnh hiển thị liên tục các dòng log có chứa từ khóa lỗi khi chúng xảy ra.
Xuất và phân tích lỗi từ log Segment
Do Greenplum chạy trên nhiều segment, cần lặp lại việc kiểm tra log trên từng node hoặc sử dụng script để tập trung log.
Để kiểm tra log của một segment cụ thể (ví dụ: gpseg0 trên node host01), truy cập trực tiếp vào thư mục dữ liệu của segment đó.
export SEGMENT_DATA_DIRECTORY=/data/primary/gp-7.0.0/segment/gpseg0
ssh host01 "tail -f $SEGMENT_DATA_DIRECTORY/log/postgresql.log | grep -E 'ERROR|FATAL'"
Kết quả mong đợi: Dòng lệnh kết nối SSH vào host01 và hiển thị các lỗi xảy ra trên segment gpseg0.
Verify kết quả
Đảm bảo bạn có thể thấy các thông báo lỗi cụ thể liên quan đến query hoặc sự cố segment. Nếu log quá dài, hãy giới hạn số dòng bằng tham số -n.
grep -A 5 "ERROR" $MASTER_DATA_DIRECTORY/log/postgresql.log | tail -n 20
Kết quả mong đợi: Hiển thị 20 dòng cuối cùng chứa lỗi kèm theo 5 dòng ngữ cảnh sau mỗi lỗi.
Xử lý sự cố segment down và khôi phục dữ liệu
Trong mô hình Hybrid, sự cố segment down có thể làm gián đoạn cả truy vấn OLTP và batch OLAP. Greenplum có cơ chế tự động phát hiện segment down nhưng đôi khi cần can thiệp thủ công để khôi phục.
Trước khi khôi phục, cần xác định trạng thái của segment bằng lệnh gpstate.
Xác định trạng thái Segment
Chạy lệnh gpstate để xem trạng thái của tất cả các node trong cluster. Các segment bị down sẽ có trạng thái "DOWN" hoặc "RECOVERING".
gpstate -s
Kết quả mong đợi: Danh sách các node, trong đó các node bị lỗi được đánh dấu bằng màu đỏ hoặc trạng thái DOWN.
Khôi phục Segment bị Down (Recover)
Nếu nguyên nhân do segment bị treo hoặc lỗi tạm thời, hãy thử khởi động lại segment đó bằng lệnh gpsegrecover. Lệnh này sẽ cố gắng đồng bộ dữ liệu từ mirror (nếu có) hoặc từ master.
gpsegrecover -s gpseg0 -h host01
Kết quả mong đợi: Segment gpseg0 trên host01 được khởi động lại và trạng thái chuyển sang "UP".
Khôi phục dữ liệu từ Mirror (Mirrored Architecture)
Nếu cluster được cấu hình với Mirror, khi một primary segment down, mirror sẽ tự động trở thành primary. Nếu cả hai đều down, cần thực hiện khôi phục dữ liệu từ mirror còn lại hoặc từ backup.
Để khôi phục từ mirror, sử dụng lệnh gpsegrecover với tham số -r (rebuild) để tạo lại dữ liệu từ mirror.
gpsegrecover -r -s gpseg0 -h host01
Kết quả mong đợi: Dữ liệu được đồng bộ từ mirror sang segment gpseg0 và segment trở lại trạng thái hoạt động.
Xử lý khi không có Mirror (Single Instance)
Nếu không có mirror, dữ liệu trên segment down sẽ mất. Cần thực hiện khôi phục từ backup toàn bộ cluster hoặc restore từ điểm kiểm tra (checkpoint) gần nhất.
gprestore -f /path/to/backup/file -d
Kết quả mong đợi: Dữ liệu được khôi phục vào database từ file backup.
Verify kết quả
Sau khi thực hiện khôi phục, chạy lại lệnh gpstate để đảm bảo tất cả các segment đều có trạng thái "UP".
gpstate -s | grep -E "UP|DOWN"
Kết quả mong đợi: Không còn dòng nào có trạng thái "DOWN".
Các mẹo tối ưu hóa query chậm và xử lý deadlock trong môi trường hybrid
Môi trường Hybrid OLTP/OLAP thường gặp vấn đề về tắc nghẽn tài nguyên khi các query phân tích nặng (OLAP) chạy song song với các giao dịch nhỏ (OLTP). Cần tối ưu hóa query và xử lý deadlock để đảm bảo hiệu năng.
Phân tích Query Chậm với EXPLAIN
Sử dụng lệnh EXPLAIN (ANALYZE, BUFFERS) để xem kế hoạch thực thi của query và xác định nút cổ chai.
EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM sales WHERE date = '2023-10-01' AND region = 'US';
Kết quả mong đợi: Hiển thị kế hoạch thực thi chi tiết, bao gồm thời gian thực thi, số lượng dòng đọc và bộ đệm sử dụng.
Phân phối dữ liệu không đều (Skew)
Trong môi trường hybrid, skew dữ liệu thường xảy ra khi phân phối theo một key không đồng đều. Kiểm tra skew bằng cách xem số lượng dòng trên mỗi segment.
SELECT node_name, count(*) FROM sales GROUP BY node_name ORDER BY count(*) DESC LIMIT 10;
Kết quả mong đợi: Danh sách các node và số lượng dòng dữ liệu. Nếu có node có số lượng dòng cao hơn đáng kể so với trung bình, đó là skew.
Xử lý Deadlock
Deadlock xảy ra khi hai hoặc nhiều query chờ nhau để giải phóng tài nguyên. Greenplum tự động phát hiện và hủy một trong các query bị deadlock.
Để xem các query đang bị deadlock, truy cập vào log hoặc sử dụng view pg_stat_activity.
SELECT pid, usename, state, query FROM pg_stat_activity WHERE state = 'idle in transaction' OR state = 'active' LIMIT 10;
Kết quả mong đợi: Danh sách các query đang chạy hoặc đang ở trạng thái chờ, giúp xác định query gây deadlock.
Tối ưu hóa với Resource Queue (Resource Queues)
Để tránh xung đột giữa OLTP và OLAP, hãy cấu hình Resource Queue để ưu tiên các query OLTP.
-- Tạo resource queue cho OLTP với độ ưu tiên cao
CREATE RESOURCE QUEUE oltp_queue WITH (active=20, memlimit='25%');
CREATE RESOURCE QUEUE olap_queue WITH (active=50, memlimit='50%');
-- Gán user vào resource queue tương ứng
ALTER ROLE oltp_user SET resource_queue TO oltp_queue;
ALTER ROLE olap_user SET resource_queue TO olap_queue;
Kết quả mong đợi: Resource queue được tạo thành công và user được gán vào queue tương ứng.
Hủy Query bị tắc nghẽn
Nếu một query gây tắc nghẽn toàn hệ thống, có thể hủy nó bằng lệnh pg_cancel_backend hoặc pg_terminate_backend.
SELECT pg_cancel_backend(pid) FROM pg_stat_activity WHERE query LIKE '%heavy_analytics%' AND state = 'active';
Kết quả mong đợi: Query được hủy thành công và tài nguyên được giải phóng.
Verify kết quả
Sau khi tối ưu, chạy lại các query chậm và kiểm tra thời gian thực thi. Đảm bảo các query OLTP không bị ảnh hưởng bởi các query OLAP.
EXPLAIN (ANALYZE) SELECT COUNT(*) FROM sales;
Kết quả mong đợi: Thời gian thực thi giảm đáng kể và không còn hiện tượng tắc nghẽn.
Điều hướng series:
Mục lục: Series: Triển khai Database Hybrid OLTP/OLAP với Greenplum trên Ubuntu 24.04
« Phần 7: Tích hợp ETL và tải dữ liệu hiệu quả vào Greenplum