MariaDBのチューニングにもMySQLTunerが役立つぞ、という話

# この記事は？
- DBのチューニングは運用に合わせ適切に施す必要がある。
- アプリケーションの特性や構成なども絡むので、具体的に「何をどれだけ」という仕切りがわかりにくい。
- MySQLではMySQLTunerというPerlプログラムでチューニングポイントを調べることが出来た。
- この記事においてはMariaDBでも同ツールが使えたよ、ということを提示する。

# MySQLTuner導入・実行
## 環境情報
| 項目 | 情報 |
|:-:|:-:|
|CentOS|CentOS Linux release 7.2.1511|
|Perl|v5.16.3|
|MariaDB|mysql  Ver 15.1 Distrib 5.5.47-MariaDB, for Linux (x86_64) using readline 5.1|

## MySQLTunerとは
簡単にいうと「MySQLのチューニング診断をしてくれるアプリケーション」です。
PostgreSQLにおける[PgTune](http://pgtune.leopard.in.ua/)をCUIで確認するもの、と考えてもらえば大体正しいです。

[MySQLTuner](http://mysqltuner.com/)
ライセンスはGNU GPLなので無料で利用可能です。

## 導入と使い方
### ダウンロードとインストール
DBが導入されているサーバ上にて作業し、
適当なディレクトリにて展開してください。
Perlプログラムなので、実行権限を与えてあげるだけでOK、コンパイルなどは発生しません。

```
# cd /usr/local/src/
# wget -O mysqltuner.zip https://github.com/rackerhacker/MySQLTuner-perl/archive/master.zip 
# unzip mysqltuner.zip
# rm mysqltuner.zip
# cd MySQLTuner-perl-master
# chmod 755 mysqltuner.pl
```
前述の公式HPよりやや古いバージョンでもよければ、
epelのリポジトリにも登録されていますので
yumで取得することも可能です。

```
# yum install mysqltuner
================================================================================
 Package             アーキテクチャー
                                     バージョン             リポジトリー   容量
================================================================================
インストール中:
 mysqltuner          noarch          1.6.0-1.el7            epel           45 k

トランザクションの要約
================================================================================
インストール  1 パッケージ

総ダウンロード容量: 45 k
インストール容量: 156 k
```

## 実行方法
そのまま実行ファイルを叩くだけ。簡単お手軽。
ただ、オプションにあるbuffersを付与すると情報が細かくなるのでおすすめ。

```
# perl mysqltuner.pl --buffers
 >>  MySQLTuner 1.6.13 - Major Hayden <major@mhtx.net>
 >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
 >>  Run with '--help' for additional options and output filtering

[--] Skipped version check for MySQLTuner script
Please enter your MySQL administrative login: root
Please enter your MySQL administrative password:
[OK] Currently running supported MySQL version 5.5.47-MariaDB-log
[OK] Operating on 64-bit architecture
<略>
```
# 実行結果からの考察
##各項目の見方
下記の大項目別に分けて内容が表示されます。

| 大項目 | 和訳 |
|:-:|:-:|:-:|
|Storage Engine Statistics   |ストレージ統計   |
|Security Recommendations    |セキュリティ警告 |
|CVE Security Recommendations   | CVEセキュリティ警告  | 
|Performance Metrics   |パフォーマンス指標   | 
|Performance schema   |パフォーマンススキーマ  | 
|ThreadPool Metrics   |スレッドプール指標   | 
|MyISAM Metrics|MyISAM指標   |
|AriaDB Metrics|AriaDB指標|
|InnoDB Metrics|InnoDB指標|
|TokuDB Metrics|TokuDB指標|
|Galera Metrics|Galera指標|
|Replication Metrics|レプリケーション指標|
|Recommendations|勧告|

## チューニングポイント
- 『[OK]』と表示されている箇所は現在の設定にて問題が無い(不足していない)ことを意味します。
- 『[!!]』と表示されている箇所は現在の設定にて問題がある(不足している)ことを意味します。
- 最下部の『Recommendations』にてチューニングポイントを提示してくれるので、概ね記載の内容に沿ってチューニングしていましょう。

## 実行例
自分の環境ではあれこれ出てきましたので一例として記録します。

###Security Recommendations
```
[!!] User 'root@::1' has no password set.
```
- IPv6からの接続の場合がうっかり漏れていたようです。


### CVE Security Recommendations
```
[!!] CVE-2016-0546 : Candidate
[!!] CVE-2016-2047 : Candidate
[!!] CVE-2016-2047 : Candidate
[!!] 3 CVE(s) found for your MySQL release.
```
- 使用しているMariaDBのバージョンが脆弱性の対象のようです。
- どこかのタイミングでアップデートしないと･･･

### Recommendations
```
query_cache_type (=0)
join_buffer_size (> 2.0M, or always use indexes with joins)
innodb_buffer_pool_instances(=2)
```
- それぞれのパラメータの設定値を変更しなさい、とのお達し。
- メモリ全体とのバランスをみつつそれぞれ設定変更しましょう

#まとめ
さくっとわかりやすい表示でチューニングポイントが見ることが出来るので、重宝しています。
そんなに頻度を高く定期取得してもしょうがないとは思いますが、
長期運用などを見据える場合には都度、確認すると良いかと思います。

* * *
以上