noisia - Trình tạo workload độc hại cho PostgreSQL
(github.com/lesovsky)- Công cụ tiêm lỗi dùng để chủ động tạo ra các tình huống sự cố như cạn kiệt kết nối/chờ khóa/deadlock/OOM/hết dung lượng đĩa nhằm kiểm thử
- Hỗ trợ nhiều workload, từ transaction nhàn rỗi/rollback/deadlock/tệp tạm/thêm kết thúc backend cho đến WAL tăng vọt/phình to bảng
- Một số workload có thể vượt ra ngoài việc làm cạn
max_connections, gây trễ replication hoặc suy giảm hiệu năng storage, và dẫn đến PANIC hoặc khởi động lại toàn bộ instance PostgreSQL - Có thể chạy ngay bằng Docker image hoặc import từng workload trong mã Go; bắt buộc dùng context và timeout để tránh chạy vô hạn
- Workload được hỗ trợ
- idle transactions: Mở transaction rồi không làm gì, cản trở dọn dẹp (VACUUM) và làm phình bảng/index
- rollbacks: Cố tình gửi truy vấn sai để gây lỗi và tăng số lần rollback
- waiting transactions: Một session khóa bảng, các kết nối phía sau lần lượt chờ, cuối cùng đạt giới hạn kết nối (
max_connections) và chặn kết nối mới - deadlocks: Đẩy hai transaction vào trạng thái deadlock khi chúng muốn khóa của nhau
- temporary files: Buộc sắp xếp dữ liệu lớn hơn bộ nhớ (
work_mem) để đổ tệp tạm ra đĩa (sẽ biến mất nếu tăngwork_mem) - terminate backends: Cưỡng bức kết thúc ngẫu nhiên các session/truy vấn đang chạy bằng
pg_terminate_backend()và các cách tương tự - failed connections: Giữ toàn bộ kết nối để các client khác hoàn toàn không thể kết nối. Làm cạn giới hạn
max_connections - fork connections: Mỗi lần dùng một kết nối mới chỉ để gửi truy vấn ngắn, khiến Postgres tạo quá nhiều tiến trình con
- backend-killer: Một session liên tục tích lũy prepared statement làm bộ nhớ phình ra, rồi bị OOM-kill khiến toàn bộ instance khởi động lại
- slot-bloat: Một replication slot không ai đọc giữ WAL lại, lấp đầy
pg_walđến khi hết đĩa và làm instance PANIC - wal-flood: Dùng các worker
UPDATEsong song để làm WAL tăng vọt, tạo trễ replication/áp lực IO (phiên bản "nhìn thấy được" của slot-bloat; việc đầy đĩa tùy môi trường) - bloat-churn: Dùng
UPDATEsong song để làm bảng phình nhanh hơn autovacuum; sau khi dừng có thể khôi phục bằngVACUUM FULL/pg_repack/REINDEX CONCURRENTLY
- Không chạy khi chưa hiểu đầy đủ; chỉ nên dùng giới hạn cho mục đích kiểm thử
- Giấy phép BSD-3-Clause
Chưa có bình luận nào.