33
1 SQL Serverにおける パフォーマンスチューニング手法 ~注目すべきポイントを簡単に~ Microsoft Corporation SQL Server Customer Advisory Team Principal Program Manager Yorihito Tada [email protected]

A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

Embed Size (px)

Citation preview

Page 1: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

1

SQL Serverにおける パフォーマンスチューニング手法 ~注目すべきポイントを簡単に~

Microsoft Corporation SQL Server Customer Advisory Team Principal Program Manager Yorihito Tada [email protected]

Page 2: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

2

お客様プロジェクトの成功 Bwin–ヨーロッパで最もポピュラーなアミューズメントサイト、

30,000 万トランザクション/秒、100 TB トータル ストレージ Temenos–銀行勘定系パッケージ ベンダー; 1 TB DB, 100 k

batch requests/sec プロダクトの改善

顧客プロジェクトへの深いかかわりから、プロダクトへのフィードバックを SQL Server 開発チームに伝えます

コミュニティへの貢献 http://sqlcat.com SEAS (SQL Server Enterprise Architecture Summit) の開催、

PASS Summit などへの貢献

SQLCAT (Customer Advisory Team) SQL Server Customer Advisory Team (SQL CAT) は SQL Server の製品開発グループを代表して顧客プロジェクトを支援するチームです。SQLCAT はワールドワイドで大規模で複雑なプロジェクトに参加しています。

Page 3: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

3

アジェンダ SQL Serverのパフォーマンスとは SQL Serverのボトルネック分析と対策

Wait I/O CPU メモリ

Page 4: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

4

パフォーマンス?

パフォーマンス スループット

単位時間あたりの処理数 レイテンシ

処理にかかる時間 パフォーマンスチューニング

遅いデータベースを速くする 速いデータベースを作る

Page 5: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

5

パフォーマンス問題

リソースのボトルネック ボトルネックの特定 解消

リソース ストレージ CPU メモリ リソースのブロッキング (Wait)

Page 6: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

6

ボトルネックの分析と対策 Wait

Page 7: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

7

ボトルネックの分析

手順を追って分析する どこに時間がかかっているかを理解する

経過時間 = 実行時間 + 待ち時間 待ち時間がポイント – どういう待ちがあるか

通常の状態を把握する 一番待っているのは誰か

以下のようなことを考えながら分析 どこに時間がかかっているか CPUはなぜ使われていないか いくつ並列に動作できるか どうやって測るか

Page 8: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

8

select * from sys.dm_os_wait_stats order by wait_time_ms desc

waiting_tasks_count

wait_time_ms max_wait_time_ms

signal_wait_time_ms

LOGMGR_QUEUE 4048 562390 144 31

DIRTY_PAGE_POLL 5149 562355 117 43 HADR_FILESTREAM_IOMGR_IOCOMPLETION 1102 561541 516 12

LAZYWRITER_SLEEP 557 561412 1016 22 SQLTRACE_INCREMENTAL_FLUSH_SLEEP 141 561221 4015 1

XE_TIMER_EVENT 129 561092 5014 560824

REQUEST_FOR_DEADLOCK_SEARCH 113 560870 5015 560870

CHECKPOINT_QUEUE 2 485470 485470 0

XE_DISPATCHER_WAIT 5 480244 120219 0

BROKER_TO_FLUSH 273 281650 1039 22

Page 9: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

9

典型的なWait

LCK_<X> による長い待ち 誰が長くロックしているか

WRITELOG による長い待ち ログディスクのパフォーマンスは?

PAGELATCH_<X> - ホットスポット 特定のページへのアクセス集中

SOS_SCHEDULER_YIELD CPUリソース不足または使い過ぎ

LATCH_<X> さらにsys.dm_os_latch_statsを調査する必要がある

合計待ち時間が長い ASYNC_NETWORK_IO or OLEDB 外部のプログラムが遅い?インタラクションが多すぎる?

