Saat node primary PolarDB for MySQL melakukan restart, kolam buffer InnoDB-nya dimulai dalam keadaan kosong. Database memuat ulang halaman dari penyimpanan sesuai permintaan, sehingga kinerja menurun hingga kolam tersebut terisi kembali—proses yang dapat memakan waktu beberapa menit di bawah beban kerja tulis yang berat atau volume transaksi besar. Warm Buffer Pool menghilangkan periode cold-start ini dengan menyimpan kolam buffer di memori bersama Linux, terlepas dari proses database. Kolam buffer tetap ada meskipun terjadi restart dan langsung tersedia saat node kembali aktif.
Prasyarat
Sebelum mengaktifkan Warm Buffer Pool, pastikan bahwa:
Kluster PolarDB menjalankan MySQL 8.0.2 dengan versi revisi 8.0.2.1.0 atau lebih baru. Untuk memeriksa versi, lihat bagian "Query the engine version" pada Engine versions.
Fitur kompresi tabel tidak diaktifkan.
Cara Kerja
Warm Buffer Pool menyimpan kolam buffer InnoDB di memori bersama Linux, bukan di memori proses. Karena kolam buffer tidak bergantung pada proses PolarDB, ia tetap bertahan meskipun terjadi restart.

Perilaku utama:
Persistensi selama restart: Data kontrol kolam buffer, metadata halaman, dan data halaman disimpan di memori bersama. Saat PolarDB dimulai, ia menyambungkan ke kolam buffer memori bersama yang sudah ada alih-alih mengalokasikan yang baru.
Pemulihan setelah crash: Setelah node mengalami crash, PolarDB mendeteksi dan memperbaiki ketidakkonsistenan apa pun pada kolam buffer memori bersama sebelum menyambungkannya.
Shutdown bersih yang lebih cepat: Pada restart manual, PolarDB menyimpan status transaksi utama sebelum shutdown. Hal ini menghilangkan proses rollback saat shutdown maupun pemulihan saat startup, sehingga waktu restart berkurang secara signifikan.
Operasi O&M: Tool
mysqlshmmemungkinkan Anda mengkueri konfigurasi dan melepaskan kolam buffer memori bersama dari command line.
Manfaat
Restart lebih cepat
Warm Buffer Pool mengurangi waktu restart node primary dari hitungan menit menjadi detik. Peningkatan paling terasa ketika node primary memiliki kolam buffer besar dan menangani beban kerja tulis berat atau transaksi besar.
Kinerja pasca-restart yang konsisten
Karena kolam buffer tetap berada di memori bersama, halaman yang baru saja diakses masih tersedia setelah restart. Tidak ada periode pemanasan dan tidak ada penurunan kinerja.
Gambar berikut menunjukkan throughput selama restart dengan kolam buffer 50 GB, menggunakan beban kerja Sysbench OLTP read-only.

Tanpa Warm Buffer Pool (garis oranye): throughput turun menjadi 2% dari kondisi normal segera setelah restart dan membutuhkan sekitar 200 detik untuk pulih.
Dengan Warm Buffer Pool (garis biru): throughput tidak terpengaruh selama restart.
Aktifkan Warm Buffer Pool
Untuk restart manual
Atur
innodb_buf_shm_keyke nilai bukan nol dimy.cnf, lalu mulai kluster PolarDB.Verifikasi bahwa fitur ini aktif:
SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';Nilainya harus
Allocate from shared memory.Atur
innodb_fast_shutdownke3:SET GLOBAL innodb_fast_shutdown = 3;Restart node primary.
Setelah restart, periksa kembali statusnya:
SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';Nilainya harus
Attach to clean shutdown shared memory, yang berarti node tersebut menyambungkan ke kolam buffer yang dimatikan secara bersih.
Untuk restart yang dipicu oleh exception
Atur
innodb_buf_shm_keyke nilai bukan nol dimy.cnf, lalu mulai kluster PolarDB.Verifikasi bahwa fitur ini aktif:
SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';Nilainya harus
Allocate from shared memory.Hentikan proses mysqld untuk mensimulasikan crash node.
Tunggu hingga node melakukan restart.
Setelah restart, periksa kembali statusnya:
SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';Nilainya harus
Attach to abnormal shutdown shared memory, yang berarti PolarDB telah mendeteksi dan memulihkan kolam buffer memori bersama dari kondisi crash.
Referensi
Parameter
| Parameter | Tipe | Tingkat | Deskripsi |
|---|---|---|---|
innodb_buf_shm_key | Integer | Global | Identifier unik untuk kolam buffer memori bersama. Atur ke nilai bukan nol untuk mengaktifkan Warm Buffer Pool. Nilai valid: 0 hingga 2^64-1. Default: 0 (dinonaktifkan). |
innodb_buf_shm_base_addr | Integer | Global | Offset dasar alamat memori virtual untuk kolam buffer bersama. Nilai valid: 0x300000000000 hingga 2^64-1. Default: 0x567800000000. |
innodb_buf_page_desc_free_list_size | Integer | Global | Jumlah halaman yang dicadangkan untuk deskriptor halaman terkompresi. Nilai valid: 8–128. Default: 16. |
innodb_buf_free_zip_pages | Integer | Global | Cara menangani halaman terkompresi saat restart. Nilai valid: 1 (melepaskan halaman terkompresi saat node restart akibat exception), 2 (memaksa melepaskan halaman terkompresi selama restart). Default: 1. |
innodb_buffer_pool_parallel_scan_threads | Integer | Global | Jumlah thread untuk pemindaian kolam buffer paralel. Nilai valid: 0–512. Default: 4. |
innodb_buf_shm_huge_page | Bool | Global | Apakah akan menggunakan halaman besar saat mengalokasikan memori bersama. Nilai valid: ON, OFF. Default: ON. |
innodb_fast_shutdown | Integer | Global | Mode shutdown InnoDB. Nilai valid: 0, 1, 2, 3. Nilai 3 bersifat spesifik untuk PolarDB: perilaku sama seperti 2 tetapi tanpa melakukan rollback transaksi yang belum dikomit. Default: 1. |
Nilai Status
Kueri status saat ini dari Warm Buffer Pool:
SHOW GLOBAL STATUS LIKE 'innodb_shared_buffer_pool_status';| Nilai | Makna |
|---|---|
Using process private memory | Warm Buffer Pool dinonaktifkan. Node menggunakan memori privat proses standar. |
Allocate from shared memory | Warm Buffer Pool aktif. Kolam buffer dialokasikan di memori bersama. |
Attach to clean shutdown shared memory | Node menyambungkan ke kolam buffer yang dimatikan secara bersih. Akselerasi restart penuh diterapkan. |
Attach to abnormal shutdown shared memory | Node menyambungkan ke kolam buffer yang bertahan setelah crash. PolarDB telah memperbaiki ketidakkonsistenan apa pun. |
mysqlshm
mysqlshm adalah tool command-line untuk mengelola kolam buffer memori bersama. Gunakan tool ini untuk memeriksa atau melepaskan kolam buffer tanpa harus merestart database.
Usage: mysqlshm -k key [options]
-h, Display this help and exit.
-k, The shared memory key [REQUIRED]
-i, Prinf the basic info of shared memory
-f, Free the shared memory