パフォーマンスチューニングのアプローチ

とりあえず

  • INDEXを張る
    • 適切に貼る。カーディナリやトランザクションを考慮して適切になる
    • 統計情報を更新する
    • INDEXが断片化していれば 再構築 or 再編成を行う
    • 詳細
  • SQLチューニング
    • 作成したINDEXを適切に利用する様にQueryのチューニングを行う
    • 実行プランの再利用性するためにも、テーブル名などの大文字小文字を統一する
  • テーブルサイズが大きい場合、テーブル/INDEXのパーティション分割を行う 公式サイト
    • ただし、テーブルのパーティション分割は、ライセンスによって使えないケースが多いことに注意が必要

設定周り

主要な設定3つ

  • tempDBの数を適切に設定する。
    • 並列処理による論理競合を回避するため、同じファイルサイズでプロセッサと同じ数にする。
  • 64bit 環境の場合、「メモリ内のページロック指定」を変える
  • OLTP環境では、並列処理の最大限度(Max DOP)はCPUコア数の「4分の1」にする

その他

  • tempDBやトランザクションログを高速なI/OのDiskに変更する
  • 32bit 環境の場合、AWEオプションを有効にする
  • 自動拡張はアクセスが多い時間帯に実行されない様に考慮する。or そもそも無効にする。
    • 一般的にファイル拡張時は処理が中断される。データファイルについては、SQL Serverの起動アカウントが、ローカルセキュリティーポリシーの「ボリュームの保守タスクを実行」権限を持っている場合、拡張処理の影響を受けることがない。ログファイルについては、回避不可能。

ハードウェア周り

  • Disk I/Oを改善する
    • Disk構成をRAID:10にする
    • HDをSSDに切り替える
  • メモリ/CPUをアップグレードする

参考

運用関連 ベストプラクティス

http://www.unisys.co.jp/services/atlasbase/pdf/dbm_1009_sqlserver.pdf