none
SQL Server 2008 R2 のCPU使用率高騰について RRS feed

  • 質問

  • お世話になります。

    SQL Server 2000 にて何の問題もなく使用しておりましたが、この度SQL Server 2008 R2 への移行を計画するにあたり、パフォーマンスの評価を行いました。

    動作環境は以下の通りです。

    CPU Xeon E5540 2.53GHz (内1コアを割り当て)

    メモリ 4GB (内3GBを SQL Serverにて利用設定)

    OS Windows 2008 R2 Server Standerd SP1 (64bit)

    上記環境にて4千数百万行あるテーブルに対し、単純なクエリを実行しようとしたところ、CPU使用率が100%に吹っ切れてしまいます。

    元々使用してた SQL Server 2000 に比べ、2008の方がHWスペックは要求すると思うのですが、2000では高々20%程度で終わっているのに対し、極端なように思います。

    また、一括してデータをインポート・エクスポートしようとするとTempDbが肥大化(30GB超)し、ディスク容量を圧迫します。

    ちなみにDB全体のテーブルサイズは データ 31.52GB、インデックス 12.23GB 内、問題のテーブルが 6.44GB/11.3GB を使用しております。

    基本的に諸設定はインストール時規定値のままですが、上記状況を飛躍的に改善する方法はないものでしょうか?

    2014年7月14日 6:58

回答

すべての返信

  • 正直これだけの情報だと判断できませんが、
    クエリの処理時間はどちらのほうが早く終わるのでしょうか?
    また、SQL 2000 のサーバーと SQL 2008 R2 のサーバーは同じものですか?

    もしSQL2008 R2 のほうが圧倒的に早く処理が終わるのであれば、
    DiskのIOなどのボトルネックが解消された結果、CPUをフル活用するようになったのかもしれません。

    2000のほうが早かった、またはあまり変化が無い場合は
    統計情報やIndexの再構築などをした後で再度確認すると良いと思います。

    また、それぞれでクエリの実行プランを確認してみると何かわかる気がします。

    2014年7月14日 11:08
  • 一先ずメモリロック権限のSQL Server 実行ユーザー登録は試してみました。その時点でのパフォーマンス改善は、まだ評価中のため同時実行クエリ数が1のせいでしょうか体感できませんでした。

    おそらく複数のクエリが同時実行される場合に効果を発揮する様に思われます。

    2014年7月14日 15:23
  • サーバは別ですが、HWスペックは同じものです。

    但し、2000の方は Windows 2003 Server 上で動作しています。

    実行時間に関しては、同じテーブル状態で比較した時、2000の方がはるかに早く終わったのですが、2008上のテーブルをSQL Server Management Studio にて実行プラン作成後、推奨されたインデックスを構築したところ、CPU使用率、実行時間共、ほぼ 2000 と同等になりました。

    しかし、別のクエリを実行するとやはり高CPU使用率、TempDbの肥大化が確認され、その度にインデックスを追加するという作業が発生します。

    ある程度この作業を繰り返せば落ち着くのでしょうが、2000と比較すると少々手間 ( = 作業コスト ) がかかる様な印象を受けてしまいます。

    2008の方が PIVOT等機能的に充実しており、是非移行したいと考えているので、何とか抜本的な対策は無いものだろうかと思い悩んでおります。

    2014年7月14日 15:40
  • 原因は「(内1コアを割り当て)」じゃないですかね。

    NUMAの関連で、CPUコアをまたいだインターコネクト経由でのメモリアクセスが発生するために、メモリアクセスにペナルティが発生しているのでは無いでしょうか。全CPUコアを使って動作するように構成すればインターコネクト経由でのメモリアクセスが減ってパフォーマンスが向上するかもしれません。

    SQLServer 2000は32bit版ですか?だとしたら2GBを上限とするメモリしか使っていないので、たまたまCPUコアをまたいだインターコネクト経由でのメモリアクセスの頻度が少ないんじゃ無いかな。


    甕星

    • 回答の候補に設定 星 睦美 2014年7月23日 4:29
    • 回答としてマーク 星 睦美 2014年9月3日 8:21
    2014年7月15日 16:35
  • HW の構成が同じとのことですが、HDD の構成も同じでしょうか?

    古い方は1つしかない HDD をパーティションを切って 64KB のアロケーションユニットサイズにしてあるとか。

    そうなってるなら最大のパフォーマンスが出るようにチューニングされていた、とみるべきです。

    I/O アーキテクチャ

    Dr. K's SQL Serverチューニング研修(2):誰も知らないメモリ・チューニングの極意を教えよう (1/3) - @IT

    パフォーマンスの監視とチューニング

    SQL パフォーマンス チューニング : パフォーマンス改善 最初の一歩

    SQL Server 2008 R2 運用管理とパフォーマンス チューニング

    4 GB を超える物理メモリに対するメモリ サポートの有効化

    • 編集済み 藤森幸治 2014年7月16日 6:44
    • 回答の候補に設定 星 睦美 2014年7月23日 4:29
    • 回答としてマーク 星 睦美 2014年9月3日 8:21
    2014年7月16日 2:42
  • ご回答ありがとうございます。

    コア越しのメモリアクセスについては完璧に盲点でした。

    諸般の事情でコア数を増やすことができないため、メモリ管理についてもう少し調査してみたいと思います。

    2014年7月20日 1:50
  • ご回答ありがとうございます。

    お教えいただいたリンク先の情報を元に、I/Oチューニングについてもう少し追い込んでみます。

    2014年7月20日 1:52