待ち事象から考える、Sql server の改善ポイント

41
待ち事象から考える、 SQL Server の改善ポイント 小澤 真之 Microsoft MVP for SQL Server (July 2011 - June 2015) D11

Transcript of 待ち事象から考える、Sql server の改善ポイント

Page 1: 待ち事象から考える、Sql server の改善ポイント

待ち事象から考える、SQL Server の改善ポイント

小澤真之

Microsoft MVP for SQL Server (July 2011 - June 2015)

D11

Page 2: 待ち事象から考える、Sql server の改善ポイント

自己紹介

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

Page 3: 待ち事象から考える、Sql server の改善ポイント

本セッションについて

db tech showcase 20143

本セッションでは、SQL Server の基本的な待ち事象についての理解し、今後の改善ポイントを策定するための、基本的な知識の取得を目的としています。

本セッションの内容は SQL Server 2014 をベースとしていますが、一部の内容を除いて 2005 ~ 2012

でも利用することが可能です。

2014/11/11

Page 4: 待ち事象から考える、Sql server の改善ポイント

最適な処理の実行とは??

2014/11/11db tech showcase 20144

データベースで、最適な処理の実行状態とは??

実行した結果が瞬時に取得できる

待ちが発生せずに結果を取得

Page 5: 待ち事象から考える、Sql server の改善ポイント

待ち事象の概要

2014/11/11db tech showcase 20145

Page 6: 待ち事象から考える、Sql server の改善ポイント

一般的な処理のライフサイクル

2014/11/11db tech showcase 20146

実行状態(RUNNING)

実行可能状態(RUNNABLE)

待機状態(SUSPENDED)

待ち事象が発生している

Page 7: 待ち事象から考える、Sql server の改善ポイント

SQL Server の待ち事象の種類

2014/11/11db tech showcase 20147

Wait Stats

Latch Stats

Spinlock Stats

本セッションの内容

Page 8: 待ち事象から考える、Sql server の改善ポイント

待ち事象の取得方法

2014/11/11db tech showcase 20148

Page 9: 待ち事象から考える、Sql server の改善ポイント

待ち事象を取得する方法

2014/11/11db tech showcase 20149

パフォーマンスモニター

動的管理ビュー

拡張イベント

Page 10: 待ち事象から考える、Sql server の改善ポイント

パフォーマンスモニター

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

Page 11: 待ち事象から考える、Sql server の改善ポイント

動的管理ビュー 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

Page 12: 待ち事象から考える、Sql server の改善ポイント

動的管理ビュー 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)

Page 13: 待ち事象から考える、Sql server の改善ポイント

拡張イベント

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

Page 14: 待ち事象から考える、Sql server の改善ポイント

DEMO

2014/11/11db tech showcase 201414

待ち事象の取得

Page 15: 待ち事象から考える、Sql server の改善ポイント

リソースの待ち

2014/11/11db tech showcase 201415

Page 16: 待ち事象から考える、Sql server の改善ポイント

ディスク

リソースの待ち 1/2

db tech showcase 201416

アプリケーション

データファイル

ログファイル

CPU

SQL Server

メモリ

2014/11/11

Page 17: 待ち事象から考える、Sql server の改善ポイント

ディスク

リソースの待ち 2/2

db tech showcase 201417

データファイル

ログファイル

CPU

SQL Server

メモリ

ASYNC_NETWORK_IO

WRITELOG

アプリケーション

SOS_SCHEDULER_YIELD

PAGEIOLATCH_xx

2014/11/11

Page 18: 待ち事象から考える、Sql server の改善ポイント

待ち事象とリソースの関係

2014/11/11db tech showcase 201418

リソース 待ち事象 要因

ネットワーク ASYNC_NETWORK_IOクライアント (アプリケーション) がサーバーからのデータを処理

CPU SOS_SCHEDULER_YIELD他のタスクの実行にスケジューラーを解放

メモリ(ディスク)

PAGEIOLATCH_xx I/O 要求でバッファーラッチが待機

ディスク WRITELOG ログフラッシュの完了を待機

Page 19: 待ち事象から考える、Sql server の改善ポイント

待ち事象の見方

2014/11/11db tech showcase 201419

待ち事象が発生している = リソースが不足している

ではない 性能以上の待ち事象が発生しているのが問題

リソース 考慮点

ネットワーククライアント/サーバーの帯域上限に達した状態を推移しているネットワークキューが頻繁に発生している

CPUCPU の使用率が 100% に達した状態を推移しているCPU キューが頻繁に発生している

