Innotop マニュアル › マニュアル


名前

innotop - MySQL および InnoDB のトランザクション/ステータス モニター


概要

普段のサーバ監視をするには:

 innotop

ファイルからInnoDB ステータス情報を監視するには:

 innotop /var/log/mysql/mysqld.err

innotopをパイプ アンド フィルター設定で非対話的に実行するには:

 innotop --count 5 -d 1 -n

特定のユーザ名とパスワードを使って他のシステム上のデータベースを監視するには:

 innotop -u <username> -p <password> -h <hostname>


説明

innotop はMySQLサーバを監視します。各モードはサーバ内で起きている異なる側面を表示します。例えば、リプリケーションの監視、クエリ、トランザクションのためのモードがあります。innotop は定期的にデータを更新します。つまり、ビューの更新があります。.

innotopにはパワーユーザにとって多くの機能がありますが、実質的には何も設定無しに開始および実行することができます。ちょうど始めたばかりの場合は、QUICK-STARTを見てください。状況に敏感なヘルプについては、innotopの実行中のいつでも '?' を押します。


QUICK-START

innotopを開始するには、ターミナルあるいはコマンドプロンプトを開きます。システムにinnotopをインストールした場合は、単に"innotop"をタイプしエンターを押せるはずです; そうでなければ、innotopのディレクトリに変更し"perl innotop"をタイプしなければいけないでしょう。

オプションを指定しない場合、innotopはローカルホスト上のMySQLサーバに他の接続パラメータのためにmysql_read_default_group=client を使って接続しようとするでしょう。異なるユーザ名とパスワードを指定しなければならない場合は、それぞれ -u および -p オプションを使ってください。他のホストのMySQLデータベースを監視するには、-h オプションを使ってください。

