LWLock:MultiXact - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

LWLock:MultiXact

Peristiwa tunggu LWLock:MultiXactMemberBuffer, LWLock:MultiXactOffsetBuffer, LWLock:MultiXactMemberSLRU, dan LWLock:MultiXactOffsetSLRU menunjukkan bahwa sesi sedang menunggu pengambilan daftar transaksi yang memodifikasi baris yang sama pada tabel tertentu.

  • LWLock:MultiXactMemberBuffer— Sebuah proses sedang menunggu I/O pada buffer (SLRU) sederhana yang paling tidak baru digunakan untuk anggota multixact.

  • LWLock:MultiXactMemberSLRU— Sebuah proses sedang menunggu untuk mengakses cache sederhana yang paling tidak baru digunakan (SLRU) untuk anggota multixact.

  • LWLock:MultiXactOffsetBuffer— Sebuah proses sedang menunggu I/O pada buffer (SLRU) sederhana yang paling tidak baru digunakan untuk offset multixact.

  • LWLock:MultiXactOffsetSLRU— Sebuah proses sedang menunggu untuk mengakses cache sederhana yang paling tidak baru digunakan (SLRU) untuk offset multixact.

Versi mesin yang didukung

Informasi acara tunggu ini didukung untuk semua versi Aurora Postgre. SQL

Konteks

Multixact adalah struktur data yang menyimpan daftar transaksi IDs (XIDs) yang memodifikasi baris tabel yang sama. Saat satu transaksi merujuk suatu baris dalam tabel, ID transaksi disimpan pada baris header tabel. Ketika beberapa transaksi mereferensikan baris yang sama dalam tabel, daftar transaksi IDs disimpan dalam struktur data multixact. Peristiwa tunggu multixact menunjukkan bahwa sesi mengambil dari struktur data daftar transaksi yang merujuk ke baris tertentu dalam tabel.

Kemungkinan penyebab peningkatan peristiwa tunggu

Tiga penyebab umum penggunaan multixact adalah sebagai berikut:

  • Subtransaksi dari titik simpan eksplisit – Secara eksplisit membuat titik simpan pada transaksi Anda yang memunculkan transaksi baru untuk baris yang sama. Misalnya, menggunakan SELECT FOR UPDATE, lalu SAVEPOINT, dan UPDATE.

    Beberapa driver, pemetaan relasional objek (ORMs), dan lapisan abstraksi memiliki opsi konfigurasi untuk secara otomatis membungkus semua operasi dengan savepoint. Hal ini dapat membuat banyak peristiwa tunggu multixact di beberapa beban kerja. autosaveOpsi Postgre SQL JDBC Driver adalah contohnya. Untuk informasi lebih lanjut, lihat pg JDBC di dokumentasi Postgre SQLJDBC. Contoh lain adalah SQL ODBC driver Postgre dan opsinyaprotocol. Untuk informasi selengkapnya, lihat Opsi ODBC Konfigurasi psql di dokumentasi driver SQL ODBC Postgre.

  • Sub-transaksi dari klausa PL/PG — Setiap SQL EXCEPTION EXCEPTION klausa yang Anda tulis dalam fungsi atau prosedur PL/PG Anda menciptakan internalSQL. SAVEPOINT

  • Kunci asing – Beberapa transaksi memperoleh kunci bersama pada catatan induk.

Ketika baris tertentu disertakan dalam beberapa operasi transaksi, memproses baris memerlukan pengambilan transaksi IDs dari multixact daftar. Jika pencarian tidak mendapatkan multixact dari cache memori, struktur data harus dibaca dari lapisan penyimpanan Aurora. I/O dari penyimpanan ini berarti SQL kueri bisa memakan waktu lebih lama. Kesalahan cache memori dapat mulai terjadi dengan penggunaan yang berat karena jumlah transaksi ganda yang besar. Semua faktor ini berkontribusi pada peningkatan peristiwa tunggu ini.

Tindakan

Kami merekomendasikan berbagai tindakan, tergantung pada penyebab peristiwa tunggu Anda. Beberapa tindakan ini dapat membantu untuk segera mengurangi peristiwa tunggu. Namun, yang lainnya mungkin memerlukan penyelidikan dan koreksi untuk menskalakan beban kerja Anda.

Lakukan pembekuan vakum di atas tabel dengan peristiwa tunggu ini