メモリキャッシュのヒット率が低いディスクからの読み取りに時間がかかっている

ディスクディスクからの読み取りに時間がかかっているログの書き込みに時間がかかっている

Page 20: 待ち事象から考える、Sql server の改善ポイント

パフォーマンスモニターとの対比

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

Page 21: 待ち事象から考える、Sql server の改善ポイント

CPU に関連する待ち

2014/11/11db tech showcase 201421

Page 22: 待ち事象から考える、Sql server の改善ポイント

CPU で処理できる上限

2014/11/11db tech showcase 201422

CPU が瞬間的に実行できるのは一つの処理

CPU

処理 A 処理 B処理 A

CPUスケジューラーの譲渡が発生する

SOS_SCHEDULER_YIELD

Page 23: 待ち事象から考える、Sql server の改善ポイント

パフォーマンスモニターとの対比

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

Page 24: 待ち事象から考える、Sql server の改善ポイント

DEMO

2014/11/11db tech showcase 201424

SOS_SCHEDULER_YIELD の確認

Page 25: 待ち事象から考える、Sql server の改善ポイント

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

利用状況モニター

Page 26: 待ち事象から考える、Sql server の改善ポイント

クエリのコンパイル

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’

Page 27: 待ち事象から考える、Sql server の改善ポイント

DEMO

2014/11/11db tech showcase 201427

CPU 改善のためのクエリ取得

Page 28: 待ち事象から考える、Sql server の改善ポイント

メモリに関連する待ち

2014/11/11db tech showcase 201428

Page 29: 待ち事象から考える、Sql server の改善ポイント

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)

一時利用

キャッシュ

今回の対象

Page 30: 待ち事象から考える、Sql server の改善ポイント

SQL Server の I/O

2014/11/11db tech showcase 201430

ディスク

データファイル

ログファイル

CPU

SQL Server

メモリ

論理 I/O

物理 I/O

PAGEIOLATCH

どちらもCPU を利用

Page 31: 待ち事象から考える、Sql server の改善ポイント

パフォーマンスモニターとの対比

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

Page 32: 待ち事象から考える、Sql server の改善ポイント

物理 I/O を減らすためには

2014/11/11db tech showcase 201432

物理 I/O の回数を減らす Scan 操作ではなく Seek 操作による検索効率の改善

検索効率の改善による処理時間の短縮は、CPU 使用率の改善にもつながる

読み取るページ数の削減 インデックスの断片化の解消

データの圧縮機能 行 / データ圧縮

列ストアインデックス

データのキャッシュ領域を有効に活用 キャッシュヒット率を上げる

プランキャッシュを減らすことでデータキャッシュの領域を増加

データ圧縮によりキャッシュできるページを増やす 圧縮されたデータは圧縮された状態でメモリにキャッシュされる

Enterprise Edition の機能

Page 33: 待ち事象から考える、Sql server の改善ポイント

DEMO

2014/11/11db tech showcase 201433

論理 I/O と物理 I/O

Page 34: 待ち事象から考える、Sql server の改善ポイント

ディスクの待ち

2014/11/11db tech showcase 201434

Page 35: 待ち事象から考える、Sql server の改善ポイント

ディスクの基本性能を把握する

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 を使用したディスク性能の測定例

Page 36: 待ち事象から考える、Sql server の改善ポイント

2 種類の待ちに注目

2014/11/11db tech showcase 201436

PAGEIOLATCHデータの読み取りメモリに関する待ちと同じアプローチ

WRITELOGデータの書き込み

Page 37: 待ち事象から考える、Sql server の改善ポイント

Log Buffer

ログの書き込みの基本動作

2014/11/11db tech showcase 201437

ディスク

データファイル

ログファイル

CPU

SQL Server

メモリ

Log Flush

WRITELOG

Page 38: 待ち事象から考える、Sql server の改善ポイント

パフォーマンスモニターとの対比

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

Page 39: 待ち事象から考える、Sql server の改善ポイント

ログフラッシュの発生タイミング

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

Page 40: 待ち事象から考える、Sql server の改善ポイント

DEMO

2014/11/11db tech showcase 201440

WRITELOG の確認

Page 41: 待ち事象から考える、Sql server の改善ポイント

まとめ

2014/11/11db tech showcase 201441

最初の一歩として、以下の待ち事象とパフォーマンスモニターを組み合わせることで全体的なリソースの使用状況を把握することができる

SOS_SCHEDULER_YIELD

PAGEIOLATCH_xx

WRITELOG

リソースの使用状況を把握することで改善ポイントを検討できる