アプリケーションを SQL Server 2000 から SQL Server 2008 R2 にアップグレードしていますが、カーソルを使用するストアド プロシージャでタイムアウトの問題が発生しています。たとえば、SQL Server 2000 で 1 秒あたり 500 行を処理した 1 つの SP は、SQL Server 2008 では 1 秒あたり約 5 行 (および 100% の CPU) でクロールしています。これは VM にありますが、メモリは問題ではないようです。 .
統計のリセットとインデックスの再構築を試みましたが、効果はありませんでした。カーソルを使用しないように SP を書き換えることはできますが、これらの書き換えを含めるためにスコープを拡大したくはありません。
以前にこの問題に遭遇した人はいますか?
これは、アップグレード後に約 100 倍の時間がかかる SP の簡単な例です。SQL Server 2008 R2 での私のテストでは、4000 行を処理するのに 12 秒かかりました。
--set ids by alphabetical order
declare cursor1 CURSOR
FOR
select id from form_import_current_data
where master_formulary_id = @Master_Formulary_ID
order by description, description2
open cursor1
declare @id int
declare @id_counter int
set @id_counter = 1
FETCH NEXT FROM cursor1 INTO @id
while (@@FETCH_STATUS <> -1)
BEGIN
IF(@@FETCH_STATUS <> -2)
BEGIN
update form_import_current_data
set id = @id_counter
where master_formulary_id = @Master_Formulary_ID
and id = @id
set @id_counter = @id_counter + 1
END
FETCH NEXT FROM cursor1 INTO @id
END
CLOSE cursor1
DEALLOCATE cursor1