SQL Serverで新しいトレースフラグを見つける方法


38

そこには多くのトレースフラグがあります。十分に文書化されたものもあれば、そうでないものもあります。また、2016年のリリースでは、デフォルトの動作ステータスへの道を見つけたものもあります。公式のサポートチャネル、マイクロソフトの従業員などは別として、新しいトレースフラグを見つける方法は何ですか?

Aaron Bertrandによる最近のいくつかの投稿をここここで読みましたが、新しいTrace Flagsについては何も見当たりませんでした。

mssqlsystemresourceのデータとログファイルを新しい場所にコピーし、通常のデータベースのように添付してシステムテーブルとビューを調べましたが、すぐには何も見つかりませんでした。既知のトレースフラグのリストを取得し、そのリストにない番号をループして、DBCC TRACEONが許可するものを確認することを検討しましたが、最初にここで質問をしたいと思いました。

それらを有効にするDBCCコマンドは、トレースフラグが有効であることを確認するために何らかのリソースでチェックインする必要があると仮定すると、どこに到達しますか?リストを保持する.dllまたは他のシステムファイルはありますか?

私はこの質問が広範に及ぶことを知っていますが、これに拍車をかけたのは、説明された効果を持たない2016年の新機能とともに特定の意図された動作を備えたトレースフラグについて読んでいたことです。私の最初の考えは、おそらく7129が7219になるように、数が何らかの形で転置されたと考えていました。たとえば、7000-7999の範囲内で有効なトレースフラグのリストを取得して、順列を探すことでした。DBCC TRACEONフラグと起動パラメータの両方としてそれらすべてをテストすることは、機能の動作に対する結果のテストと組み合わせると非常に面倒です。

回答:


42

リストを見つけるためにできることは、投稿/スライドデッキ/などから質問またはピックアップする以外にありません。このリストは、有効なトレースフラグ番号がC ++コードの大きな列挙型の名前にマップされるヘッダーファイルにのみ存在し、その後、コードの残りの部分で名前が使用されます。

アーロンが言ったように、任意のトレースフラグ番号を有効にできます。それが何もしない場合、またはトレースフラグが関連する機能を実行しない場合、動作の違いに気付かないでしょう。

DBCC TRACEON 有効な番号の実行時リストがないので、何もチェックしません-その接続にグローバルに設定されているフラグのビットマップでそのトレースフラグ番号を有効にします。

有効性チェックの問題は、どのトレースフラグが有効であるかを明らかにし、それらを検出できるようにすることです。このようにして、「有効なリスト」は事実上難読化されます。これはSQLチームが望んでいることです。

SQL Serverが持つべきコメントでのKinの提案についてselect * from sys.available_trace_flags-はい、いいえ。パフォーマンスに非常に悪影響を及ぼし、製品サポートからの指導の下で問題をデバッグするためにのみ必要なトレースフラグが多数ありますが、SQL Serverは「安全な」フラグをリストできます。


2
ちょっとした微調整-DBCC TRACEONは確かに何かをチェックします。1.でSQL Serverのすべての現在のバージョンを開始するトレースフラグをループが抜け出すとmax現在のトレースフラグの番号でエラーがスローされますことを、この要旨ショーコード:gist.github.com/BrentOzar/0e9692da8ceffeb2b4bdd064e36d3174
ブレントOzar

41

新しいトレースフラグを見つける方法は何ですか?

ほとんどの場合、それらを探すために費やす時間と感情的なリソースを持つことになります。

確かに、可能性のあるトレースフラグ番号をループして効果を分析するスクリプトを作成することは可能ですが、これは必ずしも有益ではありません。それには多くの理由がありますが、一般的なフラストレーションには、一部のトレースフラグが他のトレースフラグとの組み合わせでのみ有効である、-T起動時にのみ動作する、またはでDBCC TRACEONのみ使用される、一部でのみ有効であるという事実が含まれOPTION (QUERYTRACEON)ます。文書化されていないコマンド、コマンド拡張機能、または特定の機能を有効にするために必要なものもあります。エフェクトを探す場所がわかっている場合にのみエフェクトを生成するものもあります。などなど... 非常に ...など。

とはいえ、おそらく最も効果的な手法は、デバッガーまたはその他のプロファイリングツールを接続した状態で、特定のクエリまたはコマンドの実行を段階的に実行し、トレースフラグのオンとオフで取得したパスを比較することです。これが時間がかかるように思えるのは、それが理由です。

私にとっては、何かが潜在的に非常に興味深いものであるか、実際の問題に関連している必要があります。また、このプロセスを数百回または数千回行ったことがある場合にも、探しているものの種類、どのトレースフラグの範囲が最も効果的であるか、そしてどの部分を広く感じられるかを知るのに役立ちます。コードベースの興味深いものになるでしょう。

ブレークポイントをオンCSessionTraceFlags::CheckSessionTraceInternalにしてedxレジスタの値をチェックする(どのトレースフラグがチェックされているかを確認する)のは簡単な場合に便利ですが、興味深いケースは単純ではないことが多く、すべてのトレースフラグがチェックされるわけではありません実行されるコードパスに影響します。

公式のトレースフラグのかなり小さなリストがあります。これらは完全にテストされたフラグであり、CSS、そして最終的には製品開発者によってサポートされています(そしてサポートされます)。また、文書化する価値があるほど一般的な使用事例を備えたフラグです。

他のトレースフラグは、さまざまな状況(異なるビルド、SKU、セキュリティ設定、異なる機能など、考えられることも考えられないこともある)で予期しない影響を与える可能性のある好奇心です。これらは、それについて書いた人によってのみ「サポート」されます。

非公式のリストがいくつかありますが、私が知っている最高のリストは、Aaron MorelliによるSQL Server Flagsのトピックコレクションです(現在は2016年4月v6)。

とはいえ、Microsoft CSSは(最終的に)すべてのトレースフラグにアクセスできるため、公式リストに載っていなくても、遭遇したものについてアドバイスすることができます。もちろん、彼らは何も言わないことを選択するかもしれません、そして、関与する料金があるかもしれません。私は本当に知らない、自分でそのルートを行ったことがない。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.