CubicLouve

Spring_MTの技術ブログ

サーバーの状態やMySQLの状態の指標のまとめ

指標に関していつもググってばっかりいたので、まとめてみました。

ツッコミ大歓迎。

CPU usage

name detail
User ユーザ空間(アプリケーション)でCPUが使われた時間の割合
Nice 優先度を変更された(nice値が変更された)プロセスにより、ユーザ空間でCPUが使われた時間の割合
System カーネル空間でCPUが使われた時間の割合
Idle CPUが何も処理をせずに待機していたCPUの時間の割合(ディスクI/O待ち以外)
Wait(iowait) CPUがディスクI/O、またはネットワークI/Oの結果を待っていた時間の割合(I/O処理中で、その終了を待機している時間)
Intr 割り込み
SoftIRQ ソフト割り込み
Steal 仮想サーバがCPUを使って待たされていた時間の割合

http://blog.suusuke.info/2011/10/24/365/

hiboma/Linuxカーネル解読室-3-1.md at master · hiboma/hiboma · GitHub

yakst.com

O'Reilly Japan - 詳解 システム・パフォーマンス6.3.6 6.6.3 も合わせて参照

Memory Usage

name detail
used 使用している物理メモリ量
buffer ファイルなどのメタデータをキャッシュしている物理メモリ量
cached ページキャッシュに使用されているメモリ量
avail real 利用可能な物理メモリの量
total real 総物理メモリの量
used swap Swap領域で使用している量

cached も buffers も空きメモリの一部 状況に応じてflushされる

Nginx

name detail
Reading nginxはリクエストヘッダーを読み込んでいる数
Writing nginxはリクエストボディーを読み込んでいる、リクエストを処理中、またはクライアントへ返信している数。upstreamから結果を受け取ってクライアントに返し中なのか、upstreamからの回答待ちであるかが区別されてないっぽいのが困る。
Waiting リクエスト処理を待っているクライアントのコネクション数 (idle client connections waiting for a request.) keep-aliveの接続数

http://wiki.nginx.org/HttpStubStatusModule#stub_status

MySQL

変数の参照はここ

MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.6 サーバーステータス変数

MySQL Threads

name detail
Cached キャッシュされているスレッド数(スレッドは使いまわされる)
Connected 現在の接続数
Running スリープ状態になっていないスレッドの数

Threads_created 接続を処理するために生成されたスレッド数(この値が増えまくるなら、cached が足りていない)

Threads_cached + Threads_connected が thread_cache_sizeの値より小さければ想定内。

MySQLのスレッドとか接続数とか - @bayashi Wiki

MySQL Processlist

name detail
State Closing Tables 変更されたテーブルデータをディスクにフラッシュし、使用されたテーブルを閉じているスレッド数
State Copying To Tmp Tables モリー内の一時テーブルにコピーしているスレッド数
State End ALTER TABLE、CREATE VIEW、DELETE、INSERT、SELECT、または UPDATE ステートメントの最後、ただしクリーンアップの前に発生しまる状態のスレッド数
State Freeing Items コマンドの実行を完了したスレッド数、通常、この状態のあとは cleaning up になります
State Init ALTER TABLE、DELETE、INSERT、SELECT、または UPDATE ステートメントの初期化の前に発生する状態のスレッド数
State Locked 別のクエリーによってロックされているスレッド数
State Login クライアントが正常に認証されるまでの初期状態のスレッド数
State Reading From Net ネットワークからパケットを読み込んでるスレッド数
State Sending Data SELECT ステートメントのために行を作成し、また、クライアントにデータを送っているスレッド数
State Sorting Result
State Statistics クエリー実行計画を開発する統計を計算しているスレッド数
State Updating 更新する行を探していて、それらを更新しているスレッド数
State Writing To Net ネットワークにパケットを書き込んでいるスレッド数
State None Stateのないスレッド数 例えば SLEEP中のスレッド
State Other

http://mysql.stu.edu.tw/doc/refman/5.1-olh/ja/general-thread-states.html

MyISM Indexes

name detail
Key Read Requests
Key Reads
Key Writes Requests
Key Writes

