発行ポイント(配信ポイント)発行ポイント(配信ポイント ... · 2005. 12. 9. · この画面のソースファイル mp_test.htm と ロケータ mp_test1.asx
待ち事象から考える、Sql server の改善ポイント
-
Upload
masayuki-ozawa -
Category
Documents
-
view
521 -
download
3
Transcript of 待ち事象から考える、Sql server の改善ポイント
待ち事象から考える、SQL Server の改善ポイント
小澤真之
Microsoft MVP for SQL Server (July 2011 - June 2015)
D11
自己紹介
db tech showcase 20142
フリーランスエンジニアとして SQL Server の案件を中心に従事しています 案件等で協力できることがありましたらお声掛けいただけると幸いです
「SQL Server 現状診断」による SQL Server 稼働状況の報告書作成
「SQL Server 性能情報解析手法の基礎」のセミナー実施
Microsoft MVP for SQL Server (July 2011 - June 2015) コミュニティやブログで SQL Server の情報を発信
コミュニティ活動
SQL Server : SQLTO (http://sqlto.net)
Azure : JAZUG (http://r.jazug.jp/)
ブログ : SE の雑記 (http://engineermemo.wordpress.com)
2014/11/11
本セッションについて
db tech showcase 20143
本セッションでは、SQL Server の基本的な待ち事象についての理解し、今後の改善ポイントを策定するための、基本的な知識の取得を目的としています。
本セッションの内容は SQL Server 2014 をベースとしていますが、一部の内容を除いて 2005 ~ 2012
でも利用することが可能です。
2014/11/11
最適な処理の実行とは??
2014/11/11db tech showcase 20144
データベースで、最適な処理の実行状態とは??
実行した結果が瞬時に取得できる
待ちが発生せずに結果を取得
待ち事象の概要
2014/11/11db tech showcase 20145
一般的な処理のライフサイクル
2014/11/11db tech showcase 20146
実行状態(RUNNING)
実行可能状態(RUNNABLE)
待機状態(SUSPENDED)
待ち事象が発生している
SQL Server の待ち事象の種類
2014/11/11db tech showcase 20147
Wait Stats
Latch Stats
Spinlock Stats
本セッションの内容
待ち事象の取得方法
2014/11/11db tech showcase 20148
待ち事象を取得する方法
2014/11/11db tech showcase 20149
パフォーマンスモニター
動的管理ビュー
拡張イベント
パフォーマンスモニター
2014/11/11db tech showcase 201410
SQL Server:Wait Statistics オブジェクトから取得可能 http://msdn.microsoft.com/ja-jp/library/ms190732.aspx
一部の待ち事象を時系列で取得することができる Lock waits
Log buffer waits
Log write waits
Memory grant queue waits
Network IO waits
Non-Page latch waits
Page IO latch waits
Page latch waits
Thread-safe memory objects waits
Transaction ownership waits
Wait for the worker
Workspace synchronization waits
動的管理ビュー 1/2
2014/11/11db tech showcase 201411
sys.dm_os_wait_stats から取得可能
http://msdn.microsoft.com/ja-jp/library/ms179984.aspx
SQL Server 2014 では 770 程度の待ち事象の情報を取得可能
SQL Server のサービスが最後に起動してからの累計値を格納
パフォーマンスモニター 動的管理ビュー
項目
Lock waits LCK_M_xx
Log write waits WRITELOG
Network IO waits ASYNC_NETWORK_IO
Page IO latch waits PAGEIOLATCH_xx
SOS_SCHEDULER_YIELD
動的管理ビュー 2/2
2014/11/11db tech showcase 201412
以下の情報を取得可能
waiting_tasks_count
wait_time_ms
max_wait_time_ms
signal_wait_time_ms
wait_time_ms と signal_wait_time_ms の比率にも注目
T0 : リソースの要求T1 : シグナルの受付
T2 : リソースの利用開始
Signal Wait Time (ms)
Wait Time (ms)
拡張イベント
2014/11/11db tech showcase 201413
SQL Server 2008 から利用することができるようになった軽量なパフォーマンス監視システム SQL Server 2012 から SSMS で容易に設定可能
セッションごとに sys.dm_os_wait_stats の情報を取得できる wait_info または wait_completed イベントから取得可能
duration : wait time ms
signal_duration : signal wait ms
DEMO
2014/11/11db tech showcase 201414
待ち事象の取得
リソースの待ち
2014/11/11db tech showcase 201415
ディスク
リソースの待ち 1/2
db tech showcase 201416
アプリケーション
データファイル
ログファイル
CPU
SQL Server
メモリ
2014/11/11
ディスク
リソースの待ち 2/2
db tech showcase 201417
データファイル
ログファイル
CPU
SQL Server
メモリ
ASYNC_NETWORK_IO
WRITELOG
アプリケーション
SOS_SCHEDULER_YIELD
PAGEIOLATCH_xx
2014/11/11
待ち事象とリソースの関係
2014/11/11db tech showcase 201418
リソース 待ち事象 要因
ネットワーク ASYNC_NETWORK_IOクライアント (アプリケーション) がサーバーからのデータを処理
CPU SOS_SCHEDULER_YIELD他のタスクの実行にスケジューラーを解放
メモリ(ディスク)
PAGEIOLATCH_xx I/O 要求でバッファーラッチが待機
ディスク WRITELOG ログフラッシュの完了を待機
待ち事象の見方
2014/11/11db tech showcase 201419
待ち事象が発生している = リソースが不足している
ではない 性能以上の待ち事象が発生しているのが問題
リソース 考慮点
ネットワーククライアント/サーバーの帯域上限に達した状態を推移しているネットワークキューが頻繁に発生している
CPUCPU の使用率が 100% に達した状態を推移しているCPU キューが頻繁に発生している
メモリキャッシュのヒット率が低いディスクからの読み取りに時間がかかっている
ディスクディスクからの読み取りに時間がかかっているログの書き込みに時間がかかっている
パフォーマンスモニターとの対比
2014/11/11db tech showcase 201420
パフォーマンスモニターと待ち事象を対比し、リソースの使用状況を把握
待ち事象 パフォーマンスモニター
ASYNC_NETWORK_IO
Network Interface¥Bytes Recived/secNetwork Interface¥Bytes Sent/secNetwork Interface¥Bytes Total/secNetwork Interface¥Output Queue length
SOS_SCHEDULER_YIELD
Processor¥% Processor TimeProcess(sqlservr)¥% Processor TimeSystem¥Processor Queue LengthSQLServer:SQL Statistics¥Batch Request/sec
PAGEIOLATCH_xx
Logical Disk (Physical Disk)¥Current Disk Queue LengthLogical Disk (Physical Disk)¥Disk Read / Write Bytes/secLogical Disk (Physical Disk)¥Disk Read / Write /secSQLServer:Buffer Manager¥Buffer cache hit ratioSQLServer:Buffer Manager¥Page life expectancy
WRITELOG
Logical Disk (Physical Disk)¥Current Disk Queue LengthLogical Disk (Physical Disk)¥Disk Read / Write Bytes/secLogical Disk (Physical Disk)¥Disk Read / Write /secSQLServer:Database¥Log Flush Waits/sec
CPU に関連する待ち
2014/11/11db tech showcase 201421
CPU で処理できる上限
2014/11/11db tech showcase 201422
CPU が瞬間的に実行できるのは一つの処理
CPU
処理 A 処理 B処理 A
CPUスケジューラーの譲渡が発生する
SOS_SCHEDULER_YIELD
パフォーマンスモニターとの対比
2014/11/11db tech showcase 201423
待ち事象 パフォーマンスモニター
ASYNC_NETWORK_IO
Network Interface¥Bytes Recived/secNetwork Interface¥Bytes Sent/secNetwork Interface¥Bytes Total/secNetwork Interface¥Output Queue length
SOS_SCHEDULER_YIELD
Processor¥% Processor TimeProcess(sqlservr)¥% Processor TimeSystem¥Processor Queue LengthSQLServer:SQL Statistics¥Batch Request/sec
PAGEIOLATCH_xx
Logical Disk (Physical Disk)¥Current Disk Queue LengthLogical Disk (Physical Disk)¥Disk Read / Write Bytes/secLogical Disk (Physical Disk)¥Disk Read / Write /secSQLServer:Buffer Manager¥Buffer cache hit ratioSQLServer:Buffer Manager¥Page life expectancy
WRITELOG
Logical Disk (Physical Disk)¥Current Disk Queue LengthLogical Disk (Physical Disk)¥Disk Read / Write Bytes/secLogical Disk (Physical Disk)¥Disk Read / Write /secSQLServer:Database¥Log Flush Waits/sec
DEMO
2014/11/11db tech showcase 201424
SOS_SCHEDULER_YIELD の確認
CPU の利用時間
2014/11/11db tech showcase 201425
CPU を長い時間使用しているクエリに注目 CPU 時間 (Worker Time / CPU Time)
クエリの実行時間 (Elapsed Time)
CPU 時間の長いクエリは以下から調査可能 プランキャッシュから取得
sys.dm_exec_query_statshttp://msdn.microsoft.com/ja-jp/library/ms189741.aspx
実行中のセッションから取得 sys.dm_exec_sessions
http://msdn.microsoft.com/ja-jp/library/ms176013.aspx
利用状況モニター
クエリのコンパイル
2014/11/11db tech showcase 201426
クエリの初回実行時にはクエリのコンパイルが行われる
クエリのコンパイルに使用されたリソースは実行プランから取得可能
CompileTime (ms)
CompileMemory (KB)
CompileCPU (ms)
http://schemas.microsoft.com/sqlserver/2004/07/showplan
過度なコンパイルの実行は CPU の負荷上昇にもつながる
ストアドプロシージャ / パラメーター化されていないクエリの大量の実行
類似のアドホッククエリの大量キャッシュはコンパイルコストが高い
SELECT * FROM Table_1 WHERE Col1 = ‘AAAAA’
SELECT * FROM Table_1 WHERE Col1 = ‘BBBBB’
DEMO
2014/11/11db tech showcase 201427
CPU 改善のためのクエリ取得
メモリに関連する待ち
2014/11/11db tech showcase 201428
SQL Sever の基本的なメモリ構造
2014/11/11db tech showcase 201429
Memory Manager : Database Cache Memory (KB)
Plan Cache : Cache Pages
Memory Manager : Connection Memory (KB)
Memory Manager : Granted Workspace Memory (KB)
Memory Manager : Lock Memory (KB)
一時利用
キャッシュ
今回の対象
SQL Server の I/O
2014/11/11db tech showcase 201430
ディスク
データファイル
ログファイル
CPU
SQL Server
メモリ
論理 I/O
物理 I/O
PAGEIOLATCH
どちらもCPU を利用
パフォーマンスモニターとの対比
2014/11/11db tech showcase 201431
待ち事象 パフォーマンスモニター
ASYNC_NETWORK_IO
Network Interface¥Bytes Recived/secNetwork Interface¥Bytes Sent/secNetwork Interface¥Bytes Total/secNetwork Interface¥Output Queue length
SOS_SCHEDULER_YIELD
Processor¥% Processor TimeProcess(sqlservr)¥% Processor TimeSystem¥Processor Queue LengthSQLServer:SQL Statistics¥Batch Request/sec
PAGEIOLATCH_xx
Logical Disk (Physical Disk)¥Current Disk Queue LengthLogical Disk (Physical Disk)¥Disk Read / Write Bytes/secLogical Disk (Physical Disk)¥Disk Read / Write /secSQLServer:Buffer Manager¥Buffer cache hit ratioSQLServer:Buffer Manager¥Page life expectancy
WRITELOG
Logical Disk (Physical Disk)¥Current Disk Queue LengthLogical Disk (Physical Disk)¥Disk Read / Write Bytes/secLogical Disk (Physical Disk)¥Disk Read / Write /secSQLServer:Database¥Log Flush Waits/sec
物理 I/O を減らすためには
2014/11/11db tech showcase 201432
物理 I/O の回数を減らす Scan 操作ではなく Seek 操作による検索効率の改善
検索効率の改善による処理時間の短縮は、CPU 使用率の改善にもつながる
読み取るページ数の削減 インデックスの断片化の解消
データの圧縮機能 行 / データ圧縮
列ストアインデックス
データのキャッシュ領域を有効に活用 キャッシュヒット率を上げる
プランキャッシュを減らすことでデータキャッシュの領域を増加
データ圧縮によりキャッシュできるページを増やす 圧縮されたデータは圧縮された状態でメモリにキャッシュされる
Enterprise Edition の機能
DEMO
2014/11/11db tech showcase 201433
論理 I/O と物理 I/O
ディスクの待ち
2014/11/11db tech showcase 201434
ディスクの基本性能を把握する
2014/11/11db tech showcase 201435
SQL Server の I/O でディスクの基本性能を取得するためのツールを利用 SQLIO
SQLIO Disk Subsystem Benchmark Tool http://www.microsoft.com/en-us/download/details.aspx?id=20163
SQLIOSIM C:¥Program Files¥Microsoft SQL Server¥<インスタンス ID>¥MSSQL¥Binn
サーバーの構築が完了したタイミングで測定することを推奨
HD SSD1 スレッド 10 スレッド 1 スレッド 10 スレッド
8KB 64KB 8KB 64KB 8KB 64KB 8KB 64KBSequential Read IO/sec 8,240 2,753 16,270 3,851 7,362 2389 24,039 3,135
MBytes/sec 64 172 127 240 57 149 187 195Write IO/sec 8,752 2,512 17,728 3,859 7,625 1678 21,026 2,704
MBytes/sec 68 157 138 241 59 104 164 169Random Read IO/sec 158 143 247 222 4,718 1920 18,322 3,049
MBytes/sec 1 8 1 14 36 119 143 190Write IO/sec 810 710 875 779 7,600 1,637 18,347 2,417
MBytes/sec 6 44 6 49 59 102 143 151
SQLIOSIM を使用したディスク性能の測定例
2 種類の待ちに注目
2014/11/11db tech showcase 201436
PAGEIOLATCHデータの読み取りメモリに関する待ちと同じアプローチ
WRITELOGデータの書き込み
Log Buffer
ログの書き込みの基本動作
2014/11/11db tech showcase 201437
ディスク
データファイル
ログファイル
CPU
SQL Server
メモリ
Log Flush
WRITELOG
パフォーマンスモニターとの対比
2014/11/11db tech showcase 201438
待ち事象 パフォーマンスモニター
ASYNC_NETWORK_IO
Network Interface¥Bytes Recived/secNetwork Interface¥Bytes Sent/secNetwork Interface¥Bytes Total/secNetwork Interface¥Output Queue length
SOS_SCHEDULER_YIELD
Processor¥% Processor TimeProcess(sqlservr)¥% Processor TimeSystem¥Processor Queue LengthSQLServer:SQL Statistics¥Batch Request/sec
PAGEIOLATCH_xx
Logical Disk (Physical Disk)¥Current Disk Queue LengthLogical Disk (Physical Disk)¥Disk Read / Write Bytes/secLogical Disk (Physical Disk)¥Disk Read / Write /secSQLServer:Buffer Manager¥Buffer cache hit ratioSQLServer:Buffer Manager¥Page life expectancy
WRITELOG
Logical Disk (Physical Disk)¥Current Disk Queue LengthLogical Disk (Physical Disk)¥Disk Read / Write Bytes/secLogical Disk (Physical Disk)¥Disk Read / Write /secSQLServer:Database¥Log Flush Waits/sec
ログフラッシュの発生タイミング
2014/11/11db tech showcase 201439
DECLARE @cnt int = 1
BEGIN TRAN
WHILE (@cnt <= 10000)
BEGIN
INSERT INTO WriteLogTest VALUES(NEWID())
SET @cnt += 1
END
COMMIT TRAN
ログフラッシュ
ログレコードがディスクに書き込まれ完全持続性が保障される
ログフラッシュの完了を待たずに処理を完了させる → 遅延持続性
DECLARE @cnt int = 1
WHILE (@cnt <= 10000)
BEGIN
INSERT INTO WriteLogTest VALUES(NEWID())
SET @cnt += 1
END
DEMO
2014/11/11db tech showcase 201440
WRITELOG の確認
まとめ
2014/11/11db tech showcase 201441
最初の一歩として、以下の待ち事象とパフォーマンスモニターを組み合わせることで全体的なリソースの使用状況を把握することができる
SOS_SCHEDULER_YIELD
PAGEIOLATCH_xx
WRITELOG
リソースの使用状況を把握することで改善ポイントを検討できる