web-dev-qa-db-ja.com

列フィルターのSQLプロファイラーでORを使用する方法

SQLプロファイラーを設定していますが、期間が30000を超えるすべてのアイテムをフィルター処理したいと考えていましたOR CPU> 10000 OR Writes> 1000

それらを「列フィルター」領域にANDで入力した場合と同様です(つまり、期間、CPU、書き込みがこれらの制限を超えている場合にのみアイテムを取得します)。

それらをORにして、これらの基準のいずれかに一致するアイテムを取得できるようにする方法はありますか?それぞれ特定の基準を持つ3つの異なるプロファイラーを起動できますが、これらすべてを1つのウィンドウ/出力に含めると便利です。

私は現在SQL 2008 R2を使用していますが、この項目に対する一般的な回答があることを期待しています。

5
ChrisHDog

できません。SQL Server Profilerは、データの表示とフィルタリングの方法が少し制限されています。

解決

トレースされたデータを同じサーバー上の別のテーブルに保存し、一定の間隔でデータをクエリする方がよいでしょう。テーブルにデータがあり、複雑なSELECTステートメントを実行できるという大きなメリットがあります。 1つまたは2つのフィルター基準を指定して、データを取りすぎないようにしてください。

コマンドプロンプトからSQL Serverプロファイラーを実行することも検討できます。これにより、インターフェイスにデータを常に表示するオーバーヘッドが削減されます。

パラメータは次のとおりです。

---------------------------
SQL Server Profiler
---------------------------
Usage: PROFILER.EXE
    [/S<SQL Server instance name>]
    [/A]<Analysis Services instance name>
    [/D<database>]
    [/B<trace table to load>]
    [/E] trusted connection
    [/U<login id>]
    [/P<password>]
    [/F<trace file to load>]
    [/T<template file to load or use when starting a new trace>]
    [/L<locale id>]
    [/M<trace stop time>]
    [/O<trace output file name>]
    [/Z<maximum output file size (MB)>]
    [/R<use rollover files>]

参照: Profiler(Microsoft Docs)

手順

  1. 標準のプロファイリング用のテンプレートを作成し、これをコマンドラインのスタートアップで使用します
  2. テンプレートを参照するコマンドラインからSQLプロファイラーを起動します
  3. テーブルに保存されているデータのクエリ

代替案

近い将来の移行を検討しているようであり、SQL Server ProfilerはMicrosoftによって言及されているように時代遅れであるため、拡張イベントを確認することでスキルを最新のものにすることを検討できます。

重要!!
データベースエンジンのトレースキャプチャとトレースリプレイ用のSQL Serverプロファイラの非推奨を発表しました。これらの機能はSQL Server 2016で使用できますが、今後のバージョンでは削除されます。+ Microsoft SQL ServerのTraceおよびReplayオブジェクトを含むMicrosoft.SqlServer.Management.Trace名前空間も非推奨になります。

参照: SQL Server Profiler(Microsoft Docs)

拡張イベント

拡張イベントは、パフォーマンスリソースをほとんど使用しない軽量のパフォーマンス監視システムです。 SQL Server 2008にはGUIがなかったというわずかな欠点はありますが(SSMS用のアドオンがあり、これは codeplex にあります)。

拡張イベントの概要は Microsoftのサイト にあります。

5