Trace Flag 1222 Tidak Bekerja?

8

Saya memiliki situs pelanggan dengan dua Server SQL 2008r2 yang dikonfigurasi serupa "A" dan "C". Di kedua server, tanda jejak 1204 dan 1222 diaktifkan dan DBCC tracestatusmenunjukkan yang berikut di kedua server:

TraceFlag   Status  Global  Session
1204        1       1      0
1222        1       1      0
3605        1       1      0

Pada A, jejak jejak berfungsi seperti yang diharapkan, saat terjadi deadlock, kami mendapatkan laporan deadlock 1204 dan 1222 di log kesalahan. Namun, pada C, hanya laporan 1204 yang muncul, kami tidak pernah mendapatkan laporan 1.222.

Untuk kehidupan saya, saya tidak dapat melihat alasan untuk perbedaan ini. Saya telah meneliti ini secara ekstensif di Google, dan membaca (dan membaca kembali) dokumen MS pada tanda jejak ini, dan saya tidak dapat menemukan laporan perilaku seperti ini, atau petunjuk apa pun tentang apa yang mungkin menyebabkannya. Satu-satunya hal yang mendekati adalah klaim sesekali bahwa tidak ada bendera jejak yang berfungsi, tetapi ini semua ternyata kasus adalah mereka memiliki kesalahan ketik pada perintah yang memungkinkan. Saya tahu ini bukan masalahnya karena saya telah menggunakan DBCC TRACESTATUS untuk mengkonfirmasinya.

Jadi wawasan apa pun yang mungkin menyebabkan hanya jejak bendera 1222 untuk tidak berfungsi dan / atau cara memperbaikinya akan sangat dihargai.


Nah, ini perkembangan yang menarik. Setiap kali saya menghasilkan kebuntuan sendiri (menggunakan kode ini: /programming/7813321/how-to-deliberately-cause-a-deadlock ), maka saya mendapatkan kedua laporan penelusuran di log kesalahan. Hanya kebuntuan "alami" yang terjadi setiap beberapa hari dari aplikasi yang tampaknya hanya memicu salah satu laporan kebuntuan. Tidak yakin jika ini membantu, apakah ada alasan untuk percaya bahwa jejak 1222 tidak akan melaporkan semua kondisi jalan buntu yang sama dengan 1204?

RBarryYoung
sumber
1
Tentu, mungkin, tetapi semua server mereka sudah diatur dengan cara ini, saya tidak ingin harus mengubah semuanya, jika saya bisa membuat yang ini berfungsi dengan benar. Adapun tidak menggunakan keduanya, juga mungkin, tetapi saat ini, 1204 adalah satu-satunya cara saya tahu bahwa kebuntuan terjadi pada C dan 1222 tidak melaporkannya.
RBarryYoung
2
Saya tidak melihat alasan untuk mengaktifkan tanda jejak untuk kebuntuan pada sql 2008 hingga seperti xml_deadlock_report yang sudah menjadi bagian dari system_health session. Lihat posting ini untuk lebih jelasnya. Periksa itu untuk melihat apakah Anda dapat melihat kebuntuan.
Kin Shah
4
@ Kin Salah satu kejatuhan besar dari kebuntuan laporan bawaan di system_health adalah bahwa sql_text tidak termasuk, sehingga bisa sulit untuk memecahkan masalah kueri / objek yang terlibat.
Aaron Bertrand
4
@ AaronBertrand Saya mencoba RTM 2008R2 dan tidak memberikan teks sql serta nama objek <inputbuf> BEGIN TRAN UPDATE dbo.DeadLockTest2 SET col1 = 1 UPDATE dbo.DeadLockTest SET col1 = 1 </inputbuf>; mode="X" associatedObjectId="72057594039107584". Apakah saya melewatkan sesuatu? Saya menggunakanSELECT CAST(xet.target_data AS XML) AS XMLDATA FROM sys.dm_xe_session_targets xet JOIN sys.dm_xe_sessions xe ON (xe.address = xet.event_session_address) WHERE xe.name = 'system_health'
Kin Shah
1
@kin Saya telah melihat cutoff permintaan menggunakan system_health. Itu menyakitkan.

Jawaban:

1

Saya memiliki masalah serupa, tidak yakin itu akan mengurutkan masalah Anda.

Coba ini:

EXEC master..sp_altermessage 1205, 'WITH_LOG', TRUE;
GO

Meskipun masuk log peristiwa melalui bendera jejak, ini juga perlu diatur untuk memicu email. Anda dapat melihat tabelnya di sini:

select * from master.sys.messages
where text like '%deadlock%'

Anda dapat memiliki detail lebih lanjut di sini

Marcello Miorelli
sumber