1

基本的にピボット テーブルを再構築するストアド プロシージャがあります。一時テーブルに新しいデータを構築し、永続テーブルを切り捨てて新しいデータを挿入し、最後に一時テーブルを削除します。

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
4

0 に答える 0