Apa tabel kembung di database?

9

Adakah yang bisa menjelaskan arti kembung pada basis data? Misalnya apa artinya mengatakan indeks membengkak. Saya mencoba mencarinya tetapi tidak ada penjelasan tentang apa itu kembung, hanya apa yang menyebabkannya atau apa yang disebabkannya.

pengguna84643
sumber

Jawaban:

16

Karena cara PostgreSQL menangani transaksi dan konkurensi, MVCC - Multi-Version Concurrency Control, Anda bisa mendapatkan mengasapi. Di PostgreSQL, ketika Anda melakukan UPDATEatau DELETE, baris tersebut sebenarnya tidak dihapus secara fisik. Untuk a DELETE, itu hanya menandai baris sebagai tidak tersedia untuk transaksi di masa depan, dan untuk UPDATE, di bawah kap itu digabungkan INSERTmaka DELETE, di mana versi sebelumnya dari baris ditandai tidak tersedia.

Sementara data ditandai tidak tersedia, masih ada di sana, dan ruang tidak dapat digunakan. Untuk kemudian menandai ruang yang tersedia untuk digunakan oleh database, proses vakum perlu dilakukan di belakang operasi, dan menandai ruang yang tersedia untuk database untuk digunakan. Namun tidak dikembalikan ke sistem operasi. Itu hanya terjadi ketika tidak ada baris aktif di seluruh halaman, yang bisa tidak biasa di beberapa beban kerja. Ini bisa menjadi hal yang baik untuk beberapa beban kerja, karena Anda cukup memperbarui ruang pada halaman individual di dalam file data, tanpa perlu menambahkan file data tambahan.

Masalah muncul dengan mengasapi ketika ada terlalu banyak tuple mati versus tuple hidup. Berjalan bersama dan memeriksa semua bendera visibilitas membutuhkan waktu, dan memiliki lebih banyak file data untuk suatu hubungan menghasilkan tambahan IO yang tidak perlu. Kembung terutama terlihat pada indeks, yang juga dapat memiliki banyak tupel mati, kadang-kadang lebih dari tabel. Gembung dapat memperlambat pencarian dan pemindaian indeks, yang akan muncul dalam waktu kueri yang meningkat perlahan dan mengubah rencana kueri.

Anda dapat memulihkan ruang dengan menggunakan pg_reorg , pg_repack , CLUSTERatau VACUUM FULL. Ini akan melalui dan mengatur ulang file, memindahkan tupel dan mengatur ulang untuk memastikan bahwa tidak ada tupel mati, yang akan menghilangkan mengasapi.

Penggembungan juga dapat dikelola secara efisien dengan menyesuaikan VACUUMpengaturan per tabel, yang menandai ruang tuple mati yang tersedia untuk digunakan kembali oleh kueri berikutnya.

Anda dapat menggunakan kueri di PostgreSQL Wiki terkait dengan Show Database Bloat dan Index Bloat untuk menentukan berapa banyak bloat yang Anda miliki, dan dari sana, lakukan sedikit analisis kinerja untuk melihat apakah Anda memiliki masalah dengan jumlah bloat yang Anda miliki di meja Anda .

Kassandry
sumber
-1

Ini mungkin merujuk pada masalah umum dengan indeks di mana dua kolom banyak ditambahkan ke indeks atau ada indeks yang tumpang tindih pada tabel. Yaitu, beberapa indeks dengan kumpulan kolom yang sama di dalamnya (membuat salah satunya tidak diperlukan). Saya akan meninjau semua indeks pada tabel mencari kolom yang tumpang tindih, mencari indeks yang hanya merupakan subset dari indeks lain dan menghapusnya JIKA Anda dapat menentukan bahwa mereka tidak sedang digunakan.

Selain itu, karena data dalam tabel diperbarui, indeks dapat menjadi terfragmentasi yang menyebabkan mereka lebih besar dari yang diperlukan. Saya tidak terbiasa dengan postgres, tapi saya curiga ada metode untuk defrag indeks (dengan membangun kembali indeks) yang akan mengurangi ukurannya pada disk.

paulbarbin
sumber