Pemecahan Masalah: Grop Ketersediaan melebihi RTO

Berlaku untuk:SQL Server

Setelah failover otomatis atau failover manual yang direncanakan tanpa kehilangan data pada grup ketersediaan, Anda mungkin menemukan bahwa waktu failover melebihi tujuan waktu pemulihan (RTO). Atau, ketika Anda memperkirakan waktu failover replika sekunder penerapan sinkron (seperti mitra failover otomatis) menggunakan metode dalam Memantau performa untuk Grup Ketersediaan AlwaysOn, Anda menemukan bahwa itu melebihi RTO Anda.

Jika failover otomatis Anda masih belum selesai, lihat Memecahkan masalah failover otomatis di lingkungan AlwaysOn SQL Server 2012.

Bagian berikut menjelaskan penyebab umum untuk waktu failover yang melebihi RTO.

  1. Melaporkan beban kerja memblokir utas pengulangan dari menjalankan

  2. Utas pengulangan tertinggal karena ketidakcocokan sumber daya

Melaporkan beban kerja memblokir utas pengulangan dari menjalankan

Utas pengulangan pada replika sekunder diblokir untuk membuat bahasa definisi data (DDL) berubah oleh kueri baca-saja yang berjalan lama.

Penjelasan

Pada replika sekunder, kueri baca-saja memperoleh kunci stabilitas skema (Sch-S). Kunci ini Sch-S dapat memblokir utas pengulangan agar tidak memperoleh kunci modifikasi skema (Sch-M) untuk membuat perubahan DDL. Utas pengulangan yang diblokir tidak dapat menerapkan rekaman log hingga tidak diblokir. Setelah tidak diblokir, ia dapat terus mengejar hingga akhir log dan memungkinkan proses batalkan dan failover berikutnya untuk melanjutkan.

Diagnosis dan resolusi

Saat utas pengulangan diblokir, peristiwa yang diperluas yang disebut sqlserver.lock_redo_blocked dibuat. Selain itu, Anda dapat mengkueri sys.dm_exec_request DMV pada replika sekunder untuk mengetahui sesi mana yang memblokir utas REDO, lalu Anda dapat mengambil tindakan korektif. Kueri berikut mengembalikan ID sesi kueri baca-saja yang memblokir utas pengulangan.

select session_id, command, blocking_session_id, wait_time, wait_type, wait_resource   
from sys.dm_exec_requests where command = 'DB STARTUP'  

Anda dapat membiarkan beban kerja pelaporan selesai, di mana utas pengulangan tidak diblokir, atau Anda dapat membuka blokir utas fase pengulangan segera dengan menjalankan perintah KILL (Transact-SQL) pada ID sesi pemblokiran.

Utas pengulangan tertinggal karena ketidakcocokan sumber daya

Beban kerja pelaporan besar pada replika sekunder telah memperlambat performa replika sekunder, dan utas fase pengulangan telah tertinggal.

Penjelasan

Saat menerapkan rekaman log pada replika sekunder, utas pengulangan membaca rekaman log dari disk log, lalu untuk setiap rekaman log, ia mengakses halaman data untuk menerapkan rekaman log. Akses halaman dapat terikat I/O (mengakses disk fisik) jika halaman belum ada di kumpulan buffer. Jika ada beban kerja pelaporan terikat I/O, beban kerja pelaporan bersaing untuk sumber daya I/O dengan utas pengulangan dan dapat memperlambat utas pengulangan.

Diagnosis dan resolusi

Anda dapat menggunakan kueri DMV berikut untuk melihat seberapa jauh utas pengulangan telah tertinggal, dengan mengukur perbedaan antara kesenjangan antara last_redone_lsn dan last_received_lsn.

select recovery_lsn, truncation_lsn, last_hardened_lsn, last_received_lsn,   
   last_redone_lsn, last_redone_time  
from sys.dm_hadr_database_replica_states  
  

Jika utas fase pengulangan memang tertinggal, Anda perlu menyelidiki akar penyebab penurunan performa pada replika sekunder. Jika ada ketidakcocokan I/O dengan beban kerja pelaporan, Anda dapat menggunakan Resource Governor untuk mengontrol siklus CPU yang digunakan oleh beban kerja pelaporan untuk secara tidak langsung mengontrol siklus I/O yang diambil, hingga batas tertentu. Misalnya, jika beban kerja pelaporan Anda menggunakan 10 persen CPU tetapi beban kerja terikat I/O, Anda dapat menggunakan Resource Governor untuk membatasi penggunaan sumber daya CPU hingga 5 persen untuk membatasi beban kerja baca, yang meminimalkan dampak pada I/O.

Langkah berikutnya

Memecahkan masalah performa di SQL Server (berlaku untuk SQL Server 2012)