これは私を夢中にさせています。リンクサーバーから1行を取得してローカルテーブルにドロップするWHILEループがあります。ロジックは正常に機能しますが、処理される行が増えるとループが遅くなります。
SELECT @max_id = MAX(id), @min_id = MIN(id)
FROM #ids
WHILE @min_id <= @max_id
BEGIN
SET @sql = 'SELECT row1, row2, row3 FROM [Linked Server Table]'
INSERT INTO [Local Table]
(row1 ,row2, row3)
EXEC(@sql)
SELECT @min_id = MIN(id)
FROM #id
WHERE id > @min_id
END
何かがメモリに蓄積されて速度が低下しているように感じますが、何が原因かわかりません。
これまでのところ、私は試しました:-
INSERT を SP に変換する
100 行ごとに CHECKPOINT を追加する
復旧モデルをシンプルに変更する
リンク サーバーの行を一時テーブルまたはテーブル変数に挿入する
ローカル テーブルには、PK 以外のインデックスはありません。リンク サーバーは Atomix データベースです。
これがますます遅くなる理由を誰かが提案できますか?
S