SlideShare a Scribd company logo
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 (20)

PDF
45分で理解する SQL Serverでできることできないこと
Insight Technology, Inc.
 
PPT
Cassandraのしくみ データの読み書き編
Yuki Morishita
 
PDF
MySQL Fabricでぼっこぼこにされたはなし
yoku0825
 
PDF
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
Insight Technology, Inc.
 
PDF
簡単!AWRをEXCELピボットグラフで分析しよう♪
Yohei Azekatsu
 
PDF
SQL Server パフォーマンス問題対処 Deep Dive
Koichiro Sasaki
 
PDF
Always on 可用性グループ 構築時のポイント
Masayuki Ozawa
 
PDF
SQL serverのデータ破損に備える
okumar savurou
 
PDF
SQL Server パフォーマンスカウンター
Masayuki Ozawa
 
PDF
SQL Server チューニング基礎
Microsoft
 
PDF
まずやっとくPostgreSQLチューニング
Kosuke Kida
 
PDF
Sql server よく聞く設定とその効果
Masayuki Ozawa
 
PDF
SQL Server中級者のための実践で使えるかもしれないTips集
Sho Okada
 
PDF
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Masayuki Ozawa
 
PPTX
Oracle Database (CDB) on Docker を動かしてみる
オラクルエンジニア通信
 
PPTX
Sql server 運用 101
Masayuki Ozawa
 
PDF
Sql server 2016 always on 可用性グループ new features
Masayuki Ozawa
 
PPTX
SQL Server Performance Tuning Essentials
Masaki Hirose
 
PPTX
Sql server これだけはやっておこう 最終版
elanlilac
 
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
45分で理解する SQL Serverでできることできないこと
Insight Technology, Inc.
 
Cassandraのしくみ データの読み書き編
Yuki Morishita
 
MySQL Fabricでぼっこぼこにされたはなし
yoku0825
 
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
Insight Technology, Inc.
 
簡単!AWRをEXCELピボットグラフで分析しよう♪
Yohei Azekatsu
 
SQL Server パフォーマンス問題対処 Deep Dive
Koichiro Sasaki
 
Always on 可用性グループ 構築時のポイント
Masayuki Ozawa
 
SQL serverのデータ破損に備える
okumar savurou
 
SQL Server パフォーマンスカウンター
Masayuki Ozawa
 
SQL Server チューニング基礎
Microsoft
 
まずやっとくPostgreSQLチューニング
Kosuke Kida
 
Sql server よく聞く設定とその効果
Masayuki Ozawa
 
SQL Server中級者のための実践で使えるかもしれないTips集
Sho Okada
 
Sql serverデータアクセスの基本動作。荒ぶった方法で確認してみよう
Masayuki Ozawa
 
Oracle Database (CDB) on Docker を動かしてみる
オラクルエンジニア通信
 
Sql server 運用 101
Masayuki Ozawa
 
Sql server 2016 always on 可用性グループ new features
Masayuki Ozawa
 
SQL Server Performance Tuning Essentials
Masaki Hirose
 
Sql server これだけはやっておこう 最終版
elanlilac
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 

Viewers also liked (11)

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

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

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

More from Insight Technology, Inc. (20)

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

Recently uploaded (10)

PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PPTX
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
2023年版Web3技術の理想と現実
Syuhei Hiya
 
PPTX
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
新卒・中途採用者向け採用ピッチ資料2025年7月版(20250702).pptx
Official74
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
2023年版Web3技術の理想と現実
Syuhei Hiya
 
オープンソース界隈の利用者や技術者から見たオープンソースEDAとは? What is open source EDA from the perspecti...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 

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

  • 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

  • #17: 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
  • #24: 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