CXPACKET 並列化と同時に発生。無視。

Page 10: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

10

ボトルネックの分析と対策 I/O

Page 11: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

11

ディスクIOボトルネック分析

I/Oのボトルネックをモニタして特定 リソースモニタ パフォーマンスモニタ DMV

何がI/O負荷を上げているか 悪いクエリプラン 多くの読み込み・書き込み ストレージの性能が低い

Page 12: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

12

リソースモニター

ファイル毎にI/Oスループットとディスクのレスポ

ンス時間

Page 13: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

13

パフォーマンスモニタ

現在のパフォーマンスのモニタリング

どのカウンタを見るか

Page 14: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

14

I/O関連カウンタ

PhysicalDisk Object: Avg. Disk Queue Length Avg. Disk Sec/Read Avg. Disk Sec/Write %Disk Time Disk Transfers/Sec Avg. Disk Bytes/Read Avg. Disk Bytes/Write Disk Read Bytes/Sec Disk Write Bytes/Sec

Page 15: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

15

I/O関連カウンタ

SQL Server Buffer Manager Object: (メモリ不足がI/O負荷を上げる場合あり) Buffer Cache hit ratio Page Life Expectancy Checkpoint pages/sec Lazywrites/sec

SQL Server:Wait Statistics Log buffer waits Log write waits Page IO latch waits

Page 16: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

16

DMVやログも観察

高い I/O ラッチ

待ち時間

待ち/停止中の I/O

ERRORLOG への警告

sys.dm_os_wait_stats sys.dm_exec_requests

sys.dm_io_pending_io_requests sys.dm_io_virtual_file_stats

15 秒以上I/O完了が遅れると警告

プレゼンター
プレゼンテーションのノート
sys.dm_os_wait_stats is an aggregated view of waits sys.dm_exec_requests is a snapshot view of current executing requests with wait info Select wait_type, waiting_tasks_count, wait_time_ms fromsys.dm_os_wait_stats wherewait_type like 'PAGEIOLATCH%' order by wait_type sys.dm_io_pending_io_requests shows all pending I/O requests. sys.dm_io_virtual_file_stats shows aggregated I/O stats for each database file. So it’s a good source for both identifying I/O problem and measuring/planning storage requirements. select database_id, file_id, io_stall, io_pending_ms_ticks, scheduler_address fromsys.dm_io_virtual_file_stats(NULL, NULL)t1, sys.dm_io_pending_io_requests as t2 wheret1.file_handle = t2.io_handle
Page 17: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

17

次になにをするか

どのクエリが負荷を上げているか特定してチューニング インデックスが効かない?

不足? あるのに効かない?

統計情報が古い?型変換? クエリプラン等を分析

メモリが不足していないか確認 圧縮でI/O負荷が下げられるか検討 ストレージデバイスのアップグレード

ファイルの再配置 ディスクの追加

Page 18: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

18

I/O TOP 10

SELECT TOP 10 (qs.total_logical_reads + qs.total_logical_writes) /qs.execution_count as [Avg IO], substring (qt.text,qs.statement_start_offset/2, (case when qs.statement_end_offset = -1 then len(convert(nvarchar(max), qt.text)) * 2 else qs.statement_end_offset end - qs.statement_start_offset)/2) as query_text, qt.dbid, qt.objectid FROM sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text (qs.sql_handle) as qt ORDER BY [Avg IO] DESC

Page 19: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

19

ボトルネックの分析と対策 CPU

Page 20: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

20

CPU のボトルネック分析

継続的に%Processor Timeが80%以上? タスクマネージャ パフォーマンスモニタ DMV

なにがCPUを使っているか リコンパイル カーソル 悪いクエリプラン その他

Page 21: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

21

CPU 関連カウンタ

Processor object: Processor Information object:

%Privileged Time %Processor Time %User Time

Process object (SQL Server): %Privileged Time %Processor Time %User Time

