Metode untuk menemukan Bendera Jejak baru di SQL Server


38

Ada banyak Bendera Jejak di luar sana. Beberapa didokumentasikan dengan baik, beberapa tidak, dan yang lain menemukan jalannya ke status perilaku default dalam rilis 2016. Selain saluran dukungan resmi, karyawan Microsoft, dll., Apa saja cara untuk menemukan tanda jejak baru?

Saya telah membaca beberapa posting terbaru oleh Aaron Bertrand di sini dan di sini , tetapi tidak menemukan apa pun tentang Trace Flags baru.

Saya menyalin data dan mencatat file mssqlsystemresource ke lokasi baru, dan melampirkannya seperti database biasa untuk melihat-lihat tabel dan tampilan sistem, tetapi tidak segera menemukan apa pun. Saya mempertimbangkan untuk mengambil daftar Bendera Jejak yang dikenal, dan memeriksa angka-angka yang tidak ada dalam daftar itu, untuk melihat mana yang diizinkan oleh DBCC TRACEON, tetapi ingin mengajukan pertanyaan di sini terlebih dahulu.

Dengan asumsi bahwa perintah DBCC untuk memungkinkan mereka harus memeriksa dengan beberapa sumber daya untuk memastikan Bendera Jejak valid, di mana ia menjangkau? Apakah ada .dll atau file sistem lain yang menyimpan daftar?

Saya tahu pertanyaannya memberikan jaring yang luas, tetapi apa yang memacu hal ini adalah membaca tentang Bendera Jejak dengan perilaku khusus yang dimaksudkan bersama fitur baru pada tahun 2016 yang tidak memiliki efek yang dijelaskan. Pikiran awal saya adalah bahwa mungkin angka-angka diubah entah bagaimana, seperti 7129 menjadi 7219. Saya berharap untuk mendapatkan daftar bendera jejak yang valid dalam rentang, katakanlah 7000-7999, untuk mencari permutasi. Menguji semuanya, baik sebagai flag DBCC TRACEON dan parameter startup akan cukup merepotkan, dikombinasikan dengan menguji hasilnya terhadap perilaku fitur.

Jawaban:


42

Tidak ada yang dapat Anda lakukan untuk menemukan daftar kecuali meminta atau mengambilnya dari posting / slide deck / dll. Daftar hanya ada dalam kode, dalam file header di mana nomor bendera jejak yang valid dipetakan ke nama dalam enum besar dalam kode C ++, dan kemudian nama-nama tersebut digunakan dalam sisa kode.

Seperti kata Aaron, Anda dapat mengaktifkan nomor bendera jejak apa pun, dan jika itu tidak melakukan apa-apa, atau Anda tidak menggunakan fungsionalitas yang relevan dengan bendera jejak tersebut, Anda tidak akan melihat ada perbedaan dalam perilaku.

DBCC TRACEON tidak memeriksa apa pun - karena tidak ada daftar run-time yang nomornya valid atau tidak - itu hanya memungkinkan nomor jejak jejak dalam bitmap dari flag apa yang ditetapkan untuk koneksi itu / secara global.

Masalah dengan memiliki pemeriksaan validitas adalah bahwa akan mengekspos flag jejak mana yang valid, yang memungkinkan mereka ditemukan. Dengan cara ini 'daftar yang valid' secara efektif dikaburkan, yang merupakan apa yang diinginkan oleh tim SQL.

Mengenai saran Kin dalam komentar yang seharusnya dimiliki SQL Server select * from sys.available_trace_flags- Ya dan tidak. Ada banyak jejak jejak yang sangat merusak kinerja dan hanya diperlukan untuk debugging masalah di bawah bimbingan dari Dukungan Produk, tetapi SQL Server bisa mendaftar bendera 'aman'.


