noisia - Generator beban kerja berbahaya untuk PostgreSQL
(github.com/lesovsky)- Alat injeksi kegagalan untuk menguji dengan sengaja menciptakan kondisi gangguan seperti kehabisan koneksi/menunggu lock/deadlock/OOM/kekurangan disk
- Mendukung berbagai beban kerja, dari transaksi menganggur/rollback/deadlock/file sementara/penghentian backend hingga lonjakan WAL/pembengkakan tabel
- Beberapa beban kerja dapat melampaui kehabisan
max_connections/lag replikasi/penurunan performa penyimpanan dan memicu PANIC atau restart penuh pada instance PostgreSQL - Dapat langsung dijalankan sebagai image Docker atau mengimpor beban kerja individual dari kode Go, dan wajib menggunakan context serta batas waktu agar tidak berjalan tanpa henti
- Beban kerja yang didukung
- idle transactions: membiarkan transaksi tetap terbuka tanpa melakukan apa pun, sehingga menghambat pembersihan (
VACUUM) dan membuat tabel/indeks membengkak - rollbacks: sengaja mengirim kueri yang salah untuk memicu error dan menambah jumlah rollback
- waiting transactions: satu sesi mengunci tabel, lalu koneksi di belakangnya terus menunggu sampai akhirnya mencapai batas koneksi (
max_connections) dan memblokir koneksi baru - deadlocks: menjebak dua transaksi dalam kondisi deadlock saat saling menginginkan lock
- temporary files: memaksa pengurutan data yang lebih besar dari memori (
work_mem) agar menumpahkan file sementara ke disk (work_memdiperbesar maka masalah ini hilang) - terminate backends: menghentikan secara paksa sesi/kueri yang sedang berjalan secara acak dengan
pg_terminate_backend()dan sejenisnya - failed connections: menahan semua koneksi sehingga klien lain sama sekali tidak bisa terhubung. Menghabiskan batas
max_connections - fork connections: setiap kali membuat koneksi baru dan hanya mengirim kueri singkat agar Postgres membuat terlalu banyak proses anak
- backend-killer: satu sesi terus menumpuk prepared statement hingga memori membengkak dan memicu OOM-kill yang menyebabkan restart seluruh instance
- slot-bloat: replication slot yang tidak pernah dibaca menahan WAL hingga memenuhi
pg_walsampai disk penuh dan memicu PANIC pada instance - wal-flood: worker
UPDATEparalel membanjiri WAL untuk menciptakan lag replikasi/tekanan IO (versi slot-bloat yang "terlihat", kondisi disk penuh bergantung pada lingkungan) - bloat-churn:
UPDATEparalel membengkakkan tabel lebih cepat daripada autovacuum, tetapi setelah dihentikan dapat dipulihkan denganVACUUM FULL/pg_repack/REINDEX CONCURRENTLY
- idle transactions: membiarkan transaksi tetap terbuka tanpa melakukan apa pun, sehingga menghambat pembersihan (
- Jangan dijalankan tanpa benar-benar memahaminya; harus digunakan hanya untuk tujuan pengujian
- Lisensi BSD-3-Clause
Belum ada komentar.