Kami melihat jenis tunggu PAGELATCH_EX dan PAGELATCH_SH yang sangat tinggi bersama dengan menunggu WRITELOG yang tinggi. Saya telah mendiagnosis kueri yang menyebabkan PAGELATCH menunggu dan dapat menghilangkannya dengan mengurangi laju penyisipan ke dalam kunci primer yang sibuk yang dikelompokkan yang ditentukan dengan nilai IDENTITAS. Saya mengerti bahwa fenomena ini dikenal sebagai pertanda latch insert halaman terakhir.
Namun pertanyaan saya adalah ketika catatan baru dimasukkan, apakah SQL Server mengambil PAGELATCH_EX eksklusif pada halaman penyangga, menyisipkan catatan ke halaman penyangga, menulis catatan ke log transaksi dan kemudian merilis PAGELATCH_EX eksklusif sebagai rincian https: // www.microsoft.com/en-ie/download/details.aspx?id=26665 Halaman 24. Atau apakah itu menulis catatan ke log transaksi terlebih dahulu sebelum mengambil PAGELATCH_EX sebagai terperinci "Menyelesaikan PAGELATCH Contention pada Sangat Serempak" INSERT Workloads - Informasi latar belakang Panduan SQLCAT untuk: Mesin Relasional
Jika catatan ditulis untuk log di luar mekanisme latching maka saya dapat mengesampingkan penulisan lambat ke disk sebagai penyebab menunggu PAGELATCH tinggi. Tetapi jika kait dipegang sampai catatan mengeras untuk login maka saya mungkin harus mempertimbangkan WRITELOG.
Juga akan memiliki beberapa indeks non-clustered menyebabkan PAGELATCH_ * latch ditahan lebih lama yaitu jika tabel memiliki indeks clustered dan beberapa non clustered adalah kait ditambahkan dan dirilis ke masing-masing halaman buffer indeks secara bersamaan?
Pembaruan 1 Setelah membaca slide confio-sql-server-writelog-tunggu dua dan arsitektur WAL umum. Saya sekarang memahami bahwa langkah "Rekam entri log yang barisnya telah dimodifikasi" yang diuraikan dalam kedua kertas putih mengacu pada SQL Server logging perubahan dalam cache log transaksi, bukan disk. Setelah transaksi selesai atau buffer penuh semua catatan segera dibilas ke disk.
Jawaban:
Anda harus mencatat bahwa kait hanya melindungi integritas fisik halaman saat berada di memori sehingga kait akan diambil ketika halaman ada di memori. Misalkan catatan sedang dimasukkan dan untuk halaman itu perlu diambil. Pertama, halaman akan dikunci dan dibawa ke memori kemudian akan terkunci dan informasi akan ditulis. Proses setelah ini akan terjadi
Hasilkan catatan log
Perbarui halaman LSN agar sesuai dengan catatan log
Ubah Data (kotor halaman)
Lepaskan kait
Mulai Transaksi Komit
FlushToLSN dari Komit
Lepaskan kunci
Transaksi Komit Selesai
Untuk detail dan penjelasan lebih lanjut tentang langkah-langkah di atas silakan baca blog presentasi I / O Bob Dorr
Pagelatch * menunggu bukan menunggu I / O dan saya telah melihat sebagian besar waktu menunggu ini menonjol karena pertentangan alokasi. Firasat saya adalah bahwa ia harus melakukan sesuatu dengan caranya
tempdb is configured
. Jadi bagaimana tempdb Anda dikonfigurasi ?, berapa banyak file data tempdb hadir? Pastikan mereka memiliki autogrowth dan ukuran yang sama. Ketika halaman baru dibuat halaman sistem seperti halaman GAM, SGAM dan PFS perlu diperbarui atau diakses dan ketika SQL Server menemukan pertentangan dalam mengakses halaman-halaman ini, tunggu seperti datang ke dalam gambar.sumber