PostgreSQL Performance: Mengatasi Dead Tuple dan Bloat Dengan AUTOVACUUM

Banyak orang tidak bisa melakukan konfigurasi autovacuum dengan benar, alih-alih meningkatkan performance yang terjadi malah sebaliknya. Masalah tersebut bisa dikatakan berasal dari apa yang dikenal sebagai “bloat”, yaitu sebuah peristiwa peningkatan penggunaan space dan penurunan kinerja pada database PostgreSQL dan database MVCC lainnya. Salah satu solusi paling cocok untuk permasalahan ini adalah autovacuum. Autovacuum sendiri berfungsi men-defrag space kosong agar bisa digunakan kembali, karena biasanya jika space kosong berada ditengah data block, maka space tersebut tidak akan digunakan kembali. Berikut akan dijelaskan secara terinci:

Tuple yang sudah tak terpakai (Dead Tuples).

Row atau baris dikenal sebagai tuple pada database postgresql. Berikut ini adalah ilustrasi dari Tuple yang sudah tidak terpakai.

Seperti gambar di atas, jika kita melakukan process DELETE di data file, sebenarnya data tersebut tidak benar-benar dihapus melainkan ditandai dengan xmax di header. Lalu bagaimana dengan UPDATE? UPDATE sendiri akan terdeteksi sebagai proses DELETE+INSERT di tuple sehingga tetap akan mengakibatkan peningkatan ruang juga. Tuple yang ditandai sebagai DELETED/UPDATED data inilah yang kerap menyebabkan pemborosan space, dan ini pula yang dikenal sebagai “bloat”.

Kasus di atas mengharuskan kita melakukan routine maintenance, karena semakin banyak permintaan penghapusan tuples yang tidak terpakai, semakin lambat juga performa database kita. VACUUM dan AUTOVACUUM dapat digunakan sebagai routine maintenance database postgresql.

VACUUM sendiri terdapat dua jenis, yaitu VACUUM dan VACUUM FULL. Apa beda keduanya?

  1. VACUUM tidak akan mengubah ukuran disk space, namun data baru dapat di insert ke dalam disk space yang kosong.
  2. VACUUM FULL akan mengubah ukuran disk space, namun semua operasi akan terblokir selama proses VACUUM FULL berjalan, termasuk tidak bisa melakukan perintah SELECT.

Jadi bisa dikatakan VACUUM akan lebih sering kita gunakan dibandingkan VACUUM FULL. Meskipun demikian dua proses ini dijalankan secara manual. Sehingga proses VACUUM hanya berjalan saat kita putuskan untuk dijalankan, bukan pada saat database membutuhkannya. Efeknya jika proses VACUUM dijalankan pada saat yang tidak tepat adalah penggunaan I/O yang lebih tinggi pada sistem secara cuma-cuma. Oleh karena itu proses AUTOVACUUM dapat membantu kita karena dijalankan saat dibutuhkan, sehingga resource ter-utilize dengan baik.

AUTOANALYZE

Proses bersih-bersih tidak hanya menjadi kerjaan AUTOVACUUM. Sebagaimana proses VACUUM yang juga didampingi ANALYZE untuk mengupdate statistik database, AUTOVACUUM memiliki AUTOANALYZE. Proses ANALYZE sendiri diperlukan saat VACUUM karena perubahan yang terjadi setelah proses bersih-bersih perlu dilakukan update statistik, agar query planner berjalan sesuai statistik terbaru dan performance menjadi maksimal.

REKOMENDASI

Berikut ini adalah settingan rekomendasi dari parameter yang berhubungan dengan AUTOVACUUM:

VARIABLEDEFAULTREKOMENDASI
AUTOVACUUM MAX WORKER35 or 6
MAINTENANCE WORK MEM64MBSYSTEM RAM *3 / (8*AUTOVACUUM MAX WORKER)
AUTOVACUUM SCALE FACTOR0.2SMALLER FOR BIG TABLES, TRY 0.01
AUTOVACUUM THRESHOLD50COULD BE LARGER FOR SMALL TABLES
AUTOVACUUM COST LIMIT200PROBABLY LEAVE IT ALONE
AUTOVACUUM COST DELAY20msCAN TURN IT DOWN IF OK WITH MORE VACUUM I/O LOAD

Inovasi Informatika Indonesia (i3) merupakan partner dari EnterpriseDB & PostgreSQL yang menyediakan berbagai jenis kelas training dan sertifikasi di bidang database, mulai dari tingkat fundamental sampai tingkat advance.

Selain sebagai tempat training IT yang banyak direkomendasikan oleh praktisi, i3 juga menawarkan jasa IT Services di 4 bidang utama keahlian: Open SourceVirtualisasiDatabase, dan IT Security. Semua training dan services ditangani oleh instructor dan konsultan yang berpengalaman dan memiliki sertifikasi internasional.

Informasi lebih lanjut tentang lengkap jadwal pelatihan dan layanan IT silahkan hubungi kami melalui info@i-3.co.id dan live chat.

Leave a Reply

Your email address will not be published. Required fields are marked *