LWLock:BufferIO (IPC:BufferIO) - Layanan Basis Data Relasional Amazon

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

LWLock:BufferIO (IPC:BufferIO)

Peristiwa LWLock:BufferIO terjadi ketika RDS for PostgreSQL menunggu proses lain untuk menyelesaikan operasi input/output (I/O)-nya ketika secara konkuren mencoba mengakses halaman. Tujuannya adalah agar halaman yang sama dibacakan ke buffer bersama.

Versi mesin yang relevan

Informasi peristiwa tunggu ini relevan untuk semua versi RDS for PostgreSQL. Untuk RDS for PostgreSQL 12 dan versi sebelumnya peristiwa tunggu ini dinamai lwlock:buffer_io sedangkan di RDS for PostgreSQL versi 13 dinamai lwlock:bufferio. Mulai dari RDS for PostgreSQL versi 14, peristiwa tunggu BufferIO dipindahkan dari jenis peristiwa tunggu LWLock ke IPC (IPC:BufferIO).

Konteks

Setiap buffer bersama memiliki kunci I/O yang terkait dengan peristiwa tunggu LWLock:BufferIO, setiap kali blok (atau halaman) harus diambil di luar pool buffer bersama.

Kunci ini digunakan untuk menangani beberapa sesi yang semuanya memerlukan akses ke blok yang sama. Blok ini harus dibaca dari luar pool buffer bersama, yang ditentukan oleh parameter shared_buffers.

Segera setelah halaman dibaca di dalam kumpulan buffer bersama, kunci LWLock:BufferIO akan dilepaskan.

catatan

Peristiwa tunggu LWLock:BufferIO mendahului peristiwa tunggu IO: DataFileRead. Peristiwa tunggu IO:DataFileRead terjadi saat data sedang dibaca dari penyimpanan.

Untuk informasi selengkapnya tentang kunci ringan, lihat Gambaran Umum Penguncian.

Penyebab

Penyebab umum peristiwa LWLock:BufferIO muncul dalam peristiwa tunggu teratas mencakup yang berikut:

  • Beberapa backend atau koneksi mencoba mengakses halaman yang sama yang juga menunggu operasi I/O

  • Rasio antara ukuran pool buffer bersama (ditentukan oleh parameter shared_buffers) dan jumlah buffer yang dibutuhkan oleh beban kerja saat ini

  • Ukuran pool buffer bersama tidak seimbang dengan jumlah halaman yang dikosongkan oleh operasi lain

  • Indeks besar atau bloat yang mengharuskan mesin membacakan lebih banyak halaman daripada yang diperlukan ke dalam pool buffer bersama

  • Kurangnya indeks yang memaksa mesin DB untuk membaca lebih banyak halaman dari tabel daripada yang diperlukan

  • Checkpoint terjadi terlalu sering atau perlu melakukan flushing terlalu banyak halaman yang dimodifikasi

  • Lonjakan tiba-tiba untuk koneksi basis data yang mencoba melakukan operasi pada halaman yang sama

Tindakan

Kami merekomendasikan berbagai tindakan tergantung pada penyebab peristiwa tunggu Anda:

  • Amati metrik Amazon CloudWatch untuk korelasi antara penurunan tajam pada peristiwa tunggu BufferCacheHitRatio dan LWLock:BufferIO. Efek ini dapat berarti bahwa Anda memiliki pengaturan buffer bersama kecil. Anda mungkin perlu meningkatkan atau menaikkan skala kelas instans DB Anda. Anda dapat membagi beban kerja Anda menjadi lebih banyak simpul pembaca.

  • Setel max_wal_size dan checkpoint_timeout berdasarkan waktu puncak beban kerja Anda jika Anda melihat LWLock:BufferIO bertepatan dengan penurunan metrik BufferCacheHitRatio. Kemudian, identifikasi kueri mana yang mungkin menyebabkannya.

  • Verifikasi apakah Anda memiliki indeks yang tidak digunakan, lalu hapus.

  • Gunakan tabel yang dipartisi (yang juga memiliki indeks yang dipartisi). Dengan melakukan hal ini, Anda dapat menjaga penyusunan ulang indeks tetap rendah dan mengurangi dampaknya.

  • Hindari kolom pengindeksan yang tidak perlu.

  • Cegah lonjakan koneksi basis data yang tiba-tiba dengan menggunakan pool koneksi.

  • Batasi jumlah maksimum koneksi ke basis data sebagai praktik terbaik.