Jika peristiwa tunggu ini melonjak mendadak dan memengaruhi lingkungan produksi, Anda dapat menggunakan salah satu metode sementara berikut untuk mengurangi penghitungannya.

  • Gunakan VACUUMFREEZEpada tabel atau partisi tabel yang terpengaruh untuk segera menyelesaikan masalah. Untuk informasi selengkapnya, lihat VACUUM.

  • Gunakan klausa VACUUM (FREEZE, INDEX _ CLEANUPFALSE) untuk melakukan vakum cepat dengan melewatkan indeks. Untuk informasi selengkapnya, lihat Memvakum tabel secepat mungkin.

Tingkatkan frekuensi autovacuum pada tabel dengan peristiwa tunggu ini

Setelah memindai semua tabel di semua database, akhirnya VACUUM akan menghapus multixacts, dan nilai multixact tertua mereka maju. Untuk informasi selengkapnya, lihat Multixact dan Wraparound. Untuk menjagaLWLock: MultiXact tunggu acara seminimal mungkin, Anda harus menjalankan VACUUM sesering yang diperlukan. Untuk melakukannya, pastikan bahwa cluster SQL DB Aurora Postgre Anda dikonfigurasi secara optimal. VACUUM

Jika menggunakan VACUUM FREEZE pada tabel atau partisi tabel yang terpengaruh menyelesaikan masalah acara tunggu, sebaiknya gunakan penjadwal, sepertipg_cron, untuk melakukan VACUUM alih-alih menyesuaikan autovacuum pada tingkat instans.

Agar autovacuum terjadi lebih sering, Anda dapat mengurangi nilai parameter penyimpanan autovacuum_multixact_freeze_max_age pada tabel yang terpengaruh. Untuk informasi selengkapnya, lihat autovacuum_multixact_freeze_max_age.

Meningkatkan parameter memori

Anda dapat mengoptimalkan penggunaan memori untuk cache multixact dengan menyesuaikan parameter berikut. Pengaturan ini mengontrol berapa banyak memori yang disediakan untuk cache ini, yang dapat membantu mengurangi peristiwa menunggu multixact di beban kerja Anda. Kami merekomendasikan memulai dengan nilai-nilai berikut:

  • multixact_offsets_cache_size ke 128

  • multixact_members_cache_size ke 256

Anda dapat mengatur parameter ini di tingkat cluster sehingga semua instance di cluster Anda tetap konsisten. Kami menyarankan Anda untuk menguji dan menyesuaikan nilai agar sesuai dengan persyaratan beban kerja spesifik dan kelas instance Anda. Anda harus me-reboot instance writer agar perubahan parameter diterapkan.

Parameter dinyatakan dalam hal entri cache multixact. Setiap entri cache menggunakan 8 KB memori. Untuk menghitung total memori yang dicadangkan, kalikan setiap nilai parameter dengan8 KB. Misalnya, jika Anda menetapkan parameter ke 128, total memori cadangan akan menjadi128 * 8 KB = 1 MB.

Mengurangi transaksi jangka panjang

Transaksi jangka panjang menyebabkan vakum mempertahankan informasinya hingga transaksi tersebut dilakukan atau hingga transaksi hanya dibaca ditutup. Kami merekomendasikan Anda untuk secara proaktif memantau dan mengelola transaksi jangka panjang. Untuk informasi selengkapnya, lihat Basis data telah lama berjalan idle dalam koneksi transaksi. Cobalah untuk memodifikasi aplikasi Anda untuk menghindari atau meminimalkan penggunaan transaksi jangka panjang Anda.

Tindakan jangka panjang

Periksa beban kerja Anda untuk menemukan penyebab limpahan multixact. Anda harus memperbaiki masalah tersebut untuk menskalakan beban kerja Anda dan mengurangi peristiwa tunggu.

  • Anda harus menganalisis DDL (bahasa definisi data) yang digunakan untuk membuat tabel Anda. Pastikan bahwa struktur dan indeks tabel dirancang dengan baik.

  • Saat tabel yang terpengaruh memiliki kunci asing, tentukan apakah diperlukan atau jika ada cara lain untuk memberlakukan integritas referensial.

  • Saat sebuah tabel memiliki indeks besar yang tidak digunakan, hal tersebut dapat menyebabkan autovacuum tidak sesuai dengan beban kerja Anda dan mungkin memblokirnya agar tidak berjalan. Untuk menghindari hal ini, periksa indeks yang tidak digunakan dan hapus sepenuhnya. Untuk informasi selengkapnya, lihat Mengelola autovacuum dengan indeks besar.

  • Kurangi penggunaan titik simpan dalam transaksi Anda.