最適化されていない手順がいくつかあります。チェックするバルクデータがないため、これらの手順が最適化されているかどうかを分析したいと思います。
上記のクエリの実行にかかった正確な時間を1つのテーブルに挿入するすべてのプロシージャにSQLクエリを入れたいと思います。プロシージャがクエリの実行時間を挿入するテーブルを作成します。
私がこれを行うことができる方法はありますか?
最適化されていない手順がいくつかあります。チェックするバルクデータがないため、これらの手順が最適化されているかどうかを分析したいと思います。
上記のクエリの実行にかかった正確な時間を1つのテーブルに挿入するすべてのプロシージャにSQLクエリを入れたいと思います。プロシージャがクエリの実行時間を挿入するテーブルを作成します。
私がこれを行うことができる方法はありますか?
プロシージャに統合する場合は、実行開始時刻を最初に格納する変数を設定し、プロシージャの終了時に現在の時刻で減算します。
/* Start of your procedure */
Declare @startTime datetime = GETDATE()
Declare @duration varchar
/* Your procedure */
...
/* End of your procedure */
Set @duration = CONVERT(VARCHAR(8),GETDATE() - @startTime,108)
Insert into statisticTable
Values ('procedureName', @duration)
SQLプロファイラーを使用しようとしましたか?
Start Time
トレースプロパティでは、End time
ストアドプロシージャを定義できます。これは非常に強力なツールです。
動的管理ビューを使用して、上記のものを確認できます...。
古いバージョンのSQLSERVERを使用している場合は、SQLServerプロファイラーを使用してください。
DMV、trace、exeventsなどのツールがたくさんあります。そのようなコードを配置すると、procのオーバーヘッドが増加します。最適な手順はdm_procedure_statsDMVですが、2008R2以降でのみ使用できます。古いバージョンの場合はdm_exec_query_statsを使用してください。これらは、時間、論理io、cputime、物理IOなどに関するより良い統計を提供します。