SlideShare a Scribd company logo
1 of 33
Download to read offline
SQL Serverにおける
パフォーマンスチューニング手法
~注目すべきポイントを簡単に~

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

 お客様プロジェクトの成功
    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 などへの貢献
                                                                      2
アジェンダ
 SQL Serverのパフォーマンスとは
 SQL Serverのボトルネック分析と対策
  Wait
  I/O
  CPU
  メモリ




                           3
パフォーマンス?

 パフォーマンス
  スループット
    単位時間あたりの処理数
  レイテンシ
    処理にかかる時間

 パフォーマンスチューニング
  遅いデータベースを速くする
  速いデータベースを作る




                   4
パフォーマンス問題

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

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




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




               6
ボトルネックの分析

 手順を追って分析する
 どこに時間がかかっているかを理解する
  経過時間   = 実行時間 + 待ち時間
 待ち時間がポイント – どういう待ちがあるか
  通常の状態を把握する
  一番待っているのは誰か

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

                           7
select * from sys.dm_os_wait_stats
order by wait_time_ms desc
                               waiting_ta       wait_time_ms      max_wait_ti     signal_wait
                               sks_count                          me_ms           _time_ms


LOGMGR_QUEUE                          4048               562390             144             31

DIRTY_PAGE_POLL                       5149               562355             117             43
HADR_FILESTREAM_IOMGR_IOCO
MPLETION                              1102               561541             516             12

LAZYWRITER_SLEEP                       557               561412            1016             22
SQLTRACE_INCREMENTAL_FLUSH_S
LEEP                                   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

                                                                                                    8
典型的なWait

 LCK_<X> による長い待ち
   誰が長くロックしているか
 WRITELOG による長い待ち
   ログディスクのパフォーマンスは?
 PAGELATCH_<X> - ホットスポット
   特定のページへのアクセス集中
 SOS_SCHEDULER_YIELD
   CPUリソース不足または使い過ぎ
 LATCH_<X>
   さらにsys.dm_os_latch_statsを調査する必要がある
 合計待ち時間が長い ASYNC_NETWORK_IO or OLEDB
   外部のプログラムが遅い?インタラクションが多すぎる?
 CXPACKET
   並列化と同時に発生。無視。


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




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

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

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




                       11
リソースモニター




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




            12
パフォーマンスモニタ


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




どのカウンタを見るか




             13
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




                             14
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




                                      15
DMVやログも観察

高い I/O ラッチ
              sys.dm_os_wait_stats
              sys.dm_exec_requests
   待ち時間


 待ち/停止中の      sys.dm_io_pending_io_requests
              sys.dm_io_virtual_file_stats
    I/O


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



                                              16
次になにをするか
 どのクエリが負荷を上げているか特定してチュー
 ニング
  インデックスが効かない?
    不足?
    あるのに効かない?
      統計情報が古い?型変換?
  クエリプラン等を分析

 メモリが不足していないか確認
 圧縮でI/O負荷が下げられるか検討
 ストレージデバイスのアップグレード
  ファイルの再配置
  ディスクの追加
                           17
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




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




               19
CPU のボトルネック分析

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

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




                               20
CPU 関連カウンタ

 Processor object:
 Processor Information object:
   %Privileged Time
   %Processor Time
   %User Time

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




                                  21
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負荷の原因となる




                                              22
CPU関連DMV

                                               sys.dm_exec_query_stats

sys.dm_exec_sessions   sys.dm_exec_requests   sys.dm_exec_procedure_stats   sys.sysprocesses
                                               sys.dm_exec_trigger_stats




     cpu_time               cpu_time             total_worker_time
                                                                                   cpu



 total_scheduled_t      total_elapsed_tim
                                                 total_elapsed_time
        ime                     e


                                                                                Backward
 total_elapsed_tim                              Sql_handle/query            compatibility view
                           query_hash
         e                                             _hash




                                                                                                 23
