Instans RDS read-only menggunakan replikasi asinkron atau semi-asinkron berbasis log bawaan MySQL untuk tetap selaras dengan instans primary. Mekanisme ini dapat menyebabkan keterlambatan (lag), yang berpotensi menimbulkan inkonsistensi data sementara atau menghabiskan kapasitas penyimpanan instans read-only akibat akumulasi log biner.
Jika sejumlah besar log sedang dihasilkan untuk instans RDS primary, instans RDS read-only-nya mungkin terkunci.
Gunakan dokumen ini untuk menginterpretasikan metrik latensi replikasi, mengidentifikasi akar permasalahan, dan menyelesaikan masalah tersebut.
Cara pengukuran latensi replikasi
Field Seconds_Behind_Master dalam output perintah SHOW SLAVE STATUS \G melaporkan latensi replikasi dalam satuan detik.
Rumus latensi: Latensi = Waktu saat ini − Titik waktu ketika transaksi yang sedang diterapkan pada instans read-only dikomit pada instans RDS primary
Jalankan pernyataan berikut pada instans read-only untuk memeriksa status replikasi terkininya:
SHOW SLAVE STATUS \GField utama yang perlu diperiksa:
| Field | Yang harus diperhatikan |
|---|---|
Slave_IO_Running | Harus bernilai Yes. Nilai No menunjukkan replikasi terputus. |
Slave_SQL_Running | Harus bernilai Yes. Nilai No menunjukkan replikasi terputus. |
Seconds_Behind_Master | Latensi replikasi dalam detik. Nilai 0 berarti instans read-only telah selaras. Nilai NULL berarti replikasi tidak aktif. |
Exec_Master_Log_Pos | Jika nilai ini tetap tidak berubah sementara Seconds_Behind_Master terus meningkat, thread SQL terhenti pada transaksi besar atau operasi DDL. |
Last_IO_Error / Last_SQL_Error | Pesan error untuk thread I/O atau thread SQL, jika ada. |
Latensi <= 1 detik: kapan harus diabaikan
Latensi yang dilaporkan sebesar 1 detik atau kurang biasanya tidak menunjukkan masalah nyata. Dua penyebab umum menjelaskan hal ini:
Granularitas pemantauan. Jika rentang waktu pemantauan diatur lebih dari 6 menit, granularitas pemantauan default bisa sekasar 30 detik. Nilai yang ditampilkan merupakan rata-rata selama interval tersebut, bukan pembacaan instan. Untuk mendapatkan pembacaan dengan granularitas 1 detik, buka tab Performance Trends di Konsol ApsaraDB RDS dan atur rentang waktu pemantauan menjadi kurang dari 6 menit.
Pengambilan sampel lintas detik. Titik pengambilan sampel selalu dibulatkan ke bawah ke detik terdekat. Jika suatu transaksi dimulai pada satu detik dan selesai pada detik berikutnya, perhitungan latensi akan melaporkan 1 detik terlepas dari keterlambatan aktual yang kurang dari satu detik. Tabel berikut menggambarkan perilaku ini:
| Transaksi | Commit Time at Primary | Waktu commit pada read-only | Waktu saat ini | Latensi yang dilaporkan |
|---|---|---|---|---|
| Trx1 | 00:00:00.30 | 00:00:00.50 | 00:00:00.35 | 0(0.35) - 0(0.30) = 0 s |
| 00:00:00.45 | 0(0.45) - 0(0.30) = 0 s | |||
| Trx2 | 00:00:00.90 | 00:00:01.10 | 00:00:00.95 | 0(0.95) - 0(0.90) = 0 s |
| 00:00:01.05 | 1(1.05) - 0(0.90) = 1 s |
Atur ambang batas peringatan untuk latensi baca menjadi lebih besar dari 1 detik agar tidak menerima alarm palsu.
Latensi > 1 detik: identifikasi dan perbaiki penyebabnya
Latensi yang berkelanjutan lebih dari 1 detik memerlukan investigasi. Bagian berikut mencakup lima penyebab paling umum, cara memastikan masing-masing penyebab, serta cara menanganinya.
Sebelum melakukan perubahan konfigurasi—seperti memodifikasi spesifikasi instans atau data—buat snapshot atau aktifkan cadangan log untuk melindungi data Anda. Jika Anda memberikan izin pada informasi sensitif atau mengirimkan informasi sensitif di Konsol Manajemen Alibaba Cloud, kami menyarankan agar Anda segera mengubah informasi sensitif tersebut. Informasi sensitif mencakup username dan password.
Penyebab 1: Spesifikasi instans read-only terlalu rendah
Apa yang terjadi. Replikasi menggunakan thread I/O (untuk mengambil log biner dari primary) dan thread SQL (untuk menerapkannya secara lokal). Kedua thread bersaing untuk sumber daya I/O, termasuk operasi input/output per detik (IOPS). Jika instans read-only tidak mampu mempertahankan IOPS yang dibutuhkan, ia akan tertinggal.
Cara memastikan. Di Konsol ApsaraDB RDS, buka Monitoring and Alerts untuk instans read-only. Periksa apakah utilisasi CPU, penggunaan memori, bandwidth I/O, atau IOPS secara konsisten mencapai batas maksimumnya. Anda juga dapat melihat tipe instans di bagian Configuration Information pada halaman Basic Information. Untuk informasi lebih lanjut, lihat Tipe instans untuk instans read-only ApsaraDB RDS for MySQL (x86) dan Tipe instans untuk instans read-only ApsaraDB RDS for MySQL (ARM).
Cara memperbaiki. Upgrade instans read-only ke spesifikasi yang setara atau lebih tinggi daripada instans primary. Untuk informasi lebih lanjut, lihat Mengubah spesifikasi instans ApsaraDB RDS for MySQL.
Penyebab 2: Transaksi per detik (TPS) tinggi pada instans primary
Apa yang terjadi. Satu thread SQL menerapkan semua transaksi yang direplikasi pada instans read-only secara serial. Jika instans primary memproses volume besar penulisan konkuren, instans read-only tidak mampu mengimbangi.
Cara memastikan. Buka halaman Dashboard instans primary atau read-only dan periksa metrik TPS. Untuk informasi lebih lanjut, lihat Menggunakan fitur dashboard untuk instans ApsaraDB RDS for MySQL.
Cara memperbaiki. Optimalkan atau pecah transaksi besar pada instans primary untuk mengurangi volume penulisan per transaksi dan mempersingkat waktu setiap transaksi menahan thread SQL.
Penyebab 3: Transaksi besar pada instans primary
Apa yang terjadi. Operasi seperti UPDATE, DELETE, INSERT...SELECT, dan REPLACE...SELECT pada volume data besar menghasilkan entri log biner yang besar. Instans read-only harus menghabiskan waktu yang sama untuk menerapkan transaksi tersebut seperti yang dihabiskan oleh instans primary saat mengeksekusinya. Misalnya, penghapusan yang memakan waktu 80 detik pada primary juga memerlukan 80 detik untuk direplikasi.
Selain itu, meskipun transaksi konkuren pada beberapa tabel didukung, hanya satu thread yang mereplikasi transaksi pada tabel tertentu dalam satu waktu, yang dapat memperparah keterlambatan.
Cara memastikan. Jalankan SHOW SLAVE STATUS \G pada instans read-only dan amati apakah Seconds_Behind_Master terus meningkat sementara Exec_Master_Log_Pos tetap sama. Kemudian jalankan SHOW PROCESSLIST untuk mengidentifikasi thread SQL tertentu. Jika binary logging diatur ke format ROW, periksa apakah ada file log biner yang melebihi ambang batas max_binlog_size:
SHOW BINARY LOGS;Jika File_size melebihi max_binlog_size, kemungkinan besar transaksi besar adalah penyebabnya.
Periksa juga adanya kontensi kunci metadata (MDL) dengan memeriksa output SHOW SLAVE STATUS \G untuk kondisi menunggu kunci.
Cara memperbaiki. Pecah transaksi besar menjadi batch yang lebih kecil. Misalnya, tambahkan klausa WHERE dengan batasan jumlah baris pada pernyataan DELETE sehingga setiap batch memproses jumlah baris yang dapat dikelola, memungkinkan instans read-only tetap mengimbangi.
Penyebab 4: DDL berdurasi panjang pada instans primary
Apa yang terjadi. Replikasi menerapkan pernyataan Data Definition Language (DDL) secara serial. Operasi DDL pada tabel besar—seperti CREATE INDEX, ALTER TABLE ADD COLUMN, atau REPAIR TABLE—dapat memblokir seluruh replikasi berikutnya hingga selesai. Kueri lambat yang menghasilkan banyak tabel temporary memperparah masalah ini dengan mengonsumsi I/O disk.
Secara terpisah, kueri yang sedang berjalan atau transaksi terbuka pada instans read-only dapat menyebabkan kontensi MDL yang memblokir pernyataan DDL yang datang dari primary.
Cara memastikan.
Periksa apakah file log biner terus bertambah tanpa dipotong, yang mengindikasikan backlog DDL.
Jalankan pernyataan berikut pada instans read-only untuk memeriksa kontensi kunci:
SHOW ENGINE INNODB STATUS \GJalankan pernyataan berikut untuk mengidentifikasi tabel yang sedang digunakan:
SHOW OPEN TABLES;Tabel dengan
in_use = 1terkunci dan mungkin memblokir replikasi.Tinjau log kueri lambat untuk operasi terkait DDL seperti
OPTIMIZE,ALTER,REPAIR, danCREATE. Untuk informasi lebih lanjut, lihat Analisis log kueri lambat.
Cara memperbaiki.
Jadwalkan operasi DDL pada jam sepi.
Aktifkan fitur ekspansi penyimpanan otomatis, atau atur ambang batas ekspansi penyimpanan manual menjadi 90%. Untuk informasi lebih lanjut, lihat Bagaimana cara melakukan scaling pada instans ApsaraDB RDS?
Aktifkan SQL Explorer untuk memantau kinerja SQL secara berkala. Untuk informasi lebih lanjut, lihat Menggunakan fitur SQL Explorer dan Audit pada instans ApsaraDB RDS for MySQL.
Konfigurasikan peringatan penggunaan disk atau upgrade spesifikasi instans. Untuk informasi lebih lanjut, lihat Mengubah spesifikasi instans ApsaraDB RDS for MySQL.
Jika pernyataan DDL dari primary diblokir oleh kunci metadata pada instans read-only:
Jalankan
SHOW PROCESSLIST;pada instans read-only untuk menemukan thread SQL yang menunggu kunci metadata.Hentikan session yang memegang kunci tersebut untuk melanjutkan replikasi. Untuk informasi lebih lanjut, lihat Menggunakan DMS untuk melepaskan kunci metadata.
Penyebab 5: Tabel memiliki indeks unik tetapi tidak memiliki primary key
Apa yang terjadi. Ketika sebuah tabel tidak memiliki primary key dan hanya memiliki indeks unik yang berisi nilai NULL, thread SQL replikasi menggunakan rencana eksekusi berdasarkan indeks unik tersebut alih-alih rencana yang dipilih oleh pengoptimal—meskipun klausa WHERE seharusnya memungkinkan pencarian yang lebih efisien. Hal ini memaksa pemindaian tabel penuh selama replikasi, yang secara signifikan meningkatkan logical read dan memperlambat thread SQL.
Cara memastikan. Jalankan kueri berikut pada instans primary untuk mengidentifikasi tabel yang tidak memiliki primary key:
SELECT tab.table_schema AS database_name, tab.table_name
FROM information_schema.tables tab
LEFT JOIN information_schema.table_constraints tco
ON tab.table_schema = tco.table_schema
AND tab.table_name = tco.table_name
AND tco.constraint_type = 'PRIMARY KEY'
WHERE tco.constraint_type IS NULL
AND tab.table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')
AND tab.table_type = 'BASE TABLE'
ORDER BY tab.table_schema, tab.table_name;Untuk tabel yang dikembalikan oleh kueri tersebut, gunakan view sys.schema_index_statistics untuk memastikan apakah indeks unik tersebut berisi nilai NULL.
Cara memperbaiki. Tambahkan primary key eksplisit ke setiap tabel yang tidak memilikinya.
FAQ
Mengapa latensi 1 detik muncul pada beberapa instans read-only tetapi tidak pada yang lain?
Setiap instans read-only memulai prosedur pengumpulan datanya pada waktu yang sedikit berbeda. Jika titik pengambilan sampel kebetulan melewati batas detik, latensi 1 detik dilaporkan; jika tidak, latensi dilaporkan sebagai 0 detik. Ini merupakan artefak pengukuran, bukan perbedaan nyata dalam kinerja replikasi. Untuk detailnya, lihat Latensi <= 1 detik: kapan harus diabaikan.
Apakah latensi 1 detik berarti instans saya terpengaruh?
Tidak. Latensi 1 detik yang dilaporkan tidak berarti keterlambatan aktual terjadi. Nilai tersebut mencerminkan pembulatan perhitungan, bukan keterlambatan sinkronisasi yang sesungguhnya. Atur ambang batas latensi baca untuk proxy atau peringatan Anda menjadi lebih besar dari 1 detik untuk menyaring false positive ini.
Apa yang harus saya lakukan ketika muncul error ReplicationInterrupted, atau ketika peringatan Slave_SQL_Running atau Slave_IO_Running dipicu?
Periksa hal-hal berikut secara berurutan:
Kapasitas penyimpanan. Jika instans read-only kehabisan ruang penyimpanan, ia tidak dapat menulis log biner yang masuk. Periksa penggunaan penyimpanan di bagian Usage Statistics pada halaman Basic Information.
Latensi replikasi. Jika latensi terus-menerus melebihi 5 detik dalam jendela 5 menit, peringatan akan dipicu. Volume penulisan tinggi atau transaksi besar pada primary kemungkinan besar menjadi penyebabnya. Untuk melihat latensi terkini, buka Monitoring and Alerts > Standard Monitoring dan periksa metrik Replication Latency of Secondary Instances(second).
Log kueri lambat. Kueri lambat pada instans read-only menurunkan kinerja thread SQL dan dapat memperparah keterlambatan replikasi. Periksa log tersebut di bawah Logs > Slow Query Logs, atau buka Autonomy Services > Slow Query Logs.
Jika tidak ada yang berlaku dari poin-poin di atas, sistem secara otomatis mendeteksi dan menyelesaikan gangguan replikasi tersebut.