PAGELATCH_ * dan WRITELOG tinggi menunggu. Apakah mereka terkait?

11

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.

Pixelated
sumber
1
Melihat masalah yang sangat mirip dengan ini saat ini ..
Dave Lawrence
Sudahkah Anda melihat kemungkinan VLF tinggi yang menyebabkan masalah?
Kin Shah
@Kin maksud Anda dalam hal flush log lambat ke disk memegang membuka kait PAGELATCH_EX dan menyebabkan pertikaian kait?
Pixelated
Tidak ada alasan implementasi SQL Server harus menghasilkan catatan log di bawah kait halaman. Mengapa mereka melakukannya dengan cara ini? Tidak masuk akal. Juga, jika penulisan log dilakukan di bawah patchlatch Anda tidak akan pernah melihat WRITELOG menunggu. Hanya ada satu jenis menunggu yang diambil sekaligus.
usr

Jawaban:

1

Namun pertanyaan saya adalah ketika catatan baru dimasukkan, apakah SQL Server mengambil PAGELATCH_EX eksklusif pada halaman buffer, masukkan catatan ke halaman buffer, tulis catatan ke log transaksi dan kemudian lepaskan PAGELATCH_EX eksklusif

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.

Shanky
sumber
Hai @Shanky, berdasarkan sys.dm_os_waiting_tasks.resource_description ditambah dengan PAGE DBCC dan jenis PAGELATCH_ * Saya telah mengesampingkan tempDB. Berdasarkan rantai peristiwa oleh Bob Dorr sepertinya langkah "Hasilkan catatan log" selesai dalam mekanisme penguncian?
Pixelated
3
Keduanya adalah peristiwa yang saling eksklusif menulis dalam file log tidak ada hubungannya dengan menempel hanya SQL Server berikut protokol WAL untuk menulis informasi dalam log sebelum benar-benar melakukan transaksi
Shanky