MySQL Handlers

クエリの I/O 動作

name detail
Handler Write INSERTの回数
Handler Update UPDATEの回数
Handler Delete DELETEの回数
Handler Read First テーブルやインデックスの全件検索(インデックスフルスキャン)の際にまず最初に先頭レコードの取得するが、その回数。フルスキャンが多いとこの回数が増える。(要チューニング)
Handler Read Key インデックスに基づく読み込み回数。これが多い場合は適切にインデックスが貼られている。
Handler Read Next インデックスに基づいて行を特定した後、後続の行を読んだ回数。範囲指定のインデックススキャンの場合に増えます。
Handler Read Prev インデックスに基づいて行を特定した後、その前の行を読んだ回数。範囲指定のインデックススキャンの場合に増えます。
Handler Read Rnd 固定位置に基づくレコード読んだの回数(handler::rnd_pos()が呼ばれた回数)。固定位置に基づくレコードの読み込みとは、Random Readのこと。結果のソートを必要とするクエリを多く実行すると、この値が大きくなる。(要チューニング)
Handler Read Rnd Next データファイルでの次のレコードを読み取った回数。 テーブルスキャンが多く実行されると、この値が大きくなる。(要チューニング)

www.percona.com

MySQL Select Types

name detail
Select Full Join インデックスのないカラムで JOINした回数
Select Full Range Join 範囲指定の効果はあるがインデックスは使わず JOINした回数
Select Range WHERE などの指定によって範囲が限定された探索を行った回数
Select Range Check インデクッスなしのJOIN数
Select Scan テーブル(またはインデックスでも)の先頭行から全件検索(スキャン)をした回数

JOINに関してはEXPLAINしてtypeがeq_refになるようにする。

MySQL Sorts

name detail
Sort Rows ソートしたレコード数
Sort Range 範囲検索ソートの回数
Sort Merge Passes ソートで必要としたマージパスの回数
Sort Scan テーブルスキャンでソートした回数

MySQL Temporary Objects

name detail
Created Tmp Tables 作成した一時テーブルの数
Created Tmp Disk Tables ディスク上に作成した一時テーブルの数
Created Tmp Files 作成した一時ファイルの数

sort_buffer_sizeを超える大きなORDER BYなどで作成される。

漢(オトコ)のコンピュータ道: Using filesort

MySQL Transaction Handle

name detail
Handler Commit コミットの要求数
Handler Rollback ロールバックの要求数
Handler Savepoint セーブポイントの要求数
Handler Savepoint Rollback セーブポイントロールバックの要求数

Cache hit rate

name detail
key cache
query cache
table lock immediate
thread cache
tmp table on memory

Dirty page rate

buffer pool の page のうち disk に flush されてない page の比率

ここが増加していると、diskへの書込みが追いついていない

https://dev.mysql.com/doc/refman/5.6/ja/glossary.html#glos_dirty_page

Buffer Pool Activity

name detail
Page Created 作成されたページの数
Page Read 読み込まれたページの数
Page Written 書き込まれたページの数

Checkpoint Age

Current Lock Wait

トランザクションのロック開放待ち時間の合計秒数

InnoDB I/O

InnoDB I/O Pending

Lock Structures

開放まちLock structの数

InnoDB Log

name detail
Innodb Log Buffer Size ログバッファのサイズ
Log Byte Written ログに書き込まれたデータ量
Log Byte Flushed ロクから書き出されたデータ量
Unflushed Log ログから書き出されていないデータ量

Row Lock Time

行ロック獲得のための所用総時間(msec)

Row Lock Waits

行ロック獲得待機回数

InnoDB Tables In Use

name detail
InnnoDB Tables In Use 実行中のトランザクションが利用しているテーブル数の合計数
InnnoDB Locked Tables 実行中のトランザクションがロックしているテーブル数の合計数

InnoDB Transactions

name detail
InnnoDB Transactions 生成されたトランザクション
History List undo領域にある未破棄のトランザクション

参照

mpstat

CPUごとの使用状況 -P ALLですべてのコアの情報を表示する

vmstat