percona-toolkitの紹介と各機能の早見表

Percona ToolkitはMySQL等に関する便利なコマンドラインツールの集まりです。

[Percona Toolkit Documentation](http://www.percona.com/doc/percona-toolkit/2.2/)

今回は各ツールの機能を簡単に紹介します。
細かい使用方法に関しては随時追記予定。

## pt-align

ファイルや標準入力を受け取り、列を揃えます。

```
usage: pt-align [FILES]
```

以下は公式ドキュメントの例ですが、
これが、

```
DATABASE TABLE   ROWS
foo      bar      100
long_db_name table  1
another  long_name 500
```

こうなる。

```
DATABASE     TABLE     ROWS
foo          bar        100
long_db_name table        1
another      long_name  500
```

## pt-archiver

テーブルの行データをファイルや他のテーブルに保存します。

```
usage: pt-archiver [OPTIONS] --source DSN --where WHERE
```

例えば以下のようなコマンドを実行するとホスト名oltp_server上のtestデータベースにあるtblテーブルのデータ1000行をolap_serverに転送するとともにファイルにも保存する。

```bash
$ pt-archiver --source h=oltp_server,D=test,t=tbl --dest h=olap_server \
  --file '/var/log/archive/%Y-%m-%d-%D.%t' \
  --where "1=1" --limit 1000 --commit-each
```

## pt-config-diff

MySQLの設定ファイルと実際の設定値の差異を表示します。

```
usage: pt-config-diff [OPTIONS] CONFIG CONFIG [CONFIG...]
```

ファイル同士、サーバー同士でも比較できます。

```bash
$ pt-config-diff /etc/my.cnf h=localhost,u=root --ask-pass

1 config difference
Variable                  /etc/my.cnf                                vagrant-c
========================= ========================================== =========
sql_mode                  NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES STRICT...
```

## pt-deadlock-logger

デッドロックが発生した場合にログ出力します。

```
usage: pt-deadlock-logger [OPTIONS] DSN
```

以下のように特に終了条件や出力の指定がなければ、強制終了するまで標準出力にログ出力を行います。

```bash
$ pt-deadlock-logger h=localhost,u=root --ask-pass
```

## pt-diskstats

iostatより詳しいディスクI/Oの統計を表示します。

```
usage: pt-diskstats [OPTIONS] [FILES]
```

一定時間ごとに以下のようにI/Oの状態を出力します。

```bash
$ pt-diskstats
  #ts device    rd_s rd_avkb rd_mb_s rd_mrg rd_cnc   rd_rt    wr_s wr_avkb wr_mb_s wr_mrg wr_cnc   wr_rt busy in_prg    io_s  qtime stime
  1.0 sda        0.0     0.0     0.0     0%    0.0     0.0     2.0    24.0     0.0    83%    0.0     0.8   1%      0     2.0    0.0   0.8
  1.0 sda1       0.0     0.0     0.0     0%    0.0     0.0     2.0    24.0     0.0    83%    0.0     0.8   1%      0     2.0    0.0   0.8
```

## pt-duplicate-key-checker

MySQLのテーブル上にインデックスや外部キーの重複があるかチェックします。

```
usage: pt-duplicate-key-checker [OPTIONS] [DSN]
```

## pt-fifo-split

ファイルやコマンドライン上のストリームをFIFOで分割します。

```
usage: pt-fifo-split [OPTIONS] [FILE]
```

## pt-find

GNUのfindコマンドのようにMySQLのテーブルを検索し、指定した動作を行わせます。

```
usage: pt-find [OPTIONS] [DATABASES]
```

## pt-fingerprint

クエリを抽象化します。

```
usage: pt-fingerprint [OPTIONS] [FILES]
```

以下のように汎用的なクエリ形式に変換します。

```bash
$ pt-fingerprint --query "select a, b, c from users where id = 500"
select a, b, c from users where id = ?
```

## pt-fk-error-logger

外部キーエラーをログ出力します。

```
usage: pt-fk-error-logger [OPTIONS] [DSN]
```

## pt-heartbeat

MySQLのレプリケーション遅延を表示します。

```
usage: pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop
```

## pt-index-usage

ログからクエリを読み取り、インデックスをどのように使用しているか分析します。

```
usage: pt-index-usage [OPTIONS] [FILES]
```

## pt-ioprofile

MySQLのプロセスI/Oを監視し、データファイル中のテーブルやI/Oの動作を表示します。

```
usage: pt-ioprofile [OPTIONS] [FILE]
```

## pt-kill

条件に合うMySQLの実行中のクエリを中止します。

```
pt-kill [OPTIONS] [DSN]
```

## pt-mext

MySQLのSHOW GLOBAL STATUSを実行した結果の差分を逐次表示します。

```
usage: pt-mext [OPTIONS] -- COMMAND
```

## pt-mysql-summary

MySQLの情報を要約して表示します。

```
usage: pt-mysql-summary [OPTIONS]
```

## pt-online-schema-change

テーブルロックを発生させずにテーブルへの変更を行います。

```
usage: pt-online-schema-change [OPTIONS] DSN
```

## pt-pmp

選択したプログラムのGDBのスタックトレースを収集します。

```
usage: pt-pmp [OPTIONS] [FILES]
```

## pt-query-digest

MySQLのクエリをログ、プロセスリスト、tcpdumpの結果から分析します。

```
usage: pt-query-digest [OPTIONS] [FILES] [DSN]
```

## pt-show-grants

MySQLのユーザ権限を正規化し、表示します。

```
usage: pt-show-grants [OPTIONS] [DSN]
```

## pt-sift

pt-stalkによって作られたファイルを閲覧します。

```
usage: pt-sift FILE|PREFIX|DIRECTORY
```

## pt-slave-delay

MySQLのスレーブサーバにマスタとのレプリケーションにおいて遅延を発生させます。

```
usage: pt-slave-delay [OPTIONS] SLAVE_DSN [MASTER_DSN]
```

## pt-slave-find

MySQLのスレーブを検索し、レプリケーションの階層ツリーを表示します。

```
usage: pt-slave-find [OPTIONS] [DSN]
```

## pt-slave-restart

エラー等でMySQLのレプリケーションが停止したときに複数のスレーブのレプリケーションを再開させます。

```
usage: pt-slave-restart [OPTIONS] [DSN]
```

## pt-stalk

MySQLの問題が発生した際にフォレンジックデータを収集します。

```
usage: pt-stalk [OPTIONS]
```

## pt-summary

システムの情報を要約して表示します。

```
usage: pt-summary
```

## pt-table-checksum

MySQLのレプリケーションが正しく行えているかチェックします。

```
usage: pt-table-checksum [OPTIONS] [DSN]
```

## pt-table-sync

MySQLのテーブルのデータを効率的に同期します。

```
usage: pt-table-sync [OPTIONS] DSN [DSN]
```

## pt-table-usage

ログからクエリを読み込み、クエリがどのようにテーブルを使用するか分析します。

```
usage: pt-table-usage [OPTIONS] [FILES]
```

## pt-upgrade

クエリの結果が異なるサーバ間で同一の結果になるかチェックします。

```
usage: pt-upgrade [OPTIONS] LOGS|RESULTS DSN [DSN]
```

## pt-variable-advisor

MySQLの変数を分析し、可能性のある問題についてアドバイスします。

```
usage: pt-variable-advisor [OPTIONS] [DSN]
```

## pt-visual-explain

実行計画をツリー形式に整形して表示します。

```
usage: pt-visual-explain [OPTIONS] [FILES]
```