Page 22: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

22

CPU 負荷の原因に関連するカウンタ

SQL Server:SQL Statistics Batch requests/sec SQL Compilations/sec SQL Re-Compilations/sec

SQL Server:Cursor Manager by Type SQL Server:Cursor Manager Total

複数同時のカーソル処理はCPU負荷の原因となる

Page 23: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

23

CPU関連DMV

sys.dm_exec_sessions

cpu_time

total_scheduled_time

total_elapsed_time

sys.dm_exec_requests

cpu_time

total_elapsed_time

query_hash

sys.dm_exec_query_stats

sys.dm_exec_procedure_stats

sys.dm_exec_trigger_stats

total_worker_time

total_elapsed_time

Sql_handle/query_hash

sys.sysprocesses

cpu

Backward compatibility view

プレゼンター
プレゼンテーションのノート
One session could have multiple requests To find top 10 total cpu consuming queries: SELECT TOP 10 SUM(query_stats.total_worker_time) AS "Total CPU Time", SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time", MIN(query_stats.statement_text) AS "Statement Text" FROM (SELECT QS.*, SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats GROUP BY query_stats.query_hash ORDER BY 1 DESC; GO
Page 24: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

24

次になにをするか

CPU使用率が高いこと自体は問題ではないかもしれない

CPU使用率の高いクエリを特定してチューニング コンパイル・リコンパイルが多数

SETオプション、TEMPテーブル、統計情報、クエリヒント 効率の悪いプラン

インデックス、統計情報、クエリヒント ハードウエアアップグレード

Page 25: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

25

CPU TOP 10 SELECT TOP 10 SUM(query_stats.total_worker_time) AS "Total CPU Time", SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time", MIN(query_stats.statement_text) AS "Statement Text" FROM (SELECT QS.*, SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats GROUP BY query_stats.query_hash ORDER BY 1 DESC;

Page 26: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

26

ボトルネックの分析と対策 メモリ

Page 27: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

27

メモリのボトルネック分析

メモリ負荷をモニタして特定 タスクマネージャ パフォーマンスモニタ DMV

何がメモリを圧迫しているか? 外部?内部? 悪いクエリプラン?

Page 28: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

28

メモリ関連カウンタ

Memory object: Available K/M bytes Commit Limit Paging File %Usage (Peak) Page reads/sec

Process object: Private bytes Virtual bytes Working set

Page 29: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

29

メモリ関連カウンタ

SQL Server Memory Manager object: Connection Memory Lock Memory Optimizer Memory Memory Grants Pending …

SQL Server Buffer Manager object: Buffer cache hit ratio Checkpoint pages/sec Free list stalls/sec Free pages Lazy writes/sec Page life expectancy Stolen pages Target pages Total pages

SQL Server Plan Cache object SQL Server Resource Pool Stats object

メモリ待ちのタスクあり

キャッシュの寿命は?

Page 30: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

30

DBCC と DMVs

DBCC MEMORYSTATUS sys.dm_os_sys_memory

system_memory_state_desc sys.dm_os_process_memory

process_physical_memory_low = 1 は物理メモリ不足 memory_utilization_percentage が100%を下回っている場合には外部からのメモリプレッシャーあり。

sys.dm_os_memory_clerks

Page 31: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

31

次になにをするか

メモリ構成をチェック – sp_configure max server memory (MB)

外部からのメモリ圧迫 他のどのプロセスがメモリを圧迫しているか

内部のメモリ圧迫 どのコンポーネントが一番メモリを消費しているか

クエリチューニング メモリ追加

Page 32: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

32

おわりに

手順どおりに分析 複数のツールからの情報の関連に注目する 1つのボトルネックを潰すと次が顕在化 リソース競合はお互いに影響

メモリ圧迫=>CPUやI/Oの高負荷 I/Oが遅い=>Wait多発 とか

Page 32

Page 33: A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史

33

& &