基本的にピボット テーブルを再構築するストアド プロシージャがあります。一時テーブルに新しいデータを構築し、永続テーブルを切り捨てて新しいデータを挿入し、最後に一時テーブルを削除します。
Management Studio でストアド プロシージャ (または T-SQL コードを直接実行) を実行すると、約 1 分かかります。これが最も効率的なプロセスではないことはわかっていますが、問題ありません。
このタスクを 20 分ごとに実行するようにスケジュールしようとすると、問題が発生します。ストアド プロシージャを実行するために SQL Server エージェント ジョブをセットアップすると、今ではほぼ 1 時間半かかります...そうです、90 倍遅いのです!
この投稿を見つけました:SQL Server Agent Job Running Slow、これは同様の問題のようですが、ストアド プロシージャの開始時またはSQL エージェント ジョブのコマンドのset nocount on
前に呼び出しても効果がないようです。テーブル値関数 (これもカーソルを使用しません) でexec
実行していますが、クエリはカーソルを使用しません。cross apply
明らかに何かが欠けていますが、どこから始めればよいかさえわかりません。ストアド プロシージャを作成することで、この種の問題を回避できると考えました。
参考までに、ストアド プロシージャは次のようになります。
create table #temp
(
ID int,
data1 float,
data2 float
)
insert into #temp(ID, data1, data2)
select t.ID, d.data1, d.data2
from tbl1 t
cross apply dbo.getInterestingData(t.ID, t.param1) d
where d.useMe = 1
truncate table dataPivot
insert into dataPivot(ID, data1, data2)
select ID, data1, data2
from #temp
drop table #temp