0

アプリケーションを 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
4

1 に答える 1