接続した後で、innotopは以下のようなものを表示する筈です:

 [RO] Query List (?for help) localhost, 01:11:19, 449.44 QPS, 14/7/163 con/run
 
 CXN        When   Load  QPS    Slow  QCacheHit  KCacheHit  BpsIn    BpsOut
 localhost  Total  0.00  1.07k   697      0.00%     98.17%  476.83k  242.83k
 CXN        Cmd    ID         User  Host      DB   Time   Query
 localhost  Query  766446598  test  10.0.0.1  foo  00:02  INSERT INTO table (

('main innotop'を実行中の場合、ターミナルに合うように、この例は右で切り詰められます)

サーバが忙しければ、もっと多くの出力を見るでしょう。スクリーン上の最初の行に注意してください。これは読み込み専用がtrue([RO])に設定されており、どのモードに入っているか、どのサーバに接続しているかを知らせます。キー入力により他のモードに切り替えることができます; 例えば、'T'を押してInnoDBトランザクションのリストに切り替えます。

'?'を押して現在のモードでどのキーが有効であるかを見ます。それらのいずれかのキーをクリックをし、innotopは要求された挙動あるいは更なる入力のために入力を促します。システムが Term::ReadLine をサポートしている場合、TABおよび他のキーを使って自動補完および入力の編集をすることができます。

innotop を抜けるには、'q'を押します。


オプション

innotop は設定ファイルを使ってほとんど編集することができますが、設定オプションの幾つかはコマンドラインからもたらすことができます。InnoDBのステータス出力について監視するためにファイルを指定することもできます; 詳細はファイルの監視を見てください。

オプションのプリフィックス --noを使って、幾つかのオプションを打ち消すことができます。例えば、--noinc (or --no-inc) は--inc を打ち消します。

--color

端末の色付けを有効または無効にします。 設定ファイルセットアップに対応します。

--config

読み込む設定ファイルを指定します。このオプションは一時的なもので、つまり設定ファイル自身には保持されません。

--count

終了する前に指定した回数(tick)だけリフレッシュします。各リフレッシュはinterval 秒一時停止した後、MySQL接続からデータを要求しそれを端末に出力します。

--delay

tick(refresh)間の停止する時間を指定します。設定オプションintervalに対応します。

--help

コマンドラインの使い方の要約を出力し終了します。

--host

接続するホスト

--inc

innotopが絶対数あるいは相対数(以前の値からのオフセット)のどちらを表示するかを指定します。設定オプションのstatus_incに対応します。

--mode

innotopがどのモードで開始するかを指定します。設定オプションのmodeに対応します。

--nonint

非対話型操作を有効にします。詳細は非対話型操作 を見てください。

--password

接続に使用するパスワード。

--port

接続に使用するポート。

--skipcentral

中心となる設定ファイルを読みません。

--timestamp

-nモードでは、出力の全画面時、あるいはもしオプションが2回与えられていれば各行の開始時に、タイムスタンプを書き込みます。書式はタイムフォーマットの設定変数によって制御されます。

--user

接続に使用するユーザ。

--version

バージョン情報を出力し終了します。

--write

設定オプションreadonly を 0 に設定し、開始時に設定ファイルがロードされていない場合は、終了時にinnotopに実行中の設定を ~/.innotop/innotop.conf に書き込ませます。


ホットキー

innotopは対話的で、キー押下によって制御します。

  • 大文字キーはモードを切り替えます。

  • 小文字キーは現在のモードでの幾つかのアクションを開始します。

  • 他のキーは設定の変更あるいはinnotopライセンスの表示のように特別なことを行います。

いつでも'?' を押して現在のアクティブなキーとそれらが何をするかを見ることができます。


モード

innotopの各モードは監視しているサーバからの特定の種類のデータを処理および表示することができます。大文字キーを使ってモードを切り替えます。以下はアルファベット順の各モードの簡単な説明です。モードを切り替えるには、以下のリストの中で先頭に書かれているキーを押します:

B: InnoDB バッファー

このモードはInnoDBのバッファプール、ページ統計、入力バッファおよび順応性のあるバッファについての情報を表示します。データは SHOW INNODB STATUS に由来します。

このモードには、デフォルトで buffer_pool, page_statistics, insert_buffers および adaptive_hash_index テーブルを含みます。

C: コマンドの要約

このモードはmytopのコマンド要約モードに似ています。cmd_summary テーブルを表示し、以下のように見えます:

 Command Summary (? for help) localhost, 25+07:16:43, 2.45 QPS, 3 thd, 5.0.40
 _____________________ Command Summary _____________________
 Name                    Value    Pct     Last Incr  Pct    
 Select_scan             3244858  69.89%          2  100.00%
 Select_range            1354177  29.17%          0    0.00%
 Select_full_join          39479   0.85%          0    0.00%
 Select_full_range_join     4097   0.09%          0    0.00%
 Select_range_check            0   0.00%          0    0.00%

コマンド要約テーブルはSTATUS_VARIABLESからの変数を抜粋して構築されます。変数は数値でcmd_filter設定変数で指定されるプリフィックスに一致しなければなりません。上で示したように、変数は値の降順でソートされ、最後の変数と比較されます。パーセントのカラムはテーブル内の全ての変数の総数のパーセンテージで、変数の相対的な重みを見ることができます。

例では、プリフィックスが"Select_"の場合を示しています。デフォルトのプリフィックスは "Com_" です。's' キーを使ってプリフィックスを選択することができます。

どちらかといえば、メモリとniceの形式を使って SHOW VARIABLES LIKE "prefix%" を実行するのに似ています。

値は全てのサーバを横断して集約されます。Pct カラムは複数のサーバを横断して正しく集約できなかったものを示します。これはグルーピングアルゴリズムの良く知られた制限で、将来には修正されるかも知れません。

D: InnoDB デッドロック

このモードは最近のInnoDBのデッドロックに関係するトランザクションを示します。二つ目のテーブルは各トランザクションが持ち、待っているロックを示します。デッドロックはwait-forグラフの中での循環によって起こされ、デッドロック情報が捨てられるまで、二つのロック状態で一つが待っているはずです。

InnoDB はデッドロック情報を、SHOW INNODB STATUS 出力の中で他の情報の前に出力します。多くのロックがある場合は、デッドロック情報はとても大きくなることになり、SHOW INNODB STATUS 出力のサイズの制限があります。大きなデッドロックが出力全体を埋める、あるいは切り捨てることがあり、他の情報を全く見れなくなることを防ぎます。他のモード、例えば T モードでinnotopを実行して、突然何も見れなくなる場合、デッドロックが必要なデータを消し去っていないかを問い合わせたいかも知れません。

もしある場合、大きなデッドロックを置き換えるために小さなデッドロックを作ることができます。小さなデッドロックを使って大きなデッドロックを'一掃'するために'w'キーを使います。接続のためのデッドロックテーブルを定義していない場合は動作しないかも知れません (SERVER CONNECTIONSを見てください)。

大きなデッドロックが小さなデッドロックで置き換えられる必要がある場合に、innotopが自動的に検知するように設定することもできます ( auto_wipe_dlを見てください)。

このモードは deadlock_transactionsdeadlock_locks テーブルをデフォルトで表示します。

F: InnoDB 外部キーエラー

このモードは、InnoDBの外部キーエラーが発生したテーブル、何時および誰がどのクエリで起きたかなどの最後の情報を表示します。

InnoDBは多くの様々な外部キーエラーメッセージを持ち、それらの多くは単純にパースするのが難しいです。innotop doesn't always do the best job here, but there's so much code devoted to parsing this messy, unparseable output that innotop is likely never to be perfect in this regard. 見たいものをinnotopが表示しない場合は、状況テキストを直接みてください。

このモードはデフォルトで fk_error テーブルを表示します。

I: InnoDB I/O Info

このモードは、InnoDBのI/Oスレッド、待っているI/O、ファイルI/Oなど、そしてログ統計を表示します。デフォルトでは、io_threads, pending_io, file_io_misc および log_statistics テーブルを表示します。

L: ロック

このモードは現在のロックの情報を表示します。現在のところ、InnoDBのロックだけがサポートされます。デフォルトではトランザクションが待っているロックのみを見るでしょう。この情報はInnoDBステータステキストの TRANSACTIONS セクションから来ています。とても忙しいサーバを持っている場合、頻繁なlock waitを持つかも知れません; どのテーブルとインデックスがロックの"host spot"かを見るのに役立つでしょう。サーバがとてもうまく動いている場合は、このモードは何も表示しないはずです。

トランザクションが待っているロックだけでなく、現在持っているロックも監視するためにMySQLとinnotopを設定することができます。これはInnoDBロックモニターを使ってすることができます (http://dev.mysql.com/doc/en/innodb-monitor.html)。MySQLのマニュアルでは説明されませんが、以下の文を使ってロックモニターを生成すると innotopが使用する SHOW INNODB STATUS の出力にも影響します。

  CREATE TABLE innodb_lock_monitor(a int) ENGINE=INNODB;

マニュアルで示されるように、これはInnoDBに出力をMySQLファイルに約16秒ごとに出力するようにしますが、これはinnotopがパースおよび表示することができるロック情報を含む通常の SHOW INNODB STATUS 出力もそうします (これがドキュメントに示されていない特徴です)。

This means you can do what may have seemed impossible: to a limited extent (InnoDB truncates some information in the output), you can see which transaction holds the locks something else is waiting for. このモードでキーマッピングを使ってInnoDB ロックモニターを有効または無効にすることもできます。

このモードはデフォルトで innodb_locks テーブルを表示します。以下は、1つの接続が他の接続が持つロックを待つ場合の画面の例です:

 _________________________________ InnoDB Locks __________________________
 CXN        ID  Type    Waiting  Wait   Active  Mode  DB    Table  Index
 localhost  12  RECORD        1  00:10   00:10  X     test  t1     PRIMARY
 localhost  12  TABLE         0  00:10   00:10  IX    test  t1
 localhost  12  RECORD        1  00:10   00:10  X     test  t1     PRIMARY
 localhost  11  TABLE         0  00:00   00:25  IX    test  t1
 localhost  11  RECORD        0  00:00   00:25  X     test  t1     PRIMARY

最初の接続 ID 12 が test.t1のプライマリーキーのロックを待っていて、10秒間待っていることを見ることができます。2つ目の接続は、Waitingカラムが0のため待っていませんが、同じインデックスにロックを持っています。このことは接続11が接続12をブロックしていることを示します。

M: マスター/スレーブ リプリケーション 状況

このモードは 3つのテーブルの SHOW SLAVE STATUS と SHOW MASTER STATUS の出力を表示します。最初の2つはスレーブの状況を SQL と I/Oスレッド状況に分割し、最後の1つはマスター状況を表示します。スレーブテーブルから非スレーブサーバを除去、およびマスターテーブルから非マスターサーバを除去するためにフィルターが適用されています。

このモードはデフォルトで slave_sql_status, slave_io_status および master_status テーブルを表示します。

O: テーブルのオープン

このセクションは MySQLの SHOW OPEN TABLES コマンドからきています。デフォルトでは、1つ以上のクエリによって使われているテーブルを表示するためにフィルターされ、どのテーブルが'hot'であるかを素早く見ることができます。これを使ってどのテーブルが暗黙的にロックされるかも知れないかを推測するために使うことができます。

このモードはデフォルトで open_tablesモードを表示します。

U: ユーザ統計

このモードはPerconaのMySQLのenhancedバージョンが利用可能なデータを表示します。(XtraDBを使ったPerconaサーバとしても知られています)。厳密に言えば、"user statistics"と呼ばれるものを簡単に有効または無効にします。この機能はクライアント、スレッド、ユーザ、テーブル、そしてインデックスの状況を集め、それらをインデックス化して INFORMATION_SCHEMA tablesとして利用可能にします。それらはサーバが何をしているかを理解するために非常に貴重です。それらはMariDBでも利用可能です。

今のところサポートされる統計は、Perconaによって追加された TABLE_STATISTICS および INDEX_STATISTICS テーブルからのみです。3つのビューがあります: テーブルの統計、インデックスの統計(=キーを使って集約することができます)、それらの両方。

サーバはデフォルトではそれらの状況を集めません。有効にするには変数 userstat_running を設定する必要があります。's'キーを使って、Uモードのinnotopから簡単にこれをすることができます。

Q: クエリーリスト

このモードはmytopのクエリーリストモードとそっくりの SHOW FULL PROCESSLIST からの出力を表示します。このモードはInnoDBに関係する情報を表示しません。これはおそらく一般的な使い方のための最も有用なモードの一つでしょう。

サーバに関する一般的なステータス情報を表示する参考になるヘッダがあります。'h'キーを使ってそれをonおよびoffで切り替えることができます。デフォルトでは、innotopは動いていないプロセスとそれが所有するプロセスを隠します。'i'および'a'キーを使ってそれらをonおよびoffで切り替えることができます。

'e'キーを使ってこのモードからクエリを EXPLAIN することができます。これはクエリのフルテキスト、EXPLAINの結果、および新しいMySQLバージョンではEXPLAIN EXTENDEDからの最適化されたクエリの結果さえも表示します。innotop はEXPLAIN可能にするために特定のクエリを書き換えようともします。例えば、INSERT/SELECT 句が書き換え可能です。

このモードはデフォルトでq_headerprocesslist テーブルを表示します。

R: InnoDBの行の操作と手旗信号

このモードはInnoDBの行操作、行操作など、手旗信号、および待ち行列からの情報を表示します。デフォルトで row_operations, row_operation_misc, semaphores および wait_array テーブルを表示します。

S: 変数 & ステータス

このモードは秒間あたりのクエリのような統計を計算し、幾つかの異なる形式でそれらを出力します。絶対値、あるいは時間の刻みの間の増加値を表示することができます。

キーを押すことでビュー間を切り替えることができます。's'キーは画面が更新されるごとにvmstatの形式で1行を出力します。'g'キーは、いわばtloadのように同じ数のグラフへの表示を変更します。The 'v' key changes the view to a pivoted table of variable names on the left, with successive updates scrolling across the screen from left to right. num_status_sets 設定変数を使って画面に更新を配置するかを選択することができます。

対話型の操作では画面に合致するようにヘッダは省略されるかも知れません。You choose which variables to display with the 'c' key, which selects from predefined sets, or lets you create your own sets. 'e'キーを使って現在のセットを編集することができます。

このモードは他のモードのようになんらかのテーブルを実際には表示しません。代わりに、データを抽出および整形するためにテーブル定義を利用しますが、出力する前に特別な方法で結果を変換します。このためにvar_status テーブル定義を使用します。

T: InnoDB トランザクション

このモードはtopに似た形式でInnoDB モニターの出力からトランザクションを表示します。私がinnotopを書いた理由はこのモードです。

'k'および'x'キーを使ってクエリあるいはプロセスをkillすることができ、'e'あるいは'f'キーを使ってクエリをEXPLAINすることができます。InnoDBはトランザクション内の完全なクエリを出力せず、つまりクエリが切り捨てられた場合にはexplainは正しく動作しないかも知れません。

'h'キーを使って参考になるヘッダをonおよびoffに切り替えることができます。デフォルトでは、innotopは動いていないトランザクションとそれが所有するトランザクションを隠します。'i'および'a'キーを使ってこれをonおよびoffに切り替えることができます。

このモードはデフォルトでt_header および innodb_transactions テーブルを表示します。


INNOTOP STATUS

innotopが表示する最初の行はソートの"status bar"です。何が含まれるかは、モードと監視しているサーバによります。最初の数単語は常に[RO](readonlyが1に設定されている場合)で、Tモードでの"InnoDB Txns"のような innotopのモード、いつでもヘルプのための'?'を押すためのリマインダが続きます。

1台サーバ

最も簡単な場合は、1台のサーバを監視する場合です。この場合、接続名はステータス行の次にあります。これは接続を生成した時に与えた名前です -- ほとんどの場合はMySQLサーバのホスト名です。これにサーバのuptimeが続きます。

TあるいはBのようなInnoDBモードにいる場合、次の単語は"InnoDB"で、画面を描画するために使われる SHOW INNODB STATUS出力についての幾つかの情報が続きます。最初の単語は最後のSHOW INNODB STATUSからの秒数です。InnoDBが幾つかの秒間あたりの統計を計算するために使用します。次はInnoDBの出力が切り捨てられているかどうかを示すスマイリーです。スマイリーの顔が :-) の場合、全てがうまくいっています; 切捨てられていません。A :^| はトランザクションのリストがあまりに長いことを意味し、InnoDBはトランザクションのいくつかのみを出力しています。最後に、しかめっ面 :-( は、出力が完全ではないことを意味します。おそらくデッドロックによりあまりに多くのロック情報が出力されています (D: InnoDB Deadlocksを見てください)。

次の二つの単語は秒間あたりのサーバのクエリの数(QPS)と、どれだけの数のスレッド(接続)があるかを示します。最後に、行の最後にサーバのバージョン番号があります。

複数のサーバ

複数のサーバを監視している場合(SERVER CONNECTIONSを見てください)、ステータス行は各サーバについての詳細を表示しません。代わりに、有効な接続の名前を表示します。この場合もやはり、それらは指定した接続名であり、おそらくサーバのホスト名でしょう。エラーがある接続は行頭にびっくりマークがあります。

サーバのグループを監視している場合 (SERVER GROUPSを見てください)、ステータス行はグループの名前を表示します。グループ内のいずれかの接続にエラーがある場合、グループ名にエラーの無い接続の割合が続きます。

innotopのエラー処理についての詳細はERROR HANDLINGを見てください。

ファイルの監視

コマンドライン上でファイル名を指定した場合、innotopはどのサーバにも全く接続しないでしょう。InnoDBステータス出力のために指定されたファイルを監視し、データソースとしてそれを使うでしょう。'file'と呼ばれる1つの接続を常に表示するでしょう。それがサーバに接続しないために、監視しているサーバがどれだけ長く起動しているかを決定できません; つまり、サーバのuptimeをinnotopを開始してからの時間として計算します。


SERVER の管理

innotopは主としてサーバを監視および解析するためのモニターですが、サーバにコマンドを送ることもできます。最もよくある便利なコマンドはクエリのkillと、スレーブの停止と開始です。

Q: クエリリストT: InnoDB トランザクションモードから、接続をkill、あるいは新しいMySQLのバージョンではクエリをkillするが接続はkillしません、することができます。KILLコマンドを発行するために'k'を押下、あるいはKILL QUERYコマンドを発行するために'x'を押下します。innotopはkillするためのサーバ および/あるいは 接続IDをプロンプトします (入力に対して可能な選択が1つだけの場合、innotopはプロンプトしません)。innotop は最も長く実行しているクエリ、あるいは最も古い接続をあらかじめ選択します。'y'を使ってコマンドを承認します。

M: ますたー/スレーブ リプリケーション ステータス モードで、'a'および'o'キーを使ってスレーブを開始および停止することができます。一度にそれらのコマンドを多くのサーバに送信することができます。innotopは START SLAVE あるいは STOP SLAVE のデフォルトのコマンドの代理をしますが、1つのbinlogイベントか開始する時にスレーブがbinlogをスキップするために SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1 のように、実際にコマンドを編集し望むものを送信することができます。

You can also ask innotop to calculate the earliest binlog in use by any slave and issue a PURGE MASTER LOGS on the master. これには'b'キーを使用します。innotop will prompt you for a master to run the command on, then prompt you for the connection names of that master's slaves (there is no way for innotop to determine this reliably itself). innotop will find the minimum binlog in use by these slave connections and suggest it as the argument to PURGE MASTER LOGS.

U: ユーザ統計 モードでは、TABLE_STATISTICS とそれに似たものの統計データの収集を開始および停止するために's'キーを使うことができます。


SERVER 接続

'@'を使ってサーバ接続を生成する時に、innotopは以下のように一連の入力を尋ねます:

DSN

DSNはデータソース名で、サーバへの接続のために初期引数がDBIに渡されます。通常はこの形式です

 DBI:mysql:;mysql_read_default_group=mysql;host=HOSTNAME

このDSNは DBD::mysql driver に渡されるため、DNS内でドライバに渡すことができる全てのオプションの正確な詳細については、ドライバのドキュメントをhttp://search.cpan.org/dist/DBD-mysql/lib/DBD/mysql.pm で読むべきです。DBIについての詳細はhttp://dbi.perl.org/docs/、特にhttp://search.cpan.org/~timb/DBI/DBI.pmで読むことができます。

mysql_read_default_group=mysql オプションを使って、DBIドライバは UNIX-ish システム上の~/.my.cnf のようなMySQLオプションファイルを読み込みます。これを使って接続のためのユーザ名とパスワードを指定することを避けることができます。

InnoDB デッドロック テーブル

この任意の項目によって、innotopに慎重に小さなデッドロックを生成するために使うことができるテーブル名を伝えます(D: InnoDB Deadlocksを見てください)。このオプションを指定した場合は、テーブルが存在しないことを確認し、innotopがInnoDBストレージエンジンを使ってテーブルを生成および削除することができることを確実にする必要があります。 これを使うつもりが無い場合は、安全に省略あるいは単にデフォルトを受け入れることができます。

ユーザ名

innotopはユーザ名を指定したいかどうかを確認します。'y'とした場合は、ユーザ名の入力を促すでしょう。ユーザ名を指定するMySQLオプションファイルを持つ場合、ユーザ名を指定する必要はありません。

ユーザ名のデフォルトはinnotopを実行しているシステムのログイン名です。

パスワード

innotopはパスワードを指定したいかどうかを確認します。ユーザ名と同じように、パスワードは任意ですが、innotop設定ファイルにパスワードを保存したいかどうかを尋ねる追加の入力があります。設定ファイルに保存しない場合は、innotopは開始するたびにパスワードの入力を促すでしょう。innotop設定ファイル内のパスワードは全く暗号化されずに平文テキストで保存されます。

一度質問に答え終わると、サーバに接続されるはずです。しかし、innotopは1台のサーバを監視するように制限されていません; '@'キーを押すことで、多くのサーバ接続を定義しそれらを切り替えることができます。SWITCHING BETWEEN CONNECTIONSを見てください。


SERVER グループ

複数のMySQLインスタンスがある場合、それらを'all', 'masters' および 'slaves'のような名前付きのグループに入れることができ、innotopが全てを一緒に監視することができます。

'#'キーを使ってどのグループを監視するかを選択することができ、次のグループに切り替えるためにTABキーを押すことができます。現在のところグループを監視していない場合は、TABを押すことで最初のグループを選択します。

グループを作成するには、'#'を押し、新しいグループ名をタイプし、グループに含めたい接続の名前をタイプします。


接続間の切り替え

innotopはどのサーバを監視するかを素早く切り替えることができます。最も基本的な方法は'@'を押し、使用したい接続の名前をタイプします。 この設定はモードごとのため、各モードで異なる接続を監視することができ、innotopはどの接続を選択したかを記憶します。

'n'キーを使って'次の'接続をアルファベット順に切り替えることができます。サーバグループを監視している場合(SERVER GROUPSを見てください)、最初の接続に切り替わるでしょう。

多くの接続名をタイプすることもでき、innotopはそれら全部からのデータを取得および表示するでしょう。例えば"server1 server2"のように接続名を単純にスペースで区切ります。この場合もやはり、存在しない接続名をタイプした場合は、innotopは接続情報のための入力を促し接続を生成します。

複数接続を一度に監視する他の方法に、サーバグループがあります。アルファベット順に'次の'グループに切り替えるためにTABキーを使うことができます。もしどのグループも監視していない場合は、TABは最初のグループに切り替えるでしょう。

innotopは接続から並行してデータを取得しません。つまり、もし大きなグループあるいは多くの接続を監視している場合、刻みの間の増加した遅延に気づくかも知れません。

一つ以上の接続を監視する場合、innotopのステータスバーが変わります。INNOTOP STATUSを見てください。


エラーの処理

1つのサーバを監視する場合にエラーハンドリングは重要ではありませんが、多くの有効な接続がある場合には重大です。クラッシュしたサーバあるいは接続の失敗はinnotopをクラッシュすべきではありません。結果として、innotopはエラーがあったとしても実行し続けるでしょう; エラーがあった接続から何も情報を表示しないだけでしょう。これにより、innotopの挙動は混乱させるかも知れません。これは機能であり、バグではありません!

特にエラーが接続にあり長いタイムアウトを引き起こす場合は、エラーのあった接続はinnotopを遅くし使用を困難にするため、innotopはエラーのあった接続にはクエリを続けません。代わりにinnotopはエラーがまだあるかを見るために、時折接続を再試行します。エラーがまだあれば、将来のどこかの時点まで待つでしょう。待ち時間はフィボナッチ数列として増加します。ですので、時間が経つに連れて頻度が下がります。

モードの中で発行されるSQLコマンドのために特定のモードでのみエラーが起きるかも知れないので、innotopはどのモードがエラーを起こしたのか追跡します。異なるモードに切り替えると、innotopは待つ代わりに再接続してみるでしょう。

デフォルトでは、innotopはスクリーン上の最初のテーブルの一番下に赤いテキストで問題を表示するでしょう。show_cxn_errors_in_tbl設定オプションを使ってこの挙動を無効にすることができます。デフォルトでは有効です。debugオプションが有効にされると、innotopは最初だけでなく各テーブルの一番下にエラーを表示するでしょう。そして、show_cxn_errors が有効にされると、innotpはSTDOUTにもエラーテキストを出力するでしょう。エラーメッセージはエラーが発生したモードでのみ表示されるかも知れません。モードとinnotopがその接続を問い合わせるのを避けているかに依存します。


非対話型の操作

innotopを非対話型で実行することができます。その場合、設定ファイルとコマンドラインオプションによって完全に制御されます。非対話型モードでinnotopを開始するには、L"<--nonint"> コマンドラインオプションを渡します。これは以下の方法でinnotopの挙動を変更します:

  • 特定のPerlモジュールがロードされません。innotopが対話的に入力を促さないため、Term::Readline はロードされません。Term::ANSIColor と Win32::Console::ANSI モジュールはロードされません。innotopが開始時に接続パスワードの入力を促す必要があるかも知れないため、Term::ReadKey は使われます。

  • innotopは各刻みの後に画面をクリアしません。

  • innotopはどのような変更も設定ファイルに保持しません。

  • --countが渡されinnotopが増加モードの時(status_inc--incを見てください)、innotopは増加統計を出力できるように指定されたより1回多く実際には更新するでしょう。最初の刻みの間に出力が抑えられるため、innotopがハングしたように見えるかもしれません。

  • innotopは各モードで一番最初のテーブルを表示します。これはawkおよびsedのようなほかのコマンドラインを使って出力を簡単に処理できるためのものです。各モードでどのテーブルを表示するかを変更するには、TABLESを見てください。Q: クエリ リストモードはとても重要なため、innotopは自動的にq_header テーブルを無効にします。これにより、たとえ対話型の操作でq_headerテーブルを表示するようにinnotopを設定していたとしても、processlist テーブルを確実に見えるようにします。同様に、T: InnoDB トランザクションモードでも、t_header テーブルは抑えられ、innodb_transactions テーブルだけが見えます。

  • 全ての出力はホワイトスペースによるカラム揃えの代わりにtabで区切られます。innotopは一度に1つのスクリーン一杯の出力だけではなく、各テーブルの完全な内容を出力します。

  • innotopは各刻みごとにではなく1度だけカラムヘッダを出力します(hide_hdrを見てください)。innotopはテーブルのキャプションを出力しません (display_table_captionsを見てください)。innotopは出力に空行が無いようにします。

  • innotop does not honor the shorten transformation, which normally shortens some numbers to human-readable formats.

  • innotopはステータス行を出力しません (INNOTOP STATUSを見てください)。


設定

innotopについてほとんど全てが設定可能です。ほとんどはビルトインのコマンドで変更することができますが、設定ファイルを編集することもできます。

innotopの実行中に、設定編集ダイアログを開くために'$'キーを押します。編集したいデータの型を選択するために他のキーを押します:

S: ステートメント スリープ時間

SQLステートメント スリープ 遅延を編集します。これはステートメントの実行後に特定の時間の間innotopを停止します。各ステートメントの定義とそれが何をするかはSQL STATEMENTS を見てください。デフォルトでinnotopはどのステートメントの後でも遅延しません。

この機能はサーバの監視による副作用をカスタマイズできるように含まれています。You may not see any effects, but some innotop users have noticed that certain MySQL versions under very high load with InnoDB enabled take longer than usual to execute SHOW GLOBAL STATUS. If innotop calls SHOW FULL PROCESSLIST immediately afterward, the processlist contains more queries than the machine actually averages at any given moment. SHOW GROBAL STATUSを呼んだ後でちょっとだけinnotopを停止するように設定することでこの影響を軽減します。

スリープ時間は設定ファイルのstmt_sleep_times セクションに格納されています。Fractional-second sleeps are supported, subject to your hardware's limitations.

c: カラムの編集

表示されているテーブルの一つからテーブルエディターを開始します。TABLE EDITORを見てください。設定ダイアログに入らずにテーブルエディタを開始する別の方法は'^'キーを使います。

g: 一般的な設定

グローバルとモード固有の設定変数を編集するために設定エディタを開始します(MODESを見てください)。innotopはグローバルと現在のモードに依存するモード固有の変数から変数の選択を促します。

k: 行の色付けルール

表示されているテーブルの一つから行の色づけルールエディタを開始します。詳細はCOLORS を見てください。

p: プラグインの管理

プラグイン設定エディタを開始します。詳細はPLUGINSを見てください。

s: サーバグループ

サーバグループを作成および編集しましょう。SERVER GROUPSを見てください。

t: 表示されているテーブルの選択

このモードで表示されるテーブルを選択してみましょう。MODESTABLESを見てください。


設定ファイル

innotopのデフォルトの設定ファイルの場所は $HOME/.innotop と /etc/innotop/innotop.confで、それらはこの順番で探されます。最初の設定ファイルが存在した場合、次は処理されないでしょう。それらは--config コマンドラインオプションによって上書きすることができます。手動で安全に編集することができますが、innotopはそれが開始された時に設定ファイルを読み込みます。readonlyが0に設定されている場合は終了時に再び書き出します。従って、readonlyが0に設定されていれば、innotopが実行中に手動で加えた全ての変更が失われるでしょう。

innotopは設定ファイル内に全ての設定を格納しません。メモリ内に保持するデフォルトの設定値の多くのセットがあり、設定ファイルはそれらのデフォルトを上書きするだけです。デフォルトの設定をカスタマイズした場合、innotopは検知し、カスタマイズ内容をファイルに格納します。これはファイルのサイズを小さく、編集を容易に、そしてアップグレードを簡単にします。

デフォルトで設定ファイルはread-onlyです。--writeで上書きすることができます。readonlyを見てください。

設定ファイルはINIファイルのようなセクションに配列されます。各セクションは [セクション名] で始まり、[/セクション名] で終わります。各セクションのエントリは格納する必要があるデータに依存した異なる構文を持ちます。ファイルにコメントを配置することができます; #文字で始まる全ての行がコメントです。innotopはコメントを読みません。つまり、終了時にファイルに書き戻されないでしょう。 ですが、read-onlyの設定ファイルのコメントはまだ有用です。

ファイルの最初の行はinnotopのバージョン番号です。これにより、innotopはファイル形式に後方互換性が無い時に気づくことができ、カスタム化した設定を壊すことなくスムーズにアップグーレドできます。

以下のリストは設定ファイルの各セクションとそれが含むデータを説明します:

general

'general' セクションはグローバルな設定変数と、モード固有かも知れないが他のどのセクションにも所属しない変数を含みます。構文は単純な key=value リストです。innotop はファイルを手動で編集するのに役立つように各値の上にコメントを書きます。

S_func

Sモードの表示を制御します(S: 変数 & ステータスを見てください)。gであれば値がグラフ化されます; sであれば値がvmstatのようになります; pであれば値がピボットされたテーブルになります。

S_set

S: 変数 & ステータス モードでどの変数のセットを表示するかを指定します。VARIABLE SETSを見てください。

auto_wipe_dl

innotopに大きなデッドロックを検知したときにそれらを自動的に一掃することを指示します。これが起きた場合、少し遅れて気づくでしょう。通常は次の刻みで大きなデッドロックによって切り捨てられていた情報を見るでしょう。

charset

どの種類の文字をno_ctrl_char 変換で通すかを指定します。これは、画像のようなバイナリデータを含むクエリを監視する場合に、非印字文字がターミナルを混乱させないようにします。

デフォルトは'ascii'で、通常のASCII以外の全てが制御文字だと見なします。他に許される値は'unicode'と'none'です。'none' は全ての文字を制御文字と見なします。クエリ内の全てのテキストフィールドを潰すのに便利です。

cmd_filter

これはC: コマンド要約 モードでのフィルタ変数のプリフィックスです。

color

ターミナルの色付けが許可されるかどうか。

cxn_timeout

MySQL バージョン4.0.3移行は、この値が接続のタイムアウトに使われます。つまり、MySQLはしばらくの間接続が使われない場合に接続を閉じません。例えば、あるモードでは接続が監視されていないため、タイムアウトが起きるかもしれません。

debug

このオプションはより詳細なエラーを有効にし、innotopはところによりもっと厳密になります。 デバッグフィルターや他のユーザ定義のコードの中で役に立つでしょう。クラッシュした場合に、innotopに大量の情報をdebugfileに書き込ませます。

debugfile

クラッシュがあった場合にinnotopが情報を書き込むファイル。FILESを見てください。

display_table_captions

innotop はほとんどのテーブルの上にキャプションを表示します。この変数は全体において全てのテーブルにキャプションを抑制あるいは表示します。いくつのテーブルは hide_caption プロパティを使って設定され、これを上書きます。

global

GLOBAL変数およびステータスを表示するかどうか。innotop only tries to do this on servers which support the GLOBAL option to SHOW VARIABLES and SHOW STATUS. いくつかのMySQLバージョンでは、これをするにはある権限が必要です; それらを持たない場合は、innotopは全く変数およびステータス情報を取得することができないでしょう。 This configuration variable lets you run innotop and fetch what data you can even without the elevated privileges.

I can no longer find or reproduce the situation where GLOBAL wasn't allowed, but I know there was one.

graph_char

S: 変数 & ステータス モードでグラフを描画する場合に使用する文字を定義します。

header_highlight

どうやってカラムのヘッダをハイライトするかを定義します。Term::ANSIColor が利用可能な場合にのみ動作します。有効な変数は 'bold' と 'underline' です。

hide_hdr

全体でカラムヘッダを隠します。

間隔

innotopがデータを更新する間隔 (刻み)。間隔は刻み間のsleep時間として実装されています。そのため、実際の間隔はinnotopがデータを取得および描画するのに掛かる時間に依存して変わるでしょう。

This variable accepts fractions of a second.

mode

innotopが開始しなければならないモード。許可される引数は対話式でモードを選択するキーの押下と同じです。MODESを見てください。

num_digits

How many digits to show in fractional numbers and percents. この変数の範囲は0から9の間で、'+'と'-'キーを使って直接S: 変数 & ステータス モードから設定することができます。set_precision, shorten および percent変換の中で使われます。

num_status_sets

ピボットされたS: Variables & Status モードでどれだけの数のステータス変数を表示するかを制御します。innotopがメモリ内にどれだけ多くの古い変数のセットを保持するかも制御します。つまり、この変数が大きくなるとinnotopが多くのメモリを使用します。

plugin_dir

どこでプラグインが見つかるかを指定します。デフォルトでは、innotopはプラグインをinnotop設定ディレクトリの'plugin'サブディレクトリに格納します。

readonly

設定ファイルがreadonlyかどうか。これは対話的に設定できません。

show_cxn_errors

innotopに接続エラーをSTDOUTに出力させます。ERROR HANDLINGも見てください。

show_cxn_errors_in_tbl

innotopにスクリーンの一番最初のテーブル内に行として接続エラーを表示させます。ERROR HANDLINGも見てください。

show_percent

percent 変換によって返された値の後に '%'文字を追加します。

show_statusbar

表示にステータスバーを表示するかどうかを制御します。INNOTOP STATUSを見てください。

skip_innodb

Disables fetching SHOW INNODB STATUS, in case your server(s) do not have InnoDB enabled and you don't want innotop to try to fetch it. SHOW INNODB STATUS の実行に必要なSUPER権限を持っていない場合にも有用です。

status_inc

ステータス変数として絶対値あるいは増加値を表示するかどうか。増加値はその変数のためにinnotopが見た最後の値からのオフセットとして計算されます。これはグローバル設定ですが、おそらくどこかの時点でモード固有になるでしょう。Right now it is honored a bit inconsistently; some modes don't pay attention to it.

timeformat

-tが設定されている場合、-nモードで出力されるタイムスタンプの行のためのC形式のstrftime()互換フォーマット。

プラグイン

このセクションは有効なプラグインのパッケージ名のリストを格納します。もしプラグインがある場合は、innotopはそれを有効化するでしょう。詳細はPLUGINS を見てください。

filters

このセクションはユーザ定義のフィルタを格納します(FILTERSを見てください)。各行は、filter_name=text='filter text' tbls='table list' の形式です。

フィルターのテキストはサブルーチンのコードのテキストです。テーブルのリストは、フィルタを適用することができるテーブルのリストです。By default, user-defined filters apply to the table for which they were created, but you can manually override that by editing the definition in the configuration file.

active_filters

この章はどのフィルタが各テーブルで有効になるかを格納しています。各行は table_name=filter_list の形式です。

tbl_meta

このセクションは、ユーザ定義あるいはユーザがカスタマイズしたカラムを格納します。(COLUMNSを見てください)。各行は、col_name=propertiesの形式で、プロパティは name=quoted-value のリストです。

接続

このセクションは定義されたサーバの接続を格納します。各行は、name=properties の形式で、プロパティはname=value のリストです。The properties are self-explanatory, and the only one that is treated specially is 'pass' which is only present if 'savepass' is set. なんらかのDNS、ユーザ名、あるいはパスワード コマンドラインオプションが使われた場合、このセクションの設定ファイルはスキップされるでしょう。SERVER CONNECTIONSを見てください。

active_connections

このセクションは各モードでどの接続がアクティブかのリストを格納します。各行は、mode_name=connection_list の形式です。

server_groups

このセクションはサーバグループを格納します。各行は name=connection_list の形式です。SERVER GROUPSを見てください。

active_server_groups

このセクションは各モードでどのサーバグループが有効かのリストを格納します。各行は mode_name=server_group の形式です。

max_values_seen

このセクションは変数として見られた最大値を格納します。これはS: 変数 & ステータス モードでグラフの倍率を掛けるために使われます。各行は name=value の形式です。

active_columns

このセクションはテーブルカラムのリストを格納します。各行は tbl_name=column_list の形式です。COLUMNSを見てください。

sort_cols

このセクションはソートの定義を格納します。各行は tbl_name=column_list の形式です。もしカラムが'-'のプリフィックスである場合、カラムは降順にソートされます。SORTINGを見てください。

visible_tables

このセクションは各モードでどのテーブルが見えるかを定義します。各行は mode_name=table_list の形式です。TABLESを見てください。

varsets

このセクションはS: ステータス & 変数 モードで使われる変数セットを定義します。各行は name=variable_list の形式です。VARIABLE SETSを見てください。

colors

このセクションは色付けルールを定義します。各行は tbl_name=property_list の形式です。COLORSを見てください。

stmt_sleep_times

このセクションはステートメントのsleepタイムを含みます。各行は statement_name=sleep_time の形式です。S: ステートメント スリープ 時間を見てください。

group_by

このセクションはテーブル group_by 表現のためのカラムリストを含みます。各行は tbl_name=column_list の形式です。GROUPINGを見てください。


カスタマイズ

innotopを大いにカスタマイズすることができます。例えば、以下のことができます:

  • どのテーブルをどの順番で表示するかを選択。

  • Choose which columns are in those tables, and create new columns.

  • ビルトインフィルタ、ユーザ定義フィルタ、クイックフィルタを使って表示する行をフィルタ。

  • 重要なデータを最初に置くために行をソート、あるいは関係する行を一緒にする。

  • 行を色付けしてハイライトする。

  • 配置、幅、カラムのフォーマットをカスタマイズし、値の一部を取り出すため、あるいは思うように値を整形するためにカラムに変形を適用します(例えば、大きな数を見慣れた単位に短くする)。

  • 必要なようにデータを抽出および結合するために独自の表現を設計。これにより無限の柔軟性を与えます。

それら全てとそれ以上を以下の章で説明します。

テーブル

A table is what you'd expect: a collection of columns. キャプションのような幾つかの他のプロパティも持ちます。Filters, sorting rules, and colorization rules belong to tables and are covered in later sections.

内部的には、テーブルのメタデータは%tbl_metaと呼ばれるデータ構造の中で定義されます。This hash holds all built-in table definitions, which contain a lot of default instructions to innotop. メタデータには、キャプション、ユーザがカスタマイズしたカラムのリスト、カラムのリスト、表示可能なカラムのリスト、フィルターのリスト、色付けルール、カラムのソートリスト、ソート方向、およびテーブルのデータソースに関する幾つかの情報が含まれます。これのほとんどはテーブルエディタを使ってカスタマイズ可能です(TABLE EDITORを見てください)。

'$'キーを押すことでどのテーブルを表示するかを選択することができます。MODESTABLESを見てください。

テーブルのライフサイクルは以下の通りです:

  • 各テーブルはデータソースから始まり、これはハッシュの配列です。データソースについての詳細は以下を見てください。

  • データソースの各要素が最終のテーブルの中で行となります。

  • データソース内の各要素について、innotopはソースから値を抽出し行を作成します。この行は別のハッシュで、後のステップで$setとして参照されるでしょう。 $set. innotopが抽出する値はテーブルのカラムによって決定されます。各カラムは抽出サブルーチンを持ち、表現からコンパイルされます(EXPRESSIONSを見てください)。結果の行は、キーがカラム名と同じに名前が付けられます。

  • innotop は行をフィルターし、表示される必要の無いそれらを除去します。FILTERSを見てください。

  • innotop は行をソートします。SORTINGを見てください。

  • 指示された場合、innotopは行を集めます。GROUPINGを見てください。

  • innotop は行を色付けします。COLORSを見てください。

  • innotopは各行の中のカラム値を変形します。TRANSFORMATIONSを見てください。

  • innotop は任意に行をピボットし(PIVOTINGを見てください)、それらをフィルターおよびソートします。

  • innotop はテーブルとして行を整形および位置を収めます。このステップの間に、innotopはカラム値の配置、最大幅および最小幅を含む更なる整形を適用します。;innotop は未定義の値によるクラッシュが無いことを保証するために最終的なエラーのチェックも行います。指示された場合は、innotopはキャプションを追加し、テーブルが出力可能になります。

もしテーブルがピボットされる場合は、上で述べたようにライフサイクルが少し異なります。T言うなれば、もしテーブルがピボットされる場合、そのプロセスは、抽出、グループ、変形、ピボット、フィルター、ソート、生成です。ピボットされない場合は、そのプロセスは、抽出、フィルター、ソート、グループ、色付け、変形、生成です。This slightly convoluted process doesn't map all that well to SQL, but pivoting complicates things pretty thoroughly. Roughly speaking, filtering and sorting happen as late as needed to effect the final result as you might expect, but as early as possible for efficiency.

各ビルトインテーブルは以下のように説明されます:

adaptive_hash_index

InnoDBの適応ハッシュインデックスについてのデータを表示します。データソース: STATUS_VARIABLES

buffer_pool

InnoDBのバッファプールについてのデータを表示します。データソース: STATUS_VARIABLES

cmd_summary

重み付けされたステータス変数を表示します。データソース: STATUS_VARIABLES

deadlock_locks

最後に検知されたデッドロックによって、どのロックが保持され待たされているかを表示します。データソース: DEADLOCK_LOCKS

deadlock_transactions

最後に検知されたデッドロックに関係するトランザクションを表示します。データソース: DEADLOCK_TRANSACTIONS

explain

EXPLAINの出力を表示します。データソース: EXPLAIN

file_io_misc

Displays data about InnoDB's file and I/O operations. データソース: STATUS_VARIABLES

fk_error

InnoDBの最後の外部キーエラーについて様々なデータを表示します。データソース: STATUS_VARIABLES

index_statistics

Percona-enhancedサーバのINDEX_STATISTICSテーブルからのデータを表示します。

index_table_statistics

Percona-enhancedサーバのINDEX_STATISTICSおよびTABLE_STATISTICSテーブルからのデータを表示します。データベースおよびテーブル名でグループ化された2つを一つに纏めます。U: User Statistics モードでのデフォルトのビューであり、どのテーブルが hot であるか、どれだけ多くの行がインデックスから読み込まれたか、どれだけ多くの変更がされたか、そしてどれだけ多くの変更がインデックスにされたか、を簡単に見ることができます。

innodb_locks

InnoDB ロックを表示します。データソース: INNODB_LOCKS

innodb_transactions

InnoDBの現在のトランザクションについてのデータを表示します。データソース: INNODB_TRANSACTIONS

insert_buffers

InnoDBのinsertバッファについてのデータを表示します。データソース: STATUS_VARIABLES

io_threads

InnoDBのI/Oスレッドについてのデータを表示します。データソース: IO_THREADS

log_statistics

InnoDBのログシステムについてのデータを表示します。データソース: STATUS_VARIABLES

master_status

リプリケーションマスターのステータスを表示します。データソース: STATUS_VARIABLES

open_tables

Displays open tables. データソース: OPEN_TABLES.

page_statistics

InnoDBのページ統計を表示します。データソース: STATUS_VARIABLES

pending_io

InnoDBの延期しているI/O操作を表示します。データソース: STATUS_VARIABLES

processlist

現在のMySQLプロセスを表示します (スレッド/接続)。データソース: PROCESSLIST.

q_header

様々なステータスの値を表示します。データソース: STATUS_VARIABLES

row_operation_misc

InnoDBの行操作についてのデータを表示します。データソース: STATUS_VARIABLES

row_operations

InnoDBの行操作についてのデータを表示します。データソース: STATUS_VARIABLES

semaphores

InnoDBのセマフォおよびミューテックスについてのデータを表示します。データソース: STATUS_VARIABLES

slave_io_status

スレーブ I/O スレッドについてのデータを表示します。データソース: STATUS_VARIABLES

slave_sql_status

スレーブSQLスレッドについてのデータを表示します。データソース: STATUS_VARIABLES

table_statistics

Percona-enhancedサーバの TABLE_STATISTICS テーブルからのデータを表示します。

t_header

様々なInnoDBステータス値を表示します。データソース: STATUS_VARIABLES

var_status

ユーザ設定可能なデータを表示します。データソース: STATUS_VARIABLES

wait_array

InnoDBの OS待ち行列についてのデータを表示します。データソース: OS_WAIT_ARRAY

カラム

カラムはテーブルに所属します。'^' キーを押すことでテーブルのカラムを選択することができます。TABLE EDITORを開始し、選択およびカラムの編集をさせます。テーブルエディタ内で'e'を押すことで、カラムのプロパティを編集させます:

  • hdr: カラムのヘッダ。これはテーブルの一番目の行に現れます。

  • just: 位置寄せprintf整形コードと同じに、'-' は左寄せ、'' は右寄せを意味します(偶然ではありません)。

  • dec: whether to further align the column on the decimal point.

  • num: カラムが数字であるかどうか。これは値がどうやってソートされるかに影響します(辞書的あるいは数字的)。

  • label: カラムについての小さな覚書で、ユーザがカラムを選択するのに役立つダイアログ内に現れます。

  • src: innotopがカラムのデータをソースから取り出すために使われる表現(DATA SOURCESを見てください)。表現についての詳細はEXPRESSIONS を見てください。

  • minw: 最小の表示幅を指定します。これは表示の安定に役に立ちます。データが頻繁に変更する場合に読むのが楽になります。

  • maxw: minwに似ています。

  • trans: カラムの変形のリスト。TRANSFORMATIONSを見てください。

  • agg: 集約関数。GROUPINGを見てください。デフォルトは first です。

  • aggonly: テーブル上でグルーピングが有効な場合にカラムだけが表示されるかどうかを制御します(GROUPINGを見てください)。デフォルトでは、無効です。This means columns will always be shown by default, whether grouping is enabled or not. カラムの aggonly がtrueに設定された場合、カラムはテーブル上でグルーピングを切り替えた時に現れるでしょう。processlistおよびinnodb_transactions上のカウントカラムのように、幾つかのカラムはこのように設定されています。つまり、グルーイングが有効ではない場合にカウントを見ませんが、有効な場合には見ます。

  • agghide: aggonlyの逆。グループ化が有効な場合にカラムが隠されます。

フィルター

フィルターは表示から行を除去します。それらはSQLでのWHERE句にそっくりの挙動をします。innotopには幾つかのビルトインのフィルタがあります。それらは有効ではないクエリのような無関係の情報を除去しますが、同様に独自のものを定義することができます。innotopではクイックフィルタを作成することもできます。設定ファイルに保存することができず、幾つかの行に対してのみ素早く表示する簡単な方法です。

どのテーブルでもフィルターを有効または無効にすることができます。Press the '%' key (mnemonic: % looks kind of like a line being filtered between two circles) and choose which table you want to filter, if asked. 可能なフィルターのリストと、現在このテーブルに有効になっているフィルターのリストを見るでしょう。適用したいフィルターの名前をタイプし、エンターを押します。

ユーザ定義フィルター

存在しない名前をタイプした場合、innotopは新しいフィルターを作成するように促すでしょう。もしPerlを知っていて、知らなくても難しくなければ、ファイルターを作ることは簡単です。やるべきことは、行が表示されるべき場合にtrueを返すサブルーチンを作ることです。行は$setとしてサブルーチンに渡されるハッシュの参照です。

例えば、5分以上動作しているクエリだけを見るために、processlist テーブルをフィルタしたいと考えてみてください。フィルタのための新しい名前をタイプし、サブルーチンのための入力を促された場合は、ターミナルの自動補完を起動するためにTABを押します。processlist テーブルの中にカラム名を見るでしょう (innotopは一般的に自動補完リストを使って助けようとします)。'time'カラムをフィルタしたいとします。クエリが5分以上古い場合にtrueを返すために、テキスト "$set->{time} > 300" をタイプします。以上がする必要があること全てです。

別の言い方をすると、タイプしているコードは明示的なコンテキストで囲まれます。それはこのように見えます:

 sub filter {
    my ( $set ) = @_;
    # YOUR CODE HERE
 }

フィルタが動作しない場合、あるいはその他の何かが突然異なる動きをする場合は、フィルタがエラーを起こしたかも知れず、innotopは静かにエラーをキャッチしています。代わりに、innotopがエラーを投げるようにdebug を有効にしてみてください。

クイック-フィルター

innotopのクイックフィルターはinnotopを再起動した時に永続化しない一時的なフィルタを作成するための近道です。クイックフィルターを作るには、'/'キーを押します。innotopはカラム名とフィルタのテキストのための入力を促すでしょう。この場合もやはり、カラム名に自動補完を使うことができます。フィルターテキストは"検索"したいテキストそのものです。例えば、productテーブルを参照するクエリのprocesslist テーブルをフィルタするには、'/' とそのあとに'info product'をタイプします。内部的には、フィルターは以下のようなサブルーチンにコンパイルされます。

 sub filter {
    my ( $set ) = @_;
    $set->{info} =~ m/product/;
 }

フィルターテキストは実際にはどのようなPerl正規表現でもありえますが、もちろん’product’のような文字通りのテキストも正規表現として正しく動作します。

一致する行を表示するのではなく、一致する行を処分するためのフィルタが欲しい場合は?Perl正規表現に詳しい場合は、これをする方法を推測できるでしょう。長さ0の否定の前方参照 assertionを使うべきです。もし何を意味するのか知らない場合は、心配しないでください。コマンドがGandalfである全ての行を透過してみましょう。以下をタイプします:

 1. /
 2. cmd ^(?!Gandalf)

Behind the scenes innotop compiles the quick-filter into a specially tagged filter that is otherwise like any other filter. それは単に設定ファイルに保存されないだけです。

クイックフィルターを消去するには、'\'キーを押すと、innotopは一度にそれら全てを消去するでしょう。

ソート

innotopは最も重要な行をテーブルの一番上にソートする気が利くビルトインのデフォルトを持ちます。innotop内の他の全てのように、全てのテーブルがソートされるようにカスタマイズすることができます。

ソートダイアログを開始するには、'^'キーを使ってTABLE EDITORを開始し、必要であればテーブルを選択肢、's'キーを押します。ソート表現で使うことができるカラムのリストと、もし現在のソート表現があればそれを見るでしょう。Enter a list of columns by which you want to sort and press Enter. 逆順にソートしたい場合は、-記号をカラム名の前に付けます。例えば、カラム a を昇順に、その後カラム b を降順でソートする場合は、'a -b' をタイプします。昇順でソートしたいカラムの前に明示的に+を追加することもできますが、必須ではありません。

幾つかのモードにはこのダイアログを直接開き、素早く逆順にソートするキーがマップされています。全てのモードでマップされているキーを見るには、いつものように'?'を押します。

グループ

innotop can group, or aggregate, rows together (the terms are used interchangeably). これはSQLの GROUP BY 句にとても似ています。特定のカラムでグループを作ることができ、あるいはもし何も指定しない場合は行のセット全体が1つのグループとして扱われます。ここまではとてもSQLに似ていますが、SQLと違いグループ化されないカラムも選択することができます。innotopは実際各カラムを集約します。明示的にグループ化関数を指定しない場合、デフォルトは'first'です。これは基本的に便利なため、結果の中に欲しい書くカラムのための集約関数を指定する必要はありません。

集約プロパティを切り替える '='キーを使ってテーブルのグルーピングを素早く切り替えることができます。このプロパティは設定ファイルに保持されません。

テーブルがグループ化されるカラムは group_byプロパティによって指定されます。グループ化を有効にすると、innotopはたとえgroup_byカラムが表示されないことになっているとしてもテーブルの左端にそれらを配置します。その後に表示可能な残りのカラムが現れます。

2つのテーブルにはデフォルトのgroup_byリストと組み込みのカウントがあります: processlistinnodb_transactions。グルーピングはconnectionとstatusで、監視している各サーバ上でどれだけのクエリあるいはトランザクションが所定のステータスにあるかを素早く見ることができます。timeのカラムはsumとして集約されます; 他のカラムはデフォルトの'first'集約として残ります。

デフォルトでは、S: 変数 & ステータス モードで表示されるテーブルもグルーピングを使います。つまり、多くのサーバに渡って変数およびステータスを監視することができます。このモードでのデフォルトの集約関数は 'avg'です。

有効なグルーピング関数は %agg_funcsハッシュの中で定義されています。それらには以下が含まれます

first

グループ内の最初の要素を返す。

count

未定義の要素を含むグループ内の要素の数を返す。SQLのcount(*)にとても似ています。

avg

グループ内で定義された要素の平均を返す。

sum

グループ内の要素の合計を返す。

以下は動作中のグルーピングの例です。数百の開いた接続を持つとても忙しいサーバがあり、どれだけ多くの接続がどのステータスにあるのか見たいとします。ビルトインのグルーピングルールを使って、Q: クエリー リストモードに入るために'Q'を押すことができます。グループを切り替えるために'='を押します(必要であれば、入力を促された時にprocesslistを選択します)。

表示は以下のように見えるでしょう:

 Query List (?for help) localhost, 32:33, 0.11 QPS, 1 thd, 5.0.38-log
 
 CXN        Cmd        Cnt  ID      User   Host           Time   Query
 localhost  Query      49    12933  webusr localhost      19:38  SELECT * FROM
 localhost  Sending Da 23     2383  webusr localhost      12:43  SELECT col1,
 localhost  Sleep      120     140  webusr localhost    5:18:12
 localhost  Statistics 12    19213  webusr localhost      01:19  SELECT * FROM

ほんとうに厄介な図です。多くのアイドルの接続(Sleep)があり、幾つかの接続はクエリを実行しています(QueryとSending Data)。それはいいのですが、統計ステータスにも多くあり、集団で1分以上費やしています。クエリのオプティマイザがステートメントのための実行プランを生成するために本当に苦境にある事を意味します。何かがおかしいです; 通常クエリを計画するためには数ミリ秒かかるはずです。集約で接続を見たことが無い場合は、このパターンを見たことが無いかも知れません。(これはでっちあげた例ですが、実際の生活でも起こりえます)。

ピボット

innotopは表計算プログラムのピボットテーブルに似た、もっとコンパクトな表示のためにテーブルをピボットすることができます(crosstabとしても知られています)。テーブルのピボットはカラムを行にします。このテーブルから始めてみましょう:

 foo bar
 === ===
 1   3
 2   4

ピボットした後で、テーブルはこのように見えるでしょう:

 name set0 set1
 ==== ==== ====
 foo  1    2
 bar  3    4

意味のある結果を得るために、ピボットとグループ化をする必要があるかも知れません。innotopは現在のところ、S: 変数 & ステータスモードのためにこれを行います。

デフォルトでは、innotopはもっと重要な行をざっと見ることができるように色で行をハイライトします。カラー化のルールをカスタマイズし、独自のものをどのテーブルにも追加することができます。'^'キーを使ってテーブルエディタを開き、必要であればテーブルを選択し、カラーエディタダイアログを開くために'o'を押します。

カラーエディタダイアログは評価される順にテーブルに適用されたルールを表示します。各行は各ルールに対してルールが行に合致するかどうかを見るために評価されます; 一致した場合、行は指定された色付けをされ、それ以上のルールは評価されません。ルールは以下のように見えます:

 state  eq  Locked       black on_red
 cmd    eq  Sleep        white       
 user   eq  system user  white       
 cmd    eq  Connect      white       
 cmd    eq  Binlog Dump  white       
 time   >   600          red         
 time   >   120          yellow      
 time   >   60           green       
 time   >   30           cyan

これは processlist テーブルのデフォルトのルールセットです。In order of priority, these rules make locked queries black on a red background, "gray out" connections from replication and sleeping queries, and make queries turn from cyan to red as they run longer.

(いくつかの理由でANSIカラーコード"white"は実際には明るい灰色です。ターミナルの画面は異なるかも知れません; あなたの好きな色を見つけるための実験です)。

ルールを徐下に移動するためにキーストロークを使うことができます。これはそれらの重要度を並び替えます。ルールを削除し新しいものを追加することもできます。新しいルールを追加すると、innotopはカラム、比較のためのオペレータ、カラムと比較する値、そしてルールが合致した時の色を入力するように促します。各ステップごとに自動補完と入力の指示があります。

3つめのステップの値は正しく引用符で囲まれる必要があります。innotopは値を文字あるいは数字のどちらとして扱うべきか知らないので、値を引用符で囲もうとしません。上の最初のルールの例のように、文字列に対してカラムを比較したい場合は、引用符で囲まれた'Locked'を入力する必要があります。引用符の無い単語についてエラーメッセージを受け取った場合は、おそらく引用符をつけるべきでしょう。

表現

表現はinnotopがどう動作するかについての中核で、思うようにinnotopを拡張するためのものです。TABLESで説明されたテーブルのライフサイクルを思い出してください。表現は早い段階で使用され、データソースから行の形に値を抽出します。

It does this by calling a subroutine for each column, passing it the source data set, a set of current values, and a set of previous values. These are all needed so the subroutine can calculate things like the difference between this tick and the previous tick.

データをセットから抽出するサブルーチンは表現からコンパイルされます。This gives significantly more power than just naming the values to fill the columns, because it allows the column's value to be calculated from whatever data is necessary, but avoids the need to write complicated and lengthy Perl code.

innotop begins with a string of text that can look as simple as a value's name or as complicated as a full-fledged Perl expression. It looks at each 'bareword' token in the string and decides whether it's supposed to be a key into the $set hash. A bareword is an unquoted value that isn't already surrounded by code-ish things like dollar signs or curly brackets. If innotop decides that the bareword isn't a function or other valid Perl code, it converts it into a hash access. 全ての文字列が処理された後で、innotopはサブルーチンを以下のようにコンパイルします:

 sub compute_column_value {
    my ( $set, $cur, $pre ) = @_;
    my $val = # EXPANDED STRING GOES HERE
    return $val;
 }

Here's a concrete example, taken from the header table q_header in Q: Query List mode. この表現は SHOW STATUS によって返される値から、qps、あるいは Queries Per Second、カラムの値を計算します:

 Questions/Uptime_hires

innotopは両方の単語を引用符の無い単語と決定し、この表現を以下のPerlコードに変換します:

 $set->{Questions}/$set->{Uptime_hires}

When surrounded by the rest of the subroutine's code, this is executable Perl that calculates a high-resolution queries-per-second value.

サブルーチンへの引数はそれぞれに固有名を持つ $set, $cur および $pre です。ほとんどの場合で、$setと$curは同じ値でしょう。しかし、もしstatus_inc が設定された場合、$curは$setと同じではなくなるでしょう。$setは既に$curと$preの間で増加する異なる値をすでに持っているからです。

innotopでの全てのカラムは同じ形式でコンパイルされたサブルーチンによって計算されます。innotopのビルトインのカラムとユーザ定義のカラムに違いはありません。 これにより、ものごとが矛盾なく予想可能になります。

変換

変換はどのように値が描画されるかを変更します。例えば、秒数の数を取り、それをH:M:S形式で表示することができます。以下の変換は以下のように定義されます:

commify

大きな数に3桁ごとにカンマを追加します。

dulint_to_int

2つの符号なしの整数を受け取り、それらを一つのlonglongに変換します。InnoDBを使ったある操作に便利です。例えば、InnoDBは2つの整数をトランザクションの識別子として使います。

no_ctrl_char

値からクォートされた制御文字を取り除きます。これはcharset設定変数によって影響を受けます。

この変換は、例えば UPDATEステートメントの中のSET句に設定される値のような、クォートされた文字列の中だけで操作されます。それはUPDATEステートメントを変えませんが、chasetに依存してクォートされた文字列を[BINARY] あるいは [TEXT]に潰すでしょう。

percent

Converts a number to a percentage by multiplying it by two, formatting it with num_digits digits after the decimal point, and optionally adding a percent sign (see show_percent).

secs_to_time

秒数を days+hours:minutes:seconds 形式の時間として整形します。

set_precision

Formats numbers with num_digits number of digits after the decimal point.

shorten

Formats a number as a unit of 1024 (k/M/G/T) and with num_digits number of digits after the decimal point.

テーブル エディタ

innotopテーブルエディタはキーストロークを使ってテーブルをカスタマイズすることができます。'^'キーを使ってテーブルエディタを開始します。画面上に1つ以上のテーブルがある場合は、それらのうちの一つを選ぶように入力を促すでしょう。一旦そうすると、innotopは以下のようなものを表示するでしょう:

 バッファプールのためにテーブル定義を編集します。Press ?for help, q to quit.

 name               hdr          label                  src
 cxn                CXN          Connection from which  cxn
 buf_pool_size      Size         Buffer pool size       IB_bp_buf_poo
 buf_free           Free Bufs    Buffers free in the b  IB_bp_buf_fre
 pages_total        Pages        Pages total            IB_bp_pages_t
 pages_modified     Dirty Pages  Pages modified (dirty  IB_bp_pages_m
 buf_pool_hit_rate  Hit Rate     Buffer pool hit rate   IB_bp_buf_poo
 total_mem_alloc    Memory       Total memory allocate  IB_bp_total_m
 add_pool_alloc     Add'l Pool   Additonal pool alloca  IB_bp_add_poo

最初の行はどのテーブルを編集しているか、そしてキーのマッピングのリストのために'?'を押すことを再び思い出させます。残りはテーブルのカラムの表表現です。なぜならそれはおそらくあなたが編集しようとしているものだからです。しかし、テーブルのカラム以上を編集することができます: この画面はフィルターエディタ、色付けルールエディタなどを開始することができます。.

画面上の各行は編集しようとしているテーブルの1つのカラムを、ヘッダとソース表現のような2,3のプロパティと一緒に表示します(EXPRESSIONSを見てください)。

キーのマッピングは他の多くの場所と同じくVim形式です。'j' と 'k' はハイライトを上下に動かします。ハイライトされたカラムを(d)elete あるいは (e)dit することができます。テーブルにカラムを (a)dd することもできます。これは実際にはテーブルについてすでに定義されているカラムの一つを活性化します; 利用可能なカラムだが現在表示されていないカラムを選択するように促します。最後に、'+'と'-'w’キーを使ってカラムを再び並べることができます。

テーブルエディタを使って単にカラムを編集する以上のことができ、テーブルのソート表現およびgroup-by表現のような他のプロパティも編集することができます。もちろん、完全なリストを見るには'?'を押します。

独自のカラムを本当にカスタマイズあるいは作成したい場合は、現在表示されていないビルトインのカラムを活性化するのとは対象的に、(n)ewキーを押します。innotopは必要な情報のための入力を促すでしょう。

  • カラム名: これはおかしくない文字を使った単語が必要です。例えば、単なる文字、数字、およびアンダースコアです。

  • カラムのヘッダ: これはテーブルヘッダ内のカラムの一番上に現れるラベルです。これは空白とおかしな文字を持つことができますが、長すぎたりスクリーンの空間をあまり浪費しないように気をつけてください。

  • The column's data source: this is an expression that determines what data from the source (see TABLES) innotop will put into the column. これはソース内の単なる項目名、あるいはEXPRESSIONSで説明されたような、もっと複雑な表現かも知れません。

必要なデータを入力し終わると、テーブルが新しいカラムを持ちます。このカラムとビルトインのカラムに違いはありません; 全て同じプロパティと挙動を持つことができます。innotopは設定ファイルにカラムの定義を書き込むでしょう。つまり、それはセッションをまたいで維持されるでしょう。

例: スレーブがトランザクションを何度再試行したかを追跡したいとします。MySQLのマニュアルによると、Slave_retried_transactions ステータス変数がそのデータを与えます: "開始から、リプリケーションのスレーブSQLスレッドがトランザクションを再試行した総回数この変数はバージョン 5.0.4に追加されました。" これはslave_sql_status テーブルに追加するのに適切です。

カラムを追加するには、'M'キーを使ってリプリケーション監視モードに切り替え、テーブルエディタを開始するために'^'キーを押します。入力を促されたら、テーブルとして slave_sql_status を選択し、カラムを追加するために'n'を押します。カラム名として'retries'、カラムヘッダとして'Retries'、そしてソースとして 'Slave_retried_transactions'をタイプします。これで、カラムが生成され、再びテーブルエディタ画面が表示されます。テーブルエディタを終了するために'q'を押し、テーブルの最後にカラムを見つけるでしょう。


変数設定

変数セットはS: 変数 & ステータス モードの中で、監視したい変数をもっと簡単に定義するために使われます。背景では、それらは表現のリストにコンパイルされ、他のテーブルの中のカラム、データ抽出の単語、および変換のように扱うことができるようにカラムリストに入れられます。However, you're protected from the tedious details by a syntax that ought to feel very natural to you: a SQL SELECT list.

The data source for variable sets, and indeed the entire S mode, is the combination of SHOW STATUS, SHOW VARIABLES, and SHOW INNODB STATUS. それらのステートメントから返される変数ごとに1つのカラムを持つ大きなテーブルを持っているとします。それが変数セットのデータソースです。これで、期待したようなこのデータソースに質問をすることができます。例えば:

 QPS として、Questions, Uptime, Questions/Uptime 

背景では、innotopは変数セットを3つの表現に分割し、それらをコンパイルし、それらをテーブル定義に変換し、いつものように抽出します。これが、"変数セット"あるいは"監視したい変数のリスト"になります。

innotopは変数セットに名前を付け、保存するようにします。そしてそれらを設定ファイルに書き込みます。'c'キーを使ってどの変数セットを見たいかを選択、あるいは'>'および'<'キーを使って次および前のセットを活性化することができます。おまけに多くのビルトイン変数セットがあります。それらは独自のものを作成するのに良い手始めになるに違いありません。現在の変数セットを編集、あるいは単にどのようにそれが定義されているかを見るために'e'を押します。新しいものを作成するには、単に'c'を押し名前をタイプします。

結果の整形の助けのためにTRANSFORMATIONS にリスト化されている幾つかの関数を使いたいと思うかも知れません。実際、set_precision は見る桁数を制限するのにしばしば便利です。上の例を拡張する方法を以下に示します:

 QPS として Questions, Uptime, set_precision(Questions/Uptime)

実際、これはまだ修正を必要とします。もしinterval が0未満であれば、このモードでのデフォルトのUptimeは増加するため0除算をするかも知れません。代わりに、Uptime_hiresを使います:

 QPSとして Questions, Uptime, set_precision(Questions/Uptime_hires)

この例はシンプルですが、どの変数を監視したいかの選択がどれほど簡単かを示しています。


プラグイン

innotopには、既存の機能を拡張あるいは修正、そして新しい機能を追加する、簡単だが強力な仕組みがあります。innotopのプラグインの機能はイベントベースです: プラグインはイベントが起きた時に呼ばれるようにそれら自身を登録します。そして、イベントに影響を与える機会を持ちます。

innotopプラグインはinnotopのplugin_dir ディレクトリの中に置かれたPerlモジュールです。UNIXシステム上で、実際のファイルをそこに置く代わりにそのモジュールへのシンボリックを置くことができます。 innotop は自動的にファイルを発見します。もしplugins 設定ファイルセクションに対応するエントリーがある場合、innotopはプラグインをロードし、活性化します。

モジュールはinnotopのプラグインのインタフェースに準拠しなければなりません。更にモジュールのソースコードは、inntopがファイルを調査しパッケージ名と説明を決定できるような方法で書かれていなければなりません。

パッケージソースの約束事

innotopはPerlのパッケージ名を決定するためにプラグインのモジュールのソースを調査します。"package Foo;"の形式の行を探し、もし見つかると、プラグインのパッケージ名をFooとして決定します。もちろん、そのパッケージ名は2つのセミコロンなどを持つ有効なPerlパッケージ名です。

プラグインエディタがもっと人に優しくなれるようにソースコード内で説明も探します。説明は"# description: Foo"の形式のコメント行で、"Foo"はinnotopがプラグインの説明だと見なすだろうテキストです。

プラグイン インタフェース

innotopのプラグインのインタフェースはとても単純です: innotopはモジュールが特定のメソッドを要求することができるオブジェクト指向のモジュールであることを期待します。そのメソッドとは

new(%variables)

これはプラグインのコンストラクタです。操作可能なinnotopの変数のハッシュが渡されます(Plugin Variablesを見てください)。新しく作成されたプラグインオブジェクトのリファレンスを返さなければなりません。

構築の段階では、innotopは一般的な設定のみをロードし、デフォルトの内容(とても多いです)を持つデフォルトのビルトインの変数を生成します。従って、プログラムの状態は正確にinnotopのソースコードと、設定ファイル内のgeraralセクションからの設定ファイルを加えたものと同じです。

プラグインが変数を操作すると、それはグローバルのデータを変更し、innotopと全てのプラグインで共有されます。プラグインは設定ファイル内でリスト化された順番でロードされます。プラグインは他のプラグインの前あるいは後で読み込むかも知れません。つまり、他のプラグインが使用あるいは修正するデータを修正する場合は、プラグイン間で衝突あるいは相互作用を起こす可能性があります。

register_for_events()

このメソッドはプラグインが興味を持つイベントがあればそのリストを返さなければなりません。定義されたイベントはプラグインのイベントを見てください。定義されていないイベントをプラグインが返す場合は、イベントは無視されます。

イベントのハンドラー

プラグインは登録された各イベントと同じ名前のメソッドを実装しなければなりません。別の言い方をすると、もしプラグインがregister_for_events()から qw(foo bar) を返す場合、foo()および bar() メソッドを持たなければなりません。これらのメソッドはイベントに対するコールバックです。各イベントについてはプラグインのイベントを見てください。

プラグイン変数

プラグインのコンストラクタは操作可能なinnotopの変数のハッシュを渡されます。もしプラグインオブジェクトが後の利用のためにそれのコピーを保存することはおそらく良い考えです。変数はinnotopの変数 %pluggable_vars の中で定義され、以下のようなものです:

action_for

キーマッピングのhashref。innotopのグローバルホットキーです。

agg_funcs

グルーピングのために使うことができる関数のhashref。GROUPINGを見てください。

config

グローバル設定ハッシュ。

接続

接続の仕様のhashref。これらはどうやってサーバに接続するかの単なる仕様です。

dbhs

innotopのデータベース接続のhashref。実際のDBI接続オブジェクトです。

filters

テーブルの行に適用されるフィルターのhashref。詳しくはFILTERS を見てください。

modes

モードのhashref。詳しくはモードを見てください。

server_groups

サーバグループのhashref。SERVER GROUPSを見てください。

tbl_meta

テーブルあたり1つの、innotopのテーブルのメタデータ (詳細な情報はテーブルを見てください)。

trans_funcs

変換関数のhashref。TRANSFORMATIONSを見てください。

var_sets

変数セットのhashref。VARIABLE SETSを見てください。

プラグイン イベント

各イベントはinnotopソースコードの中のどこかで定義されます。innotopがそのコードを実行すると、イベントに興味があることを表明した各プラグインのためのコールバック関数を実行します。innotopは各イベントについて幾つかのデータを渡します。イベントは %event_listener_for 変数の中で定義され、それらは以下の通りです:

extract_values($set, $cur, $pre, $tbl)

このイベントはデータソースから値を抽出する関数の中で起こります。引数は値のセット、以前の値、そしてテーブル名です。

set_to_tbl

Events are defined at many places in this subroutine, which is responsible for turning an arrayref of hashrefs into an arrayref of lines that can be printed to the screen. The events all pass the same data: an arrayref of rows and the name of the table being created. イベントは、set_to_tbl_pre_filter, set_to_tbl_pre_sort,set_to_tbl_pre_group, set_to_tbl_pre_colorize, set_to_tbl_pre_transform, set_to_tbl_pre_pivot, set_to_tbl_pre_create, set_to_tbl_post_create です。

draw_screen($lines)

このイベントは行を画面に出力するサブルーチン内で起こります。$lines は文字列のarrayrefです。

簡単なプラグインの例

プラグインの機能を説明する最も簡単な方法はおそらく簡単な例を使うことです。以下のモジュールは各テーブルの最初にカラムを追加し、その値を1に設定します。

 use strict;
 use warnings FATAL => 'all';
 
 package Innotop::Plugin::Example;
 # description: Adds an 'example' column to every table
 
 sub new {
    my ( $class, %vars ) = @_;
    # Store reference to innotop's variables in $self
    my $self = bless { %vars }, $class;
 
    # Design the example column
    my $col = {
       hdr   => 'Example',
       just  => '',
       dec   => 0,
       num   => 1,
       label => 'Example',
       src   => 'example', # Get data from this column in the data source
       tbl   => '',
       trans => [],
    };
 
    # Add the column to every table.
    my $tbl_meta = $vars{tbl_meta};
    foreach my $tbl ( values %$tbl_meta ) {
       # Add the column to the list of defined columns
       $tbl->{cols}->{example} = $col;
       # Add the column to the list of visible columns
       unshift @{$tbl->{visible}}, 'example';
    }
 
    # Be sure to return a reference to the object.
    return $self;
 }
 
 # I'd like to be called when a data set is being rendered into a table, please.
 sub register_for_events {
    my ( $self ) = @_;
    return qw(set_to_tbl_pre_filter);
 }
 
 # This method will be called when the event fires.
 sub set_to_tbl_pre_filter {
    my ( $self, $rows, $tbl ) = @_;
    # Set the example column's data source to the value 1.
    foreach my $row ( @$rows ) {
       $row->{example} = 1;
    }
 }
 
 1;

プラグイン エディタ

プラグインエディタはThe plugin editor lets you view the plugins innotop discovered and activate or deactivate them. どのモードからでも設定エディタを開始するために $ を押すことでエディタを開始します。プラグインエディタを開始するために 'p' キーを押します。innotopが見つけたプラグインのリストを見るでしょう。ハイライトを希望するものに移動するために'j'と'k'を使うことができ、それを有効あるいは無効に切り替えるために * キーを押します。変更の効果を発するために、エディタを終了しinnotopを再起動します。


SQL 文

innotopは表示のためにMySQLからのデータを処理するための制限されたSQLステートメントのセットを使います。ステートメントは実行されるサーバのバージョンに依存してカスタマイズされます; 例えば、MySQL5より新しいものは INNODB_STATUS は "SHOW ENGINE INNODB STATUS"を実行し、一歩言うで以前のバージョンでは "SHOW INNODB STATUS" を実行します。ステートメントは以下の通りです:

 Statement           SQL executed
 =================== ===============================
 INDEX_STATISTICS    SELECT * FROM INFORMATION_SCHEMA.INDEX_STATISTICS
 INNODB_STATUS       SHOW [ENGINE] INNODB STATUS
 KILL_CONNECTION     KILL
 KILL_QUERY          KILL QUERY
 OPEN_TABLES         SHOW OPEN TABLES
 PROCESSLIST         SHOW FULL PROCESSLIST
 SHOW_MASTER_LOGS    SHOW MASTER LOGS
 SHOW_MASTER_STATUS  SHOW MASTER STATUS
 SHOW_SLAVE_STATUS   SHOW SLAVE STATUS
 SHOW_STATUS         SHOW [GLOBAL] STATUS
 SHOW_VARIABLES      SHOW [GLOBAL] VARIABLES
 TABLE_STATISTICS    SELECT * FROM INFORMATION_SCHEMA.TABLE_STATISTICS


データ ソース

innotopがテーブルを作るために値を抽出するたび(EXPRESSIONSTABLESを見てください)に、特定のデータソースからそれを行います。Largely because of the complex data extracted from SHOW INNODB STATUS, this is slightly messy. SHOW INNODB STATUS は1つの値と、入れ子になったデータセット形式の繰り返しの値の混合を含みます。

innotopがMySQLからデータを取り出す時はいつでも、各セットに2つの特別なビットを追加いします: cxnとUptime_hires。cxn はデータが来る接続の名前です。Uptime_hires はサーバのUptimeステータス変数の高解像度バージョンで、interval 設定が1秒以下の場合に重要です。

以下は、データが抽出されるデータソースの種類です:

STATUS_VARIABLES

これは大きな分類で、データのほとんどの種類が入るものです。SHOW STATUS と SHOW VARIABLES の組み合わせで始まりますが、他のソースは必要に応じて含まれます。例えば、SHOW INNODB STATUSからの非繰り返しの多くと同様に、SHOW MASTER STATUS と SHOW SLAVE STATUS が含まれます。

DEADLOCK_LOCKS

このデータは SHOW INNODB STATUS の LATEST DETECTED DEADLOCK セクション内のトランザクションリストから抽出されます。2段階の入れ子です: トランザクションとロックです。

DEADLOCK_TRANSACTIONS

このデータは SHOW INNODB STATUS の LATEST DETECTED DEADLOCK セクション内のトランザクションリストからのものです。1段階の入れ子です。

EXPLAIN

このデータはEXPLAINによって返される結果セットからのものです。

INNODB_TRANSACTIONS

このデータは SHOW INNODB STATUS の TRANSACTIONS セクション からのものです。

IO_THREADS

このデータは SHOW INNODB STATUS の FILE I/O セクションの中のスレッドのリストからのものです。

INNODB_LOCKS

このデータは SHOW INNODB STATUS の TRANSACTIONS セクションからのもので、2段階の入れ子です。

OPEN_TABLES

このデータは SHOW OPEN TABLES からのものです。

PROCESSLIST

このデータは SHOW FULL PROCESSLIST からのものです。

OS_WAIT_ARRAY

このデータは SHOW INNODB STATUS の SEMAPHORES セクションからのもので、1段階の入れ子です。以下のように見える行から来ます:

 --Thread 1568861104 has waited at btr0cur.c line 424 ....


MYSQL 権限

  • 多くの機能のためにSUPER権限を持つユーザとしてMySQLに接続する必要があります。

  • SUPER権限を持たない場合は、幾つかの機能をまだ実行することができますが、全て同じデータを見る必要は無いでしょう。

  • Qモードで現在実行中のクエリのリストを見るためにPROCESS権限が必要です。

  • スレーブサーバを開始および停止するために特別な権限が必要です。

  • 必要であれば、デッドロックテーブルを作成および削除するための適切な権限が必要です(SERVER CONNECTIONSを見てください)。


システム要求

もちろん、innotopを実行するためにPerlが必要です。2,3のPerlモジュールも必要です: DBI, DBD::mysql, Term::ReadKey および Time::HiRes。これらはほとんどのPerlの配布物と一緒に含まれているべきですが、そうでない場合は、CPANからではなく、OSあるいはPerl配布物と一緒に配布されているバージョンを使うことをお勧めします。特に、Term::ReadKey はCPANからインストールした場合は問題を起こすことが知られています。

Term::ANSIColor がある場合は、innotopはヘッダがもっと読みやすく小さくなるように整形するためにそれを使うでしょう。(Under Microsoft Windows, you also need Win32::Console::ANSI for terminal formatting codes to be honored). Term::ReadLine を、できるならば Term::ReadLine::Gnu をインストールした場合は、良い自動補完サポートを得ることができるでしょう。

Gentoo GNU/Linux, Debian および Ubuntu上でinnotopを実行し、Red Hat, CentOS, Solaris および Mac OSX 上で実行に成功している人からフィードバックを得ています。他のUnixっぽいオペレーティングシステム上で動かないなんらかの理由が見つかりませんが、確かなことは分かりません。ActivePerlのもとでWindows上でも問題なく動作します。

innotopはMySQLバージョン3.23.58, 4.0.27, 4.1.0, 4.1.22, 5.0.26, 5.1.15 および 5.2.3 上で使われています。正しく動作しない場合は、それは報告すべきバグです。


ファイル

$HOMEDIR/.innotop および/あるいは /etc/innotop が設定情報を保存するために使われます。設定ファイル innotop.conf を含むファイル、debug が有効な場合に冗長なエラーメッセージを含む core_dump ファイル、および プラグイン/サブディレクトリ。


用語の解説

ティック

ティックは再描画のイベントで、innotopが接続からのデータを再取得 および それを表示する時です。


謝辞

以下の人々および組織に様々な理由で感謝します。誰も忘れていないことを望みます。

Aaron Racine, Allen K. Smith, Aurimas Mikalauskas, Bartosz Fenski, Brian Miezejewski, Christian Hammers, Cyril Scetbon, Dane Miller, David Multer, Dr. Frank Ullrich, Giuseppe Maxia, Google.com Site Reliability Engineers, Google Code, Jan Pieter Kunst, Jari Aalto, Jay Pipes, Jeremy Zawodny, Johan Idren, Kristian Kohntopp, Lenz Grimmer, Maciej Dobrzanski, Michiel Betel, MySQL AB, Paul McCullagh, Sebastien Estienne, Sourceforge.net, Steven Kreuzer, The Gentoo MySQL Team, Trevor Price, Yaar Schnitman, and probably more people that have not been included.

(If your name has been misspelled, it's probably out of fear of putting international characters into this documentation; earlier versions of Perl might not be able to compile it then).


COPYRIGHT, LICENSE AND WARRANTY

This program is copyright (c) 2006 Baron Schwartz. Feedback and improvements are welcome.

THIS PROGRAM IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2; OR the Perl Artistic License. On UNIX and similar systems, you can issue `man perlgpl' or `man perlartistic' to read these licenses.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.

Execute innotop and press '!' to see this information at any time.


作者

Originally written by Baron Schwartz; currently maintained by Aaron Racine.


バグ

バグのレポート、改善の要求、および他のヘルプとサポートを、http://code.google.com/p/innotop/で行うことができます。メーリングリスト、コードブラウザ、バグトラッカーなどがあります。議論が恒久的で公開であれば、私達の仕事がより簡単で他の人に恩恵があるため、メインテナーあるいは作者に直接連絡を取る代わりにそれらを使用してください。もちろん、こっそりと私達に連絡を取る必要がある場合は、そうしてください。

 
TOP
inserted by FC2 system