4

便利な SQL トリックに関する投稿がありました。ここで、 SQL Server プロファイラーツールについて言及するつもりでした。これは、SQL の記述を減らすのに役立ったからです。データベースのビジネス ロジックを調べたり、理解したり、推測したりする SQL を書きます。

プロファイラーは、特にアプリケーション コードに SQL が埋め込まれていて、その動作をできるだけ短時間で調べたい場合に非常に便利です。(また、アプリケーションの環境で使用されているソース コードのバージョンがわからない場合や、さらに悪いことに、利用可能なソース コードがない場合もあります!)。

プロファイラーにフックできる API があるかどうか疑問に思っていましたか?

これは、環境変数/フラグ (PROFILER_ON=TRUE など) を設定することにより、システム内で呼び出されている SQL をすばやく確認したい場合に非常に便利です。その後、システムは SQL プロファイラーを開始し、さまざまなトレース プロパティを設定してから、ログまたはテーブルに書き出すことができます。これはサポート チームによって表示される可能性があります。

プロファイラーをオンにして本番環境を (静かな時間に) 監視するためのコンポーネントを作成したいので、コードベース (アプリ コードと SQL ストアド プロシージャの両方) を実際に変更することはできません。

4

4 に答える 4

5

Microsoft.SqlServer.Management.Trace名前空間オブジェクトを利用できます。これらは、SQLプロファイラーが提供するのと同じ機能に対するAPIを提供します。これは、データベースに対して独自のSQLをスクリプト化することに対する代替手段です。ただし、SQLプロファイラーと同様に、これらのオブジェクトが内部で行うことは、SQLトレースのストアドプロシージャ(またはそのバリエーション)を実行して、トレースを作成、実行、および管理することです。

1つのプロファイラーインスタンスを使用して別のプロファイラーをプロファイリングする場合(またはプロファイラーを使用して、トレースから「NOT LIKE'SQL Profiler ...'」フィルター基準を削除して自身をプロファイリングする場合(アプリケーション名フィルターだと思います)、次のように表示されます。プロファイラーが実行していることは、SQLで実行すること、またはSMOオブジェクトがAPIから実行することとまったく同じです。

于 2009-06-06T18:02:02.603 に答える
3

できることは、「完璧な」トレースをセットアップし、それを SQL としてスクリプト化することです。次に、それを実行してトレースを実行し、出力をファイルまたはテーブルに保存します。

ここで、SQL をラップして、SQL エージェント/アイドルしきい値を介して実行できる別のストアド プロシージャでトレースを作成できますが、fn_trace_getinfo を使用して、既に実行されているかどうかを確認します。

SSMS で自動化したり、環境変数を使用したりすることはできません。コード、ジョブ、アラートなどはすべてサーバー上に存在する必要があります。

スクリプト化されたトレースをバッチ ファイルに入れ、osql/sqlcmd 経由で実行できますが、手動で呼び出す必要があります。

プロファイラー API はありません。他のソリューションと同様に、ストアド プロシージャを実行するだけです。

アプリ コードから独立している監視 SQL コードを追加できないのはなぜですか?

SMOも使用できません...トレースを読み取るためだけに

編集: トレースでは常にサーバーに対して SQL を実行する必要があります

于 2009-02-21T10:24:11.203 に答える
1

システム ストアド プロシージャを使用して、プロファイラーを自動化できます。http://vyaskn.tripod.com/server_side_tracing_in_sql_server.htmで同じことを行う詳細を確認してください。

于 2009-02-19T10:07:58.633 に答える
0

GBN はここでそれを手に入れました。SQL プロファイラーが行うのは、SQL Server でストアド プロシージャを実行することだけです。これらのプロシージャは、トレースを開始、構成、および停止します。つまり、プロファイラーを自動化しようとする代わりに、同じトレース手順を実行するだけで、同じ動作が得られるということです。

トレースを自動的に開始および停止するには、SQL プロファイラーを使用してスクリプトを作成します。そのスクリプトは、バッチ ファイルから実行できます。したがって、次のようにします。

  • SQL プロファイラーを開く
  • トレース プロファイルで目的のトレースを設定します。関心のあるイベントとトレース先のファイルを選択します。
  • トレースを開始してから停止します。
  • ファイルに移動 | エクスポート | スクリプト トレース定義...そしてファイルを保存し.sqlます

この.sqlファイルには、実行できるコードが含まれています。開くと、この種のコードが上部に表示されます。

exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL 
if (@rc != 0) goto error

-- Client side File and Table cannot be scripted

-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 14, 1, @on
exec sp_trace_setevent @TraceID, 14, 9, @on
exec sp_trace_setevent @TraceID, 14, 6, @on
exec sp_trace_setevent @TraceID, 14, 10, @on
exec sp_trace_setevent @TraceID, 14, 14, @on
exec sp_trace_setevent @TraceID, 14, 11, @on
This creates a trace that writes to a file. 

これは、トレースを作成し、イベントをトレースに添付しています。

ここで、トレースを開始するために、このファイルの実行をスケジュールできます。バッチ ファイルは次のようになります。

osql -E -S MACHINE\INSTANCE -i "c:\my-trace-definition.sql"
于 2009-12-08T12:05:36.063 に答える