2
Satu perubahan kecil - DBCC TRACEON memang memeriksa sesuatu. Intisari ini menunjukkan kode yang loop melalui jejak bendera mulai dari 1. Semua versi saat ini dari SQL Server akan keluar dan melemparkan kesalahan di max jumlah bendera jejak saat ini: gist.github.com/BrentOzar/0e9692da8ceffeb2b4bdd064e36d3174
Brent Ozar

41

Apa cara menemukan bendera jejak baru?

Sebagian besar, hal itu terjadi karena memiliki waktu dan sumber daya emosional untuk dihabiskan untuk mencari mereka.

Tentu saja, adalah mungkin untuk menulis skrip untuk mengulang-ulang nomor bendera jejak yang mungkin dan menganalisis efeknya, tetapi ini tidak selalu berhasil. Ada banyak alasan untuk itu, tetapi frustrasi umum termasuk fakta bahwa beberapa tanda jejak hanya efektif dalam kombinasi dengan yang lain, beberapa hanya bekerja dengan -Tsaat startup, atau ketika digunakan dengan DBCC TRACEON, beberapa hanya dengan OPTION (QUERYTRACEON). Beberapa memerlukan perintah tanpa dokumen, atau ekstensi perintah, atau untuk fitur tertentu untuk diaktifkan juga. Beberapa hanya menghasilkan efek jika Anda tahu di mana harus mencari efek tersebut. Dan seterusnya dan ... sangat ... seterusnya.

Yang mengatakan, mungkin teknik yang paling efektif adalah melangkah melalui pelaksanaan permintaan atau perintah tertentu langkah demi langkah dengan debugger atau alat profil lain yang terpasang, membandingkan jalur yang diambil dengan bendera jejak (s) hidup dan mati. Jika ini kedengarannya menyita waktu, itu karena itu.

Bagi saya, sesuatu harus berpotensi sangat menarik, atau berhubungan dengan masalah dunia nyata tanpa solusi yang lebih baik bagi saya untuk berpikir untuk masuk ke dalamnya. Ini juga berguna jika Anda telah melalui proses ini ratusan atau ribuan kali sebelumnya, untuk mendapatkan perasaan yang luas untuk hal-hal yang Anda cari, rentang bendera jejak mana yang paling mungkin efektif, dan bagian mana yang basis kode akan menarik.

Mengatur breakpoint CSessionTraceFlags::CheckSessionTraceInternaldan memeriksa nilai edxregister (untuk melihat bendera jejak mana yang sedang diperiksa) dapat berguna dalam kasus-kasus sederhana, tetapi kasus-kasus menarik tidak sering sederhana - dan tidak semua bendera jejak diperiksa pada titik di mana mereka memengaruhi jalur kode yang diambil.

Ada daftar bendera jejak resmi yang agak kecil . Ini adalah flag yang telah diuji sepenuhnya dan (dan akan) didukung oleh CSS dan, pada akhirnya, pengembang produk. Mereka juga ditandai dengan use case yang cukup umum sehingga layak untuk didokumentasikan.

Bendera jejak lainnya yang Anda temukan adalah keingintahuan yang mungkin memiliki efek tak terduga dalam berbagai situasi (build yang berbeda, SKU, pengaturan keamanan, fitur yang berbeda ... hal lain yang dapat atau tidak dapat Anda pikirkan). Ini hanya akan 'didukung' oleh orang yang menulis tentang mereka, jika sama sekali.

Ada beberapa daftar tidak resmi, yang terbaik yang saya tahu adalah Kumpulan Topikal Bendera SQL Server oleh Aaron Morelli (saat ini di v6, April 2016).

Semua yang dikatakan, Microsoft CSS (akhirnya) memiliki akses ke semua tanda jejak, sehingga mereka mungkin dapat memberi saran kepada Anda tentang apa pun yang Anda temui, bahkan jika mereka tidak ada dalam daftar resmi. Mereka mungkin memilih untuk tidak mengatakan apa-apa, tentu saja, dan mungkin ada biaya yang harus dikeluarkan; Saya benar-benar tidak tahu, tidak pernah menempuh rute itu sendiri.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.