次になにをするか

 CPU使用率が高いこと自体は問題ではないかもし
  れない
 CPU使用率の高いクエリを特定してチューニング
  コンパイル・リコンパイルが多数
    SETオプション、TEMPテーブル、統計情報、クエリヒント
  効率の悪いプラン
    インデックス、統計情報、クエリヒント

 ハードウエアアップグレード




                                     24
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;
                                                                25
メモリ
ボトルネックの分析と対策




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

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

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




                   27
メモリ関連カウンタ

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

 Process object:
   Private bytes
   Virtual bytes
   Working set




                                28
メモリ関連カウンタ
   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



                                                          29
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




                                                  30
次になにをするか

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

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

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

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




                              31
おわりに

 手順どおりに分析
 複数のツールからの情報の関連に注目する
 1つのボトルネックを潰すと次が顕在化
 リソース競合はお互いに影響
  メモリ圧迫=>CPUやI/Oの高負荷
  I/Oが遅い=>Wait多発
  とか




                                  32
                        Page 32
&

    33

More Related Content

What's hot

[D11] SQL Server エンジニアに知ってもらいたい!! SQL Server チューニングアプローチ by masayuki ozawa
[D11] SQL Server エンジニアに知ってもらいたい!! SQL Server チューニングアプローチ by masayuki ozawa[D11] SQL Server エンジニアに知ってもらいたい!! SQL Server チューニングアプローチ by masayuki ozawa
[D11] SQL Server エンジニアに知ってもらいたい!! SQL Server チューニングアプローチ by masayuki ozawa
Insight Technology, Inc.
 
Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎
Masayuki Ozawa
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tips
Masayuki Ozawa
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
Yoshinori Matsunobu
 

What's hot (20)

[D11] SQL Server エンジニアに知ってもらいたい!! SQL Server チューニングアプローチ by masayuki ozawa
[D11] SQL Server エンジニアに知ってもらいたい!! SQL Server チューニングアプローチ by masayuki ozawa[D11] SQL Server エンジニアに知ってもらいたい!! SQL Server チューニングアプローチ by masayuki ozawa
[D11] SQL Server エンジニアに知ってもらいたい!! SQL Server チューニングアプローチ by masayuki ozawa
 
Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎Sql server のバックアップとリストアの基礎
Sql server のバックアップとリストアの基礎
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
Sql server 運用 101
Sql server 運用 101Sql server 運用 101
Sql server 運用 101
 
SQL Server中級者のための実践で使えるかもしれないTips集
SQL Server中級者のための実践で使えるかもしれないTips集SQL Server中級者のための実践で使えるかもしれないTips集
SQL Server中級者のための実践で使えるかもしれないTips集
 
Sql server 構築 運用 tips
Sql server 構築 運用 tipsSql server 構築 運用 tips
Sql server 構築 運用 tips
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解するdb tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
db tech showcase 2019 SQL Database Hyperscale 徹底分析 - 最新アーキテクチャの特徴を理解する
 
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
 
基本に戻ってInnoDBの話をします
基本に戻ってInnoDBの話をします基本に戻ってInnoDBの話をします
基本に戻ってInnoDBの話をします
 
MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話MHA for MySQLとDeNAのオープンソースの話
MHA for MySQLとDeNAのオープンソースの話
 
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
Db2 v11.5.4 高可用性構成 & HADR 構成パターンご紹介
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
 
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing
 
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
Apache Sparkの基本と最新バージョン3.2のアップデート(Open Source Conference 2021 Online/Fukuoka ...
 
SQL Server のロック概要
SQL Server のロック概要SQL Server のロック概要
SQL Server のロック概要
 

Viewers also liked

COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアルCOD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
Masayuki Ozawa
 
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
Insight Technology, Inc.
 
Sql serverインデックスの断片化と再構築の必要性について
Sql serverインデックスの断片化と再構築の必要性についてSql serverインデックスの断片化と再構築の必要性について
Sql serverインデックスの断片化と再構築の必要性について
貴仁 大和屋
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012
Mikiya Okuno
 

Viewers also liked (12)

[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
 
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアルCOD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
COD2012 T2/T3 : 実機で試す SQL Server の現状取得 ハンズオンマニュアル
 
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
 
MySQL5.6検証レポート
MySQL5.6検証レポートMySQL5.6検証レポート
MySQL5.6検証レポート
 
早くなったのか? MySQL5.5から5.6へのアップグレード事例
早くなったのか? MySQL5.5から5.6へのアップグレード事例早くなったのか? MySQL5.5から5.6へのアップグレード事例
早くなったのか? MySQL5.5から5.6へのアップグレード事例
 
Sql serverインデックスの断片化と再構築の必要性について
Sql serverインデックスの断片化と再構築の必要性についてSql serverインデックスの断片化と再構築の必要性について
Sql serverインデックスの断片化と再構築の必要性について
 
MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012MySQL 5.6新機能解説@dbtechshowcase2012
MySQL 5.6新機能解説@dbtechshowcase2012
 
Sql server 2016 always on 可用性グループ new features
Sql server 2016 always on 可用性グループ new featuresSql server 2016 always on 可用性グループ new features
Sql server 2016 always on 可用性グループ new features
 
MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形
 
SQL Server 入門
SQL Server 入門SQL Server 入門
SQL Server 入門
 
カヤックコピー部のコピー講座
カヤックコピー部のコピー講座カヤックコピー部のコピー講座
カヤックコピー部のコピー講座
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 

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

[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
Insight Technology, Inc.
 
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみようOOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
Tadashi Yamashita
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publish
Yohei Azekatsu
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
Kensuke Nagae
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
Yoshinori Matsunobu
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
Insight Technology, Inc.
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
akirahiguchi
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?
Masayuki Ozawa
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用
Chiaki Hatanaka
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
akirahiguchi
 

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

[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
[INSIGHT OUT 2011] A24 sql server wait events(mario broodbakker)
 
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
[db tech showcase Tokyo 2018] #dbts2018 #D34 『サポートのトップエンジニアが語る - ワンランク上のStats...
 
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみようOOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publish
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?
 
CAメインフレーム システムリソース削減に貢献する製品について
CAメインフレーム システムリソース削減に貢献する製品についてCAメインフレーム システムリソース削減に貢献する製品について
CAメインフレーム システムリソース削減に貢献する製品について
 
perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)
 
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
 
SQL Azure のシームレスな管理
SQL Azure のシームレスな管理SQL Azure のシームレスな管理
SQL Azure のシームレスな管理
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用Hadoopによるリクルートでの技術調査とその活用
Hadoopによるリクルートでの技術調査とその活用
 
システムパフォーマンス勉強会#5
システムパフォーマンス勉強会#5システムパフォーマンス勉強会#5
システムパフォーマンス勉強会#5
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 

More from Insight Technology, Inc.

コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
Insight Technology, Inc.
 

More from Insight Technology, Inc. (20)

グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?
 
Docker and the Oracle Database
Docker and the Oracle DatabaseDocker and the Oracle Database
Docker and the Oracle Database
 
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
 
事例を通じて機械学習とは何かを説明する
事例を通じて機械学習とは何かを説明する事例を通じて機械学習とは何かを説明する
事例を通じて機械学習とは何かを説明する
 
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
 
MBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごとMBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごと
 
グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?
 
DBREから始めるデータベースプラットフォーム
DBREから始めるデータベースプラットフォームDBREから始めるデータベースプラットフォーム
DBREから始めるデータベースプラットフォーム
 
SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門
 
Lunch & Learn, AWS NoSQL Services
Lunch & Learn, AWS NoSQL ServicesLunch & Learn, AWS NoSQL Services
Lunch & Learn, AWS NoSQL Services
 
db tech showcase2019オープニングセッション @ 森田 俊哉
db tech showcase2019オープニングセッション @ 森田 俊哉 db tech showcase2019オープニングセッション @ 森田 俊哉
db tech showcase2019オープニングセッション @ 森田 俊哉
 
db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ 石川 雅也db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ 石川 雅也
 
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
 
難しいアプリケーション移行、手軽に試してみませんか?
難しいアプリケーション移行、手軽に試してみませんか?難しいアプリケーション移行、手軽に試してみませんか?
難しいアプリケーション移行、手軽に試してみませんか?
 
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
 
そのデータベース、クラウドで使ってみませんか?
そのデータベース、クラウドで使ってみませんか?そのデータベース、クラウドで使ってみませんか?
そのデータベース、クラウドで使ってみませんか?
 
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
 
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。 複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
 
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
 
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
 

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

  • 1. SQL Serverにおける パフォーマンスチューニング手法 ~注目すべきポイントを簡単に~ Microsoft Corporation SQL Server Customer Advisory Team Principal Program Manager Yorihito Tada Yorihito.Tada@microsoft.com 1
  • 2. SQLCAT (Customer Advisory Team) SQL Server Customer Advisory Team (SQL CAT) は SQL Server の製品開発グループを 代表して顧客プロジェクトを支援するチームです。SQLCAT はワールドワイドで大規模で 複雑なプロジェクトに参加しています。  お客様プロジェクトの成功  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 などへの貢献 2
  • 3. アジェンダ  SQL Serverのパフォーマンスとは  SQL Serverのボトルネック分析と対策  Wait  I/O  CPU  メモリ 3
  • 4. パフォーマンス?  パフォーマンス  スループット  単位時間あたりの処理数  レイテンシ  処理にかかる時間  パフォーマンスチューニング  遅いデータベースを速くする  速いデータベースを作る 4
  • 5. パフォーマンス問題  リソースのボトルネック  ボトルネックの特定  解消  リソース  ストレージ  CPU  メモリ  リソースのブロッキング (Wait) 5
  • 7. ボトルネックの分析  手順を追って分析する  どこに時間がかかっているかを理解する  経過時間 = 実行時間 + 待ち時間  待ち時間がポイント – どういう待ちがあるか  通常の状態を把握する  一番待っているのは誰か  以下のようなことを考えながら分析  どこに時間がかかっているか  CPUはなぜ使われていないか  いくつ並列に動作できるか  どうやって測るか 7
  • 8. select * from sys.dm_os_wait_stats order by wait_time_ms desc waiting_ta wait_time_ms max_wait_ti signal_wait sks_count me_ms _time_ms LOGMGR_QUEUE 4048 562390 144 31 DIRTY_PAGE_POLL 5149 562355 117 43 HADR_FILESTREAM_IOMGR_IOCO MPLETION 1102 561541 516 12 LAZYWRITER_SLEEP 557 561412 1016 22 SQLTRACE_INCREMENTAL_FLUSH_S LEEP 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 8
  • 9. 典型的なWait  LCK_<X> による長い待ち  誰が長くロックしているか  WRITELOG による長い待ち  ログディスクのパフォーマンスは?  PAGELATCH_<X> - ホットスポット  特定のページへのアクセス集中  SOS_SCHEDULER_YIELD  CPUリソース不足または使い過ぎ  LATCH_<X>  さらにsys.dm_os_latch_statsを調査する必要がある  合計待ち時間が長い ASYNC_NETWORK_IO or OLEDB  外部のプログラムが遅い?インタラクションが多すぎる?  CXPACKET  並列化と同時に発生。無視。 9
  • 11. ディスクIOボトルネック分析  I/Oのボトルネックをモニタして特定  リソースモニタ  パフォーマンスモニタ  DMV  何がI/O負荷を上げているか  悪いクエリプラン  多くの読み込み・書き込み  ストレージの性能が低い 11
  • 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 14
  • 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 15
  • 16. DMVやログも観察 高い I/O ラッチ sys.dm_os_wait_stats sys.dm_exec_requests 待ち時間 待ち/停止中の sys.dm_io_pending_io_requests sys.dm_io_virtual_file_stats I/O ERRORLOG へ 15 秒以上I/O完了が遅れ ると警告 の警告 16
  • 17. 次になにをするか  どのクエリが負荷を上げているか特定してチュー ニング  インデックスが効かない?  不足?  あるのに効かない?  統計情報が古い?型変換?  クエリプラン等を分析  メモリが不足していないか確認  圧縮でI/O負荷が下げられるか検討  ストレージデバイスのアップグレード  ファイルの再配置  ディスクの追加 17
  • 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 18
  • 20. CPU のボトルネック分析  継続的に%Processor Timeが80%以上?  タスクマネージャ  パフォーマンスモニタ  DMV  なにがCPUを使っているか  リコンパイル  カーソル  悪いクエリプラン  その他 20
  • 21. CPU 関連カウンタ  Processor object:  Processor Information object:  %Privileged Time  %Processor Time  %User Time  Process object (SQL Server):  %Privileged Time  %Processor Time  %User Time 21
  • 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負荷の原因となる 22
  • 23. CPU関連DMV sys.dm_exec_query_stats sys.dm_exec_sessions sys.dm_exec_requests sys.dm_exec_procedure_stats sys.sysprocesses sys.dm_exec_trigger_stats cpu_time cpu_time total_worker_time cpu total_scheduled_t total_elapsed_tim total_elapsed_time ime e Backward total_elapsed_tim Sql_handle/query compatibility view query_hash e _hash 23
  • 24. 次になにをするか  CPU使用率が高いこと自体は問題ではないかもし れない  CPU使用率の高いクエリを特定してチューニング  コンパイル・リコンパイルが多数  SETオプション、TEMPテーブル、統計情報、クエリヒント  効率の悪いプラン  インデックス、統計情報、クエリヒント  ハードウエアアップグレード 24
  • 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; 25
  • 27. メモリのボトルネック分析  メモリ負荷をモニタして特定  タスクマネージャ  パフォーマンスモニタ  DMV  何がメモリを圧迫しているか?  外部?内部?  悪いクエリプラン? 27
  • 28. メモリ関連カウンタ  Memory object:  Available K/M bytes  Commit Limit  Paging File %Usage (Peak)  Page reads/sec  Process object:  Private bytes  Virtual bytes  Working set 28
  • 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 29
  • 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 30
  • 31. 次になにをするか  メモリ構成をチェック – sp_configure  max server memory (MB)  外部からのメモリ圧迫  他のどのプロセスがメモリを圧迫しているか  内部のメモリ圧迫  どのコンポーネントが一番メモリを消費しているか  クエリチューニング  メモリ追加 31
  • 32. おわりに  手順どおりに分析  複数のツールからの情報の関連に注目する  1つのボトルネックを潰すと次が顕在化  リソース競合はお互いに影響  メモリ圧迫=>CPUやI/Oの高負荷  I/Oが遅い=>Wait多発  とか 32 Page 32
  • 33. & 33

Editor's Notes

  1. sys.dm_os_wait_stats is an aggregated view of waitssys.dm_exec_requests is a snapshot view of current executing requests with wait infoSelect wait_type, waiting_tasks_count, wait_time_msfrom sys.dm_os_wait_statswhere wait_type like &apos;PAGEIOLATCH%&apos; order by wait_typesys.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_addressfrom sys.dm_io_virtual_file_stats(NULL, NULL)t1,sys.dm_io_pending_io_requests as t2where t1.file_handle = t2.io_handle
  2. One session could have multiple requestsTo find top 10 total cpu consuming queries:SELECT TOP 10 SUM(query_stats.total_worker_time) AS &quot;Total CPU Time&quot;, SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS &quot;Avg CPU Time&quot;, MIN(query_stats.statement_text) AS &quot;Statement Text&quot;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_statsGROUP BY query_stats.query_hashORDER BY 1 DESC;GO