none
SQL Server 2012と2005での処理速度の差に関して RRS feed

  • 質問

  • いつもフォーラムにお世話になっております。

    SQL Server 2005 StdからSQL Server 2012 Stdに移行したシステムがあり
    2012移行後に非常に遅くなった処理がありましたので検証をしてみました。
    突き詰めていくと非常に単純なクエリーを直でmanagement studioから
    流した場合でも2005では10秒で終わる処理が2012では3分近くかかっている状態です。

    検証内容は以下の通り

    1.DBを新規作成

    2. DBに以下のクエリーでテーブルを作成
    ++
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    CREATE TABLE [dbo].[T_検証](
    [番号] [int] NULL
    ) ON [PRIMARY]

    GO
    ++

    3. 以下のクエリーで番号をinsert
    ++
    declare @wintcnt int
    delete from T_検証 
    set @wintcnt = 0

    while @wintcnt <= 19000
    begin
    insert into T_検証 values(@wintcnt)
    set @wintcnt = @wintcnt + 1
    end
    ++

    サーバのスペックは
    Windows Server 2012 64bit
    CPU:E3-1240 v2 
    メモリ:8G

    Windows Server 2003 R2 32bit
    CPU:core i3-550
    メモリ:4G

    特に大きな違いはありません。

    何が推測できる原因はありませんでしょうか?

    2015年1月10日 4:16

回答

  • 原因としてはここに記載無い様々な事項が考えられるので、ある程度絞り込みがされていない状態では何とも言えないかと思います。
    パフォーマンスはハードウェアやドライバ、OS などの様々な要因に影響を受けますので、可能性という話ではあらゆるものが該当してしまいます。
    また、バージョンが上がるにつれて内部実装はその時のニーズに応じて変更されているため、以前に比べて全ての処理がパフォーマンスアップしているという保証はありませんので、特定の事象で特定のパフォーマンス問題が起きるケースはあり得ます。

    先ずは絞り込みなりアタリをつけるなりが必要ですが、手法も様々で何とも言いにくいところがあります。
    technet でもちょっと探した限りではぼんやりとしたドキュメントしか見つかりませんでした。
    http://technet.microsoft.com/ja-jp/library/ms178100(v=sql.110).aspx
    http://technet.microsoft.com/ja-jp/library/ms190994(v=sql.110).aspx
    このあたりは調べながら臨機応変な対応が必要なものですので、フォーラムよりは詳しい方にご相談いただくか、サポートを受けられた方が良いかと思います。

    ちなみに、手元の NotePC でご呈示のクエリを実行すると 3 秒ほどでしたが、以下のようなクエリですと 1 秒未満でした。
    メモリを使用する代わりに Commit 回数を減らすという意図のクエリになります。
    製品がより大規模をターゲットに移ってきていることや、メモリが潤沢な環境が一般になったので、無理に細かい単位で Commit しない方が早いケースも出てきているのかと思います。

    DELETE FROM [T_検証];
    WITH DATA (num) AS (
    SELECT 0
    UNION ALL
    SELECT num + 1 FROM DATA WHERE num < 19000
    )
    INSERT INTO [T_検証]
    SELECT * FROM DATA
    OPTION (MAXRECURSION 0)


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク 星 睦美 2015年1月28日 7:33
    2015年1月14日 1:22