13. 負荷を正しく把握する
db tech showcase 201413
Application
Server
Storage
CPU
Memory
Storage HBA
Network Card
ディスクの負荷が高いので
今回はここが原因??
14. Resource Balanced Approach
(Balanced System Architecture)
db tech showcase 201414
Application
Server
Storage
CPU
Memory
Storage HBA
Network Card
CPU の処理できる I/O を基準に
他のリソースのバランスをとる
15. 情報を組み合わせてみる
db tech showcase 201415
ディスクの負荷が高い = ディスクがボトルネックとは限らない
ディスク
書き込み / 読み込みのどちらの頻度が多いか
→ ディスク or メモリがボトルネックの可能性
CPU
ユーザー増加によるクエリ実行回数の増加
頻繁なクエリコンパイルの発生
→ CPU or メモリがボトルネックの可能性
メモリ
どの領域のメモリが多いのか
キャッシュのヒット状況
→ メモリ or ディスクがボトルネックの可能性
本セッションでは上記 3 つのリソースについての情報を取得してみます。
18. OS の情報 (パフォーマンスモニター)
db tech showcase 201418
リソース カウンター
CPU Processor : % Processor Time
System : Processor Queue Length
Process : % Processor Time (sqlservr)
メモリ Memory : Available Mbytes
ディスク Physical Disk : Current Disk Queue Length
Physical Disk : Disk Bytes/sec
Physical Disk : Disk Read Bytes/sec
Physical Disk : Disk Write Bytes/sec
63. 実行プランの確認
db tech showcase 201463
実行プランから以下の情報を確認
インデックスが使用されているか
クエリによりどの程度のデータが取得されているか
実行プランの確認方法の例
SSMS からグラフィカルな実行プランを取得する設定しクエリを実行
SET STATISTICS PROFILE ON を実行してからクエリを実行
コストの高い操作を把握
64. インデックスの使用状況
db tech showcase 201464
アクセスコストは一般的には Index Scan > Index Seek
Table Scan / Clustered Index Scan はテーブルのデータを全件取得
Clustered Index Scan > Index Scan > Clustered Index Seek > Index Seek
アクセスコストの高い操作は CPU への負荷も高くなる
キャッシュされているデータの取得にも CPU コストはかかる
sys.dm_db_index_usage_stats からインデックスの使用状況を取得できる
65. ディスクネックから CPU ネックへ
db tech showcase 201465
ディスクの高速化により、CPU ネックになる傾向が出てくる
処理内容の大小にかかわらず、処理をするには CPU を使用
SET NOCOUNT ON
GO
DECLARE @i bigint
WHILE(0=0)
BEGIN
SET @i += 1
END
コンパイル済みクエリでも実行されれば CPU は使用される
キャッシュされているクエリの再実行でも CPU は使用される
取得データが多ければキャッシュされていても CPU 負荷は上昇する
66. Clone DB の作成
db tech showcase 201466
データベースのバックアップ / リストアによりデータベースのコピー
ができればベスト
本番環境のデータベースを開発環境にリストア
データベースのバックアップを使用すると以下の状態が再現可能
断片化の発生状況
統計情報
データベースのコピーができない場合は、Clone DB を作成することで、
再現環境を作成する
Clone DB を作成することで、テーブルのスキーマと統計情報をコピーできる
推定実行プランを使用した実行プランの確認
How to generate a script of the necessary database metadata to create a statistics-
only database in SQL Server 2005 and in SQL Server 2008
http://support.microsoft.com/kb/914288