noisia - PostgreSQL के लिए हानिकारक workload generator
(github.com/lesovsky)- connection exhaustion/lock wait/deadlock/OOM/disk full जैसी failure situations को जानबूझकर बनाकर टेस्ट करने वाला failure injection tool
- idle transactions/rollbacks/deadlocks/temporary files/backend termination से लेकर WAL spike/table bloat तक कई तरह के workloads को support करता है
- कुछ workloads
max_connectionsexhaustion/replication lag/storage performance degradation से आगे बढ़कर PostgreSQL instance में PANIC या पूरा restart करा सकते हैं - Docker image से सीधे चला सकते हैं या Go code में individual workloads import कर सकते हैं; infinite execution से बचने के लिए context और timeout का इस्तेमाल जरूरी है
- supported workloads
- idle transactions: transaction खोलकर छोड़ देता है और कुछ नहीं कराता, जिससे cleanup (VACUUM) रुकता है और tables/indexes फूलते हैं
- rollbacks: जानबूझकर गलत queries भेजकर error कराता है और rollback count बढ़ाता है
- waiting transactions: एक session table को lock करता है, पीछे connections कतार में wait करते रहते हैं और आखिर में connection limit (
max_connections) तक पहुंचकर नए connections रोक देते हैं - deadlocks: दो transactions को ऐसी deadlock state में डालना जहां दोनों एक-दूसरे का lock चाहते हैं
- temporary files: memory (
work_mem) से बड़ा data sort करवाकर disk पर temporary files उगलवाना (work_memबढ़ाने पर गायब हो जाता है) - terminate backends:
pg_terminate_backend()आदि से चल रहे sessions/queries को randomly force terminate करना - failed connections: सभी connections को कब्जे में लेकर दूसरे clients को बिल्कुल connect नहीं करने देना.
max_connectionslimit खत्म करना - fork connections: हर बार नए connection से सिर्फ छोटी queries भेजकर Postgres से जरूरत से ज्यादा child processes बनवाना
- backend-killer: एक session prepared statements लगातार जमा करके memory फुलाता है, जिससे OOM-kill के कारण पूरा instance restart हो सकता है
- slot-bloat: कोई न पढ़ रहा replication slot WAL को पकड़े रखता है और
pg_walको disk full होने तक भरकर instance को PANIC कराता है - wal-flood: parallel
UPDATEworkers से WAL को तेज़ी से बढ़ाकर replication lag/IO pressure बनाना (slot-bloat का "दिखाई देने वाला" version; disk full होना environment पर निर्भर है) - bloat-churn: parallel
UPDATEसे table को autovacuum से ज्यादा तेज़ी से फुलाना, लेकिन रुकने के बादVACUUM FULL/pg_repack/REINDEX CONCURRENTLYसे वापस सुधारा जा सकता है
- पूरी तरह समझे बिना न चलाएं; इसे सिर्फ testing purposes तक सीमित रखकर इस्तेमाल करना चाहिए
- BSD-3-Clause license
अभी कोई टिप्पणी नहीं है.