リソースグラフの見方
cactiとgrafanaのグラフの見方について調べました。
cactiグラフの見方
まずグラフを見るときは長いスパンでの確認と単位に気を付けること
サーバステータス・OS系
- CPU Utilization
- コアごとにCPU使用率を表示させる
- Context Switches
- サーバ側がカウンタなので、前回の処理からの差分を描画
- 「Context Switches」はCPUでの処理対象プロセスなどの切り替え回数を示している。
- プロセスの並列度が高く単位時間あたりの処理が多いシステムでは、値が大きくなる。
- Forks
- サーバ側がカウンタなので、前回の処理からの差分を描画
- 「Forks」はプロセス処理であるForkの実行回数を示している。
- プロセスの生成はCPUコストのかかる処理。
- このグラフの値が常時大きい場合には、無駄なプロセス生成や外部プロセス呼び出しをしていないか、 必要だとしても、それをライブラリ呼び出しに変更できないか要検討
- Interrupts
- サーバ側がカウンタなので、前回の処理からの差分を描画
- 「Interrupts」はネットワーク送受信などによる割り込みの数
- ネットワーク送受信が多かったりすると増える。
- Load Average
- サーバ側の値をそのまま表示
- 1 Minute Average:データ取得時点から直近1分間の実行街キュー数の平均値
- 5 Minute Average:データ取得時点から直近5分間の実行街キュー数の平均値
- ロードアベレージの値を読み解くのが難しいため、性能面の指標としては使うことができない。
- 値の変化は状況の変化を表している。 負荷の指標としては、そのシステムが提供するサービス(HTTPなどの)応答時間をチェックする 性能の限界を越えると一気にロードアベレージの値が跳ね上がる。 急激な変化があった場合には、他の指標と見比べて、ボトルネックが発生していないか確認する。 ロードアベレージが高いから処理が遅くなることはありえず、処理がおそくなっていることがロードアベレージとして現れるという指標
- Memory
- ディスク関連のグラフ
- Disk Elapsed IO Time (ms)
- サーバ側がカウンタになっているので、前回の処理からの差分を描画
- IO Time:I/O時間
- IO Time Weighted:I/O総所要時間
- 「IO Time」に対して「IO Time Weighted」が大きい場合、ディスクI/Oに対して性能が不足している。
- Disk Operations
- サーバ側がカウンタになっているので、前回の処理からの差分を描画
- Reads:ディスク読み込み要求数
- Reads Merged:マージされたディスク読み込み要求数
- Writes:ディスク書き込み要求数
- Writes Merged:マージされたディスク書き込み要求数
- 「Reads」+「Writes」=「Io Ops」
- 「Merged」はmergeされたI/O要求数
- I/O処理を効率化するためにサーバがI/O要求をまとめることがある。
- 基本的なI/O要求数は「Reads」と「Writes」で確認でき、「Merged」を見つけることで効率化の程度が確認できる
- Disk Read/Write Time
- サーバ側がカウンタになっているので、前回の処理からの差分を描画
- Time Spent Reading 読み込みに要した時間
- Time Spent Reading 書き込みに要した時間
- Disk Sectors Read/Written
- Sectors Read:読み込みセクタ数
- Sectors Written:書き込みセクタ数
- Disk Space
- Used:利用中のディスク容量
- Total:全容量
- TCP Connection
- サーバの値をそのまま表示
- 「ESTABLISHED or CLOSE-WAIT」「ESTABLISHED」ステータスのソケット数、「CLOSE_WAIT」ステータスのソケット数
- ESTABLISHED や CLOSE-WAITはプロセスがアタッチされた状態のため、
- この数が大きいということはサーバ側の処理の並列数が高い
- Network Traffic
- サーバ側がカウンタで、前回の処理からの差分を描画
- Inbound Inbound Traffic(受信)
- Outbound Outbound Traffic(送信)
- ネットワーク帯域利用量
- 数値が頭うちになっていれば、ネットワーク帯域不足
- APC cache purges
- ※Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組み
- ファイルキャッシュと、ユーザのキャッシュでAPCがキャッシュを削除したサイズ
- APC file cache hits and misses
- APC file cache memory
- APC user cache hits and misses
- Hits:ユーザキャッシュのヒット率
- Misses:ユーザキャッシュのミス率
- Apache Bytes
- Bytes Sent:送信バイト数
- Apacheが送信したバイト数
- Apache CPU Load
- ApacheのCPU負荷
- Apache Requests
- 発生したリクエスト数
- Apache Scoreboard
- Apache Workers
- Idle workers:アイドルなプロセス数
- Busy workers:ビジーなプロセス数 負荷が高い時間帯にIdleWorkersがゼロになる率が高い場合はMinSpareServersの値が小さいということになります。もっと大きい値にして、プロセス生成のオーバーヘッドを下げてやる必要があります。 負荷が高い時間帯にIdleWorkersが大きな値を示している場合はプロセス=メモリーが無駄使いされていることになりますから、MinSpareServersをもっと小さい値にします。その分のメモリーをバッファキャッシュ等に回してほうがよい。 mod_statusでapacheの稼働状況を記録する
MySQL
ステータス関連のグラフ
- MySQL Command Counters※Max 500
- MySQL Connections※Max 120
- サーバ側の値をそのまま表示しているもの
- Max Connections:設定上の最大コネクション数
- 起動して以来の最大同時コネクション数
- Max Used Connections:最大同時接続コネクション数
- Threads Connected:接続中のコネクション数
- 同時接続数 コネクションプールを使うと「Threads Connected」は多いものの。Connections」は少なくなる。
- サーバ側がカウンタになっていて、前回の処理からの差分を描画しているもの
- Aborted Clients:接続できたが切断されたコネクションの数
- 接続が正常にできていたものの、「WAIT_TIMEOUT」や「INTERACTIVE_TIMEOUT」などにより、
- 切断されたコネクションの数
- Aborted Connects:接続できなかったコネクションの数
- Connections:接続されたコネクションの数
- MySQL Files and Tables※Max 2.0k
- サーバ側の値をそのまま表示
- Table Cache:テーブルキャッシュサイズ
- Open Tables:開いたことのあるテーブル数
- Open File:開いたことのあるファイル数
- Opend Tables:今開いているテーブル数
- MySQL Handlers※Max 600k
- サーバ側がカウンタになっているので、前回からの処理からの差分を描画
- Handler Write:「INSERT」の要求回数
- Handler Update:「UPDATE」の要求回数
- Handler Delete:「DELETE」の要求回数
- Handler Read First:最初のエントリがインデックスから読み込まれた回数
- この項目が多いときは、フルスキャンが多いかもしれないので要確認
- Handler Read Key:キー(インデックス)に基づく読み込み回数
- この項目が多いときは、適切にインデックスが付与されている証拠なのでいい傾向
- Handler Read Next:キー順序での次レコードの読み込み要求回数
- Handler Read Prev:キー順序での前レコードの読み込み要求回数
- NextとPrevは範囲指定をしてインデックスカラムをスキャンした場合に増える
- Handler Read Rnd:固定位置に基づくレコードの読み込み要求回数
- SQL結果をソートすることが多い場合に増える。テーブルスキャンが多いか、インデックスなしの「JOIN」が多く、インデックスが適切に付与できていない可能性がある。
- Handler Read Rnd Next:データファイルでの次レコードの読み込み要求回数
- この項目が多いときは、テーブルスキャンが多く、インデックスが適切に付与できていない可能性あり
- MySQL Network Traffic※Max i.0M
- MySQL Processlist※Max 4.0
- サーバ側の値をそのまま表示
- State Closing Tables:データをディスクにフラッシュしテーブルをクローズ中
- State Copying To tmp Table:メモリ上の一時テーブルにデータをコピー中
- State End:データ操作処理中
- SQL文の「ALERT TABLE」、「CREATE VIEW」、「DELETE」、「INSERT」、「SELECT」、「UPDATE」の終了処理(クリーンアップ前)の状態
- State Freeing Items:アイテム開放処理中
- クリーンアップの次の工程で、クエリキャッシュを含めたいくつかのアイテムを開放している状態です。
- State Init:SQL実行のための初期化中
- State Locked:ロックされている(ロック開放待ち)
- 「State」が「Locked」、「Table lock」、「Waiting for .*lock」の合算。
- ここでリストアップされていないものは「State Other」にすべて計上されている。
- State Login:ログイン(認証処理など)処理中
- State Preparing:クエリオプティマイザ実行中
- State Reading From Net:ネットワークからSQLを読み込み中
- State Sending Date:SELECTによるデータ読みこみ、またはクライアントへのデータ送信中
- State Sorting Result:一時テーブルを利用しないsort処理中
- State Statistics:SQL実行計画決定の為の統計処理中
- State Updating:UPDATEのためのデータ探索中またはUPDATE処理中
- State Writing To Net:ネットワークへデータを草子中
- State None:Stateなし
- State Other:その他
- その他のState。下記マニュアルに記載。多数ある。
- http://dev.mysql.com/doc/refman/5.6/en/general-thread-states.html
- MySQL Thread※Max 8
- サーバ側の値をそのまま表示しているものと、サーバ側がカウンタとなっていて、前回の処理からの差分を描画しているものがある。
- サーバ側の値をそのまま表示
- Thread Cache Size:スレッドキャッシュのサイズ
- Thread Connected:接続中(利用中)のスレッド数
- Threads Running:実行中ステータスのスレッド数
- Threads Cached:キャッシュされていたスレッド数
- 前回からの差分を描画
- Threads Created:生成されたスレッド数 「Threads Created」が高い値を示し続けるなら、 「Thread Cache Size」を増やすと処理が効率化できるかもしれない。
- サーバ側の値をそのまま表示しているものと、サーバ側がカウンタとなっていて、前回の処理からの差分を描画しているものがある。
- MySQL Transaction Handler※Max600
性能関連のグラフ
- MySQL Query Cache※Max 10k
- サーバ側の値をそのまま表示
- Qcache Queries In Cache:キャッシュに格納されているSQL数
- サーバ側がカウンタになって、前回の処理からの差分を描画
- サーバ側の値をそのまま表示
- MySQL Query Cache Memory
- サーバ側がカウンタで前回の処理からの差分を描画
- クエリキャッシュではブロック長は可変なので、「Qcache Free Memory」が多くも、
- 「Qcache Free Blocks」が少ないと、キャッシュできるSQL数は少なくなる。
- Qcache Cache Size:クエリキャッシュのサイズ
- Qcache Free Memory:クエリキャッシュの空き容量
- Qcahce Total Blocks:クエリキャッシュの総ブロック数
- Qcache Free Blocks:クエリキャッシュの空きブロック数
- My Select Types
- サーバ側がカウンタで前回の処理からの差分を描画
- Select Full Join:インデックスを利用しないJOINの数
- Select Full Range Join:関連テーブルで範囲検索したJOINの数
- Select Range:ファーストテーブルを範囲検索した部分を利用したJOINの数
- Select Range Check:インデックスなしのJOINの数
- Select Scan:ファーストテーブルでフルスキャンを実行したJOINの数 Select Full JoinとSelect Range Checkが0でない場合は、インデックスを見直す。
- MySQL Sorts
- サーバ側がカウンタで前回の処理からの差分を描画
- Sort Rows:ソートしたレコード数
- Sort Range:範囲指定ソートの回数
- Sort Merge Passes:ソートで必要としたマージパスの回数
- Sort Scan:テーブルスキャンでソートした回数
- MySQL Table Locks
- サーバ側がカウンタで前回の処理からの差分を描画
- Table Locks Immediate:テーブルロックを直ちに実行した回数
- Table Locks locks Waited:テーブルロックを実行するとき待ちが発生した回数
- Slow Queries:スロークエリの数 テーブルロックが発生すると処理の並列度が著しく下がるため、「Table Locks Waited」が0になるようにする。
- MySQL Temporary Objects
- サーバ側がカウンタで前回の処理からの差分を描画
- Created Tmp Tables:作成した一時テーブルの数
- Created Tmp Disk Tables:ディスク上に作成した一時テーブルの数
- Created Tmp File:作成した一時ファイルの数 「Created Tmp Disk Tables」に計上される一時テーブルは、 一時テーブルのサイズが「tmp_table_size」を越えた場合にディスクに書き出されるもの。 「Created Tmp File」に計上される一時ファイルは「sort_buffer_size」を 越える大きな「ORDER_BY」や「GROUP_BY」により作成されます。
InnoDB関連のグラフ
- InnoDB Buffer Pool Activity
- サーバ側がカウンタで前回の処理からの差分を描画
- Pages Created:作成されたページの数
- Pages Read:読み込まれたページの数
- Pages Written:書き込まれたページの数
- デフォルト1ページ16KB
- InnoDB Buffer Pool
- サーバ側の値をそのまま表示
- Pool Size:バッファプールのサイズ(ページ数)
- Database Pages:データがあるページ数
- Free Pages:空きページ数
- Modified Pages:書き換えが発生したダーティページ数
- 単位がページ数で、デフォルトは1ページ16KB。
- InnoDB I/O
- サーバ側がカウンタで前回の処理からの差分を描画
- Fire Reads:OSでの読み込みI/O実行回数
- Fire Writes:OSでの書き込みI/O実行回数
- Log Reads:log書き込みI/O実行回数
- Fire Fsysncs:OSでのfsyncs実行回数
- InnoDB I/O
- サーバ側の値をそのまま表示
- このグラフの数値すべてが0でない場合、ディスクI/Oがボトルネックになっている可能性がある。InnoDB I/Oグラフと併せて確認する
- Pending Aio Log Ios:insert bufferの非同期ログでの待ちI/O数
- Pending Aio Sync Ios:insert bufferの非同期syncでの待ちI/O数
- Pending Chkp Writes:チェックポイントでの待ち
- Pending Ibuf Aio Reads:insert bufferの非同期ログ読み込みでの待ちI/O数
- Pending Log Flushes:ログフラッシュでの待ち
- Pending Log Writes:ログ書き込みでの待ち
- Pending Normal Aio Log Reads:通常の読み込み非同期I/Oでの待ち
- Pending Normal Aio Log Writes:通常の書き込み非同期I/Oでの待ち
- Pending Buf Pool Flushes:バッファプールフラッシュでの待ち
- InnoDB Insert Buffer
- サーバ側がカウンタで前回の処理からの差分を描画
- Ibuf Inserts 実行した書き込み要求数
- Ibuf Merged マージされたI/O要求数
- Ibuf Merges マージ処理回数
- InnoDB Lock
- サーバ側がカウンタで前回の処理からの差分を描画とサーバ側の値をそのまま表示のものがある
- サーバ側がカウンタで前回の処理からの差分を描画
- Innodb Log Buffer Size:ログバッファのサイズ
- Unflushed Log:ログから書き出されていないデータ量
- サーバ側の値をそのまま表示のものがある
- Log Bytes Written:ログに書き込まれたデータ量
- Log Bytes Flushed:ログから書き出されたデータ量
- InnoDB Row Operations
- サーバ側がカウンタで前回の処理からの差分を描画
- Row Read 読み込まれた行数
- Rows Delete 削除された行数
- Rows Updated 更新された行数
- Rows Inserted 挿入された行数
- InnoDB Semaphores
- サーバ側がカウンタで前回の処理からの差分を描画
- SQL文の「SHOW ENGINE INNNODB STATUS」で取得する「SEMAPHORES」の値
- Spin Rounds スピンロック獲得のためのラウンド数
- Spin Waits スピンロック獲得待ち
- Os Waits OSロック獲得待ち数
- InnoDB Transactions
- MyISAM Indexes
- サーバ側がカウンタで前回の処理からの差分を描画
- Key Read Requests キャッシュからのキーブロックの読み込み要求数
- Key Reads ディスクからのキーブロックの読み込み回数
- Key Write Requests キャッシュにキーブロックを書き込んだ要求数
- Key Writes ディスクへのキーブロックの書き込み回数
- SQL文の「SHOW GLOBAL STATUS」で取得する値
- キャッシュミス率は「Key Reads」/「Key Read Requests」で計算
- 「Key Reads」がほぼ0になるよう調整する
Grafanaの見方
- Table Locks
- cactiと同じ
- Processlist
- cactiと同じ
- MySQL Threads
- cactiと同じ
- query cache
- cactiと同じ
- query cache memory
- cactiと同じ
- InnoDB Log
- cactiと同じ
- files and tables
- cactiと同じ
- temporary objects
- cactiと同じ
- sorts
- cactiと同じ
- InnoDB insert buffer
- cactiと同じ
- InnoDB Rows
- cactiと同じ
- MySQL Join/Scan
- cactiと同じ
- InnoDB Buffer Pool Activity(Pages)
- cactiと同じ
- InnoDB Row Lock Time
- InnoDB Row Lock Time
- InnoDB Row Lock Waits
- InnoDB Row Lock Waits
- MySQL Capacity
- Percentage Of Connectionsf
- Percentage Of Buffer Pool
- InnoDB Buffer Pool Efficiency
- InnoDB Current Lock Waits
- innodb lock wait secs
- MySQL Command
- Com_insert
- Com_update
- Com_delete
- Com_replace
- Qcache_hits
- Com_select
- Com_update multi
- Com_delete multi
- Com_set_option
- Questions"
Com_xxx ステートメントカウンタ変数は、それぞれの xxx ステートメントが実行された回数を示します。
ステートメントのタイプごとにステータス変数が 1 つあります。たとえば、Com_delete および Com_update はそれぞれ DELETE および UPDATE ステートメントをカウントします。
Com_update multi
とCom_delete multi
は複数テーブル構文を使用する DELETE および UPDATE ステートメントに適用されます。
- 以下は
SHOW ENGINE INNODB STATUS\G
でも見れるステータス - なぜあなたは SHOW ENGINE INNODB STATUS を読まないのか
- InnoDB I/O
- cactiと同じ
- InnoDB Transactions
- cactiと同じ
- InnoDB I/O Pending
- InnoDB Buffer Pool (Pages)
- cactiと同じ
- InnoDB checkpoint age
- uncheckpointed bytes
- InnoDB Transactions Active / Locked
- current transactions
- read views
- active transactions
- 現在処理中のトランザクション
- InnoDB Memory Allocation
- additional pool alloc
- total mem alloc
- Insert Buffer Usage
- cell_count
- userd_cells
- free_cells
- InnoDB Adaptive Hash Index
- Hash Index Cells Total
- Hash Index Cells Used