sys.dm_hadr_database_replica_states (T-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Mengembalikan baris untuk setiap database yang berpartisipasi dalam grup ketersediaan AlwaysOn tempat instans lokal SQL Server menghosting replika ketersediaan. Tampilan manajemen dinamis ini mengekspos informasi status pada replika primer dan sekunder. Pada replika sekunder, tampilan ini mengembalikan baris untuk setiap database sekunder pada instans server. Pada replika utama, tampilan ini mengembalikan baris untuk setiap database utama dan baris tambahan untuk database sekunder yang sesuai.

Penting

Bergantung pada tindakan dan status tingkat yang lebih tinggi, informasi status database mungkin tidak tersedia atau kedaluarsa. Selain itu, nilai hanya memiliki relevansi lokal. Misalnya, pada replika utama, nilai kolom last_hardened_lsn mencerminkan informasi tentang database sekunder tertentu yang saat ini tersedia untuk replika utama, bukan nilai LSN yang diperkuat aktual yang mungkin dimiliki replika sekunder saat ini.

Nama kolom Jenis data Deskripsi (pada replika utama)
database_id int Pengidentifikasi database, unik dalam instans SQL Server. Ini adalah nilai yang sama seperti yang ditampilkan dalam tampilan katalog sys.databases .
group_id pengidentifikasi unik Pengidentifikasi grup ketersediaan tempat database berada.
replica_id pengidentifikasi unik Pengidentifikasi replika ketersediaan dalam grup ketersediaan.
group_database_id pengidentifikasi unik Pengidentifikasi database dalam grup ketersediaan. Pengidentifikasi ini identik pada setiap replika tempat database ini bergabung.
is_local bit Apakah database ketersediaan bersifat lokal, salah satu dari:

0 = Database tidak lokal untuk instans SQL Server.

1 = Database bersifat lokal untuk instans server.
is_primary_replica bit Mengembalikan 1 jika replika adalah primer, atau 0 jika replika sekunder.

Berlaku untuk: SQL Server 2014 (12.x) dan yang lebih baru.
synchronization_state kecil Status pergerakan data, salah satu nilai berikut.

0 = Tidak menyinkronkan. Untuk database utama, menunjukkan bahwa database belum siap untuk menyinkronkan log transaksinya dengan database sekunder yang sesuai. Untuk database sekunder, menunjukkan bahwa database belum memulai sinkronisasi log karena masalah koneksi, sedang ditangguhkan, atau sedang melalui status transisi selama pengaktifan atau pengalihan peran.

1 = Menyinkronkan. Untuk database utama, menunjukkan bahwa database siap menerima permintaan pemindaian dari database sekunder. Untuk database sekunder, menunjukkan bahwa pergerakan data aktif terjadi untuk database.

2 = Disinkronkan. Database utama memperlihatkan SYNCHRONIZED sebagai pengganti SYNCHRONIZING. Database sekunder penerapan sinkron menunjukkan disinkronkan ketika cache lokal mengatakan database siap untuk failover dan sedang disinkronkan.

3 = Mengembalikan. Menunjukkan fase dalam proses batalkan saat database sekunder secara aktif mendapatkan halaman dari database utama.
Perhatian: Ketika database pada replika sekunder berada dalam status MENGEMBALIKAN, memaksa failover ke replika sekunder meninggalkan database dalam keadaan di mana database tidak dapat dimulai sebagai database utama. Database perlu terhubung kembali sebagai database sekunder, atau Anda harus menerapkan rekaman log baru dari cadangan log.

4 = Inisialisasi. Menunjukkan fase urungkan ketika log transaksi yang diperlukan untuk database sekunder untuk mengejar Urungkan LSN sedang dikirim dan diperkeras pada replika sekunder.
Perhatian: Ketika database pada replika sekunder berada dalam status INISIALISASI, memaksa failover ke replika sekunder meninggalkan database dalam status di mana database tidak dapat dimulai sebagai database utama. Database perlu terhubung kembali sebagai database sekunder, atau Anda harus menerapkan rekaman log baru dari cadangan log.
synchronization_state_desc nvarchar(60) Deskripsi status pergerakan data, salah satu dari:

TIDAK MENYINKRONKAN

SINKRONISASI

DISINKRONISASI

KEMBALI

INITIALIZING
is_commit_participant bit 0 = Penerapan transaksi tidak disinkronkan sehubungan dengan database ini.

1 = Penerapan transaksi disinkronkan sehubungan dengan database ini.

Untuk database pada replika ketersediaan penerapan asinkron, nilai ini selalu 0.

Untuk database pada replika ketersediaan penerapan sinkron, nilai ini hanya akurat pada database utama.
synchronization_health kecil Mencerminkan persimpangan status sinkronisasi database yang bergabung ke grup ketersediaan pada replika ketersediaan dan mode ketersediaan replika ketersediaan (mode penerapan sinkron atau penerapan asinkron), salah satu nilai berikut.

0 = Tidak sehat. Synchronization_state database adalah 0 (TIDAK MENYINKRONKAN).

1 = Sebagian sehat. Database pada replika ketersediaan penerapan sinkron dianggap sebagian sehat jika synchronization_state adalah 1 (SINKRONISASI).

2 = Sehat. Database pada replika ketersediaan penerapan sinkron dianggap sehat jika synchronization_state adalah 2 (DISINKRONKAN), dan database pada replika ketersediaan penerapan asinkron dianggap sehat jika synchronization_state adalah 1 (SINKRONISASI).
synchronization_health_desc nvarchar(60) Deskripsi synchronization_health database ketersediaan.

NOT_HEALTHY

PARTIALLY_HEALTHY

SEHAT
database_state kecil 0 = Online

1 = Memulihkan

2 = Pemulihan

3 = Pemulihan tertunda

4 = Tersangka

5 = Darurat

6 = Offline

Catatan: Sama seperti kolom status di sys.databases.
database_state_desc nvarchar(60) Deskripsi database_state replika ketersediaan.

ONLINE

MEMULIHKAN

MEMULIHKAN

RECOVERY_PENDING

TERSANGKA

DARURAT

OFFLINE

Catatan: Sama seperti state_desc kolom di sys.databases.
is_suspended bit Status database, salah satu dari:

0 = Dilanjutkan

1 = Ditangguhkan
suspend_reason kecil Jika database ditangguhkan, alasan untuk status ditangguhkan, salah satu dari:

0 = Tindakan pengguna

1 = Tangguhkan dari mitra

2 = Ulangi

3 = Tangkap

4 = Terapkan

5 = Mulai ulang

6 = Batalkan

7 = Validasi Ulang

8 = Kesalahan dalam perhitungan titik sinkronisasi replika sekunder
suspend_reason_desc nvarchar(60) Deskripsi alasan status database yang ditangguhkan, salah satu dari:

SUSPEND_FROM_USER = Pengguna menangguhkan pergerakan data secara manual

SUSPEND_FROM_PARTNER = Replika database ditangguhkan setelah failover paksa

SUSPEND_FROM_REDO = Terjadi kesalahan selama fase pengulangan

SUSPEND_FROM_APPLY = Terjadi kesalahan saat menulis log ke file (lihat log kesalahan)

SUSPEND_FROM_CAPTURE = Terjadi kesalahan saat menangkap log pada replika utama

SUSPEND_FROM_RESTART = Replika database ditangguhkan sebelum database dimulai ulang (lihat log kesalahan)

SUSPEND_FROM_UNDO = Terjadi kesalahan selama fase batalkan (lihat log kesalahan)

SUSPEND_FROM_REVALIDATION = Ketidakcocokan perubahan log terdeteksi pada koneksi ulang (lihat log kesalahan)

SUSPEND_FROM_XRF_UPDATE = Tidak dapat menemukan titik log umum (lihat log kesalahan)
recovery_lsn numerik(25,0) Pada replika utama, akhir log transaksi sebelum database utama menulis rekaman log baru setelah pemulihan atau failover. Untuk database sekunder tertentu, jika nilai ini kurang dari LSN yang diperkuat saat ini (last_hardened_lsn), recovery_lsn adalah nilai yang perlu disinkronkan ulang database sekunder ini (yaitu, untuk kembali ke dan menginisialisasi ulang). Jika nilai ini lebih besar dari atau sama dengan LSN yang diperkeras saat ini, sinkronisasi ulang tidak akan diperlukan dan tidak akan terjadi.

mencerminkan recovery_lsn ID blok log yang diisi dengan nol. Ini bukan nomor urutan log aktual (LSN). Untuk informasi tentang bagaimana nilai ini diturunkan, lihat Memahami Nilai Kolom LSN, nanti dalam topik ini.
truncation_lsn numerik(25,0) Pada replika utama, untuk database utama, mencerminkan LSN pemotongan log minimum di semua database sekunder yang sesuai. Jika pemotongan log lokal diblokir (seperti oleh operasi pencadangan), LSN ini mungkin lebih tinggi dari LSN pemotongan lokal.

Untuk database sekunder tertentu, mencerminkan titik pemotongan database tersebut.

truncation_lsn mencerminkan ID blok log yang diisi dengan nol. Ini bukan nomor urutan log yang sebenarnya.
last_sent_lsn numerik(25,0) Saat mengkueri replika utama, last_sent_lsn dilaporkan untuk setiap baris database replika sekunder. Pengidentifikasi blok log yang menunjukkan titik di mana semua blok log telah dikirim oleh yang utama. Ini adalah ID blok log berikutnya yang akan dikirim, bukan ID blok log yang terakhir dikirim.

last_sent_lsn mencerminkan ID blok log yang diisi dengan nol, Ini bukan nomor urutan log yang sebenarnya.
last_sent_time datetime Saat mengkueri replika utama, last_sent_time dilaporkan untuk setiap baris database replika sekunder. Waktu ketika blok log terakhir dikirim.
last_received_lsn numerik(25,0) Saat mengkueri replika sekunder, last_received_lsn dilaporkan untuk baris database replika sekunder lokal. ID blok log yang mengidentifikasi titik di mana semua blok log telah diterima oleh replika sekunder yang menghosting database sekunder ini.

mencerminkan last_received_lsn ID blok log yang diisi dengan nol. Ini bukan nomor urutan log yang sebenarnya.
last_received_time datetime Saat mengkueri replika sekunder, last_received_time dilaporkan untuk baris database replika sekunder lokal. Waktu ketika ID blok log dalam pesan terakhir yang diterima dibaca pada replika sekunder.
last_hardened_lsn numerik(25,0) Mulai Blok Log yang berisi catatan log LSN terakhir yang diperkeras pada database sekunder.

Pada database utama penerapan asinkron atau pada database penerapan sinkron yang kebijakan saat ini adalah "penundaan", nilainya adalah NULL. Untuk database utama penerapan sinkron lainnya, last_hardened_lsn menunjukkan minimum LSN yang diperkeras di semua database sekunder.

Catatan:last_hardened_lsn mencerminkan ID blok log yang diisi dengan nol. Ini bukan nomor urutan log yang sebenarnya. Untuk informasi selengkapnya, lihat Memahami Nilai Kolom LSN, nanti dalam topik ini.
last_hardened_time datetime Pada database sekunder, waktu pengidentifikasi blok log untuk LSN terakhir yang diperkeras (last_hardened_lsn). Pada database utama, mencerminkan waktu yang sesuai dengan LSN minimum yang diperkeras.
last_redone_lsn numerik(25,0) Nomor urutan log aktual dari rekaman log terakhir yang direkonsikan ulang pada database sekunder. selalu last_redone_lsn kurang dari last_hardened_lsn.
last_redone_time datetime Waktu ketika catatan log terakhir direbus pada database sekunder.
log_send_queue_size bigint Jumlah catatan log database utama yang belum dikirim ke database sekunder, dalam kilobyte (KB).
log_send_rate bigint Laju rata-rata di mana instans replika utama mengirim data selama periode aktif terakhir, dalam kilobyte (KB)/detik.
redo_queue_size bigint Jumlah rekaman log dalam file log replika sekunder yang belum direone, dalam kilobyte (KB).
redo_rate bigint Laju rata-rata di mana rekaman log diremehkan pada database sekunder tertentu, dalam kilobyte (KB)/detik.

redo_rate dihitung dengan membandingkan total byte log redone sejak startup mesin database pada rentang waktu saat pengulangan berjalan secara aktif, bukan oleh waktu yang berlalu. Karena pengulangan mungkin tidak berjalan terus menerus, nilai yang dihasilkan mungkin berbeda (lebih tinggi) dari nilai penghitung Database Replica:Redone Bytes/sec kinerja.
filestream_send_rate bigint Tingkat pengiriman file FILESTREAM ke replika sekunder, dalam kilobyte (KB)/detik.
end_of_log_lsn numerik(25,0) Akhir lokal log LSN. LSN aktual yang sesuai dengan catatan log terakhir di cache log pada database utama dan sekunder. Pada replika utama, baris sekunder mencerminkan akhir LSN log dari pesan kemajuan terbaru yang telah dikirim replika sekunder ke replika utama.

end_of_log_lsn mencerminkan ID blok log yang diisi dengan nol. Ini bukan nomor urutan log yang sebenarnya. Untuk informasi selengkapnya, lihat Memahami Nilai Kolom LSN, nanti dalam topik ini.
last_commit_lsn Numerik(25,0) Nomor urutan log aktual yang sesuai dengan catatan penerapan terakhir dalam log transaksi.

Pada database utama, ini sesuai dengan rekaman penerapan terakhir yang diproses. Baris untuk database sekunder memperlihatkan nomor urutan log yang telah dikirim replika sekunder ke replika utama.

Pada replika sekunder, ini adalah catatan penerapan terakhir yang direbus.
last_commit_time datetime Waktu yang sesuai dengan catatan penerapan terakhir.

Pada database sekunder, kali ini sama seperti pada database utama.

Pada replika utama, setiap baris database sekunder menampilkan waktu replika sekunder yang menghosting database sekunder yang telah dilaporkan kembali ke replika utama. Perbedaan waktu antara baris database utama dan baris database sekunder tertentu mewakili sekitar tujuan titik pemulihan (RPO), dengan asumsi bahwa proses pengulangan tertangkap dan bahwa kemajuan telah dilaporkan kembali ke replika utama oleh replika sekunder.
low_water_mark_for_ghosts bigint Angka yang meningkat secara monoton untuk database yang menunjukkan tanda air rendah yang digunakan oleh pembersihan hantu pada database utama. Jika jumlah ini tidak meningkat dari waktu ke waktu, itu menyiratkan bahwa pembersihan hantu mungkin tidak terjadi. Untuk memutuskan baris hantu mana yang akan dibersihkan, replika utama menggunakan nilai minimum kolom ini untuk database ini di semua replika ketersediaan (termasuk replika utama).
secondary_lag_seconds bigint Jumlah detik replika sekunder berada di belakang replika utama selama sinkronisasi.

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru.

Memahami Nilai Kolom LSN

Nilai kolom end_of_log_lsn, last_hardened_lsn, last_received_lsn, last_sent_lsn, recovery_lsn, dan truncation_lsn bukan angka urutan log (LSN) yang sebenarnya. Sebaliknya masing-masing nilai ini mencerminkan ID blok log yang diisi dengan nol.

end_of_log_lsn, last_hardened_lsn, dan recovery_lsn adalah FLUSH LSN. Misalnya, last_hardened_lsn menunjukkan awal blok berikutnya melewati blok yang sudah ada di disk. Jadi setiap LSN < nilai last_hardened_lsn ada di disk. LSN yang = >ke nilai ini tidak dihapus.

Dari nilai LSN yang dikembalikan oleh sys.dm_hadr_database_replica_states, hanya last_redone_lsn yang merupakan LSN nyata.

Izin

Memerlukan izin TAMPILKAN STATUS SERVER pada server.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.

Baca juga

Grup Ketersediaan Always On (SQL Server)
Memantau Grup Ketersediaan (Transact-SQL)