15の便利なMySQL/MariaDBのパフォーマンスチューニングと最適化のヒント
MySQLは強力なオープンソースのリレーショナルデータベース管理システム、略してRDBMSです。1995年にリリースされた(20年前)もので、データベース内のコンテンツ管理に最も人気のある選択肢である可能性があるStructured Query Languageを使用しています。最新のMySQLバージョンは5.6.25で、2015年5月29日にリリースされました。
MySQLに関する興味深い事実の一つは、その名前がマイケル・ウィディネウス(MySQLの創作者)の娘マイから来ているということです。MySQLに関する興味深い事実はたくさんありますが、この記事はMySQLサーバーを管理するための便利な実践を紹介することを目的としています。
2009年4月、MySQLプロジェクトはオラクルによって買収されました。その結果、MySQLコミュニティフォークのMariaDBが作成されました。このフォークが作成された主な理由は、プロジェクトを一般公衆ライセンスの下で無料のまま維持するためです。
今日、MySQLとMariaDBは、WordPress、Joomla、Magentoなどのウェブアプリケーションで最も頻繁に使用されるRDBMSの一つ(おそらく最も頻繁に使用される)です。
この記事では、MySQL/MariaDBのパフォーマンスを最適化するための基本的でありながら有用なヒントをいくつか紹介します。この文書では既にMySQLまたはMariaDBがインストールされていることを前提としています。まだシステムにそれらをインストールする方法に迷っている場合は、こちらの詳細なガイドを参考にしてください:
- RHEL/CentOS 7にLAMPをインストールする
- Fedora 22にLAMPをインストールする
- Ubuntu 15.04にLAMPを設定する
- Debian 8にMariaDBをインストールする
- Gentoo LinuxにMariaDBをインストールする
- Arch LinuxにMariaDBをインストールする
重要: 始める前に - この提案を盲目的に受け入れないでください。各MySQLの設定はユニークであり、変更を加える前に追加の考慮が必要です。
知っておくべきこと:
- MySQL/MariaDBの設定ファイルは
/etc/my.cnfにあります。このファイルを変更するたびに、MySQLサービスを再起動して新しい変更を有効にする必要があります。 - この記事を書くために、MySQL バージョン 5.6 がテンプレートとして使用されました。
1. InnoDBのファイル毎のテーブルを有効にする
まず最初に、InnoDBがストレージエンジンであることを説明することが重要です。MySQLとMariaDBはInnoDBをデフォルトのストレージエンジンとして使用しています。過去には、MySQLはデータベーステーブルとインデックスをシステムテーブルスペースに保持していました。このアプローチは、データベース処理のみを目的としたサーバー向けであり、ストレージディスクは他の目的には使用されませんでした。
InnoDBはより柔軟なアプローチを提供し、各データベース情報は.ibdデータファイルに保持されます。各.ibdファイルは独自のテーブルスペースを表します。このようにして、「TRUNCATE」などのデータベース操作をより迅速に完了でき、データベーステーブルを削除または切り捨てる際に未使用のスペースを回収することもできます。
この構成の別の利点は、データベースのいくつかのテーブルを別のストレージデバイスに保持できるという事実です。これにより、ディスクのI/O負荷が大幅に改善される可能性があります。
MySQL 5.6以降では、innodb_file_per_tableがデフォルトで有効になっています。これを/etc/my.cnfファイルで確認できます。ディレクティブは次のようになります:
innodb_file_per_table=1
2. MySQLデータベースデータを別のパーティションに保存する
注意: この設定はMySQLでのみ動作し、MariaDBでは動作しません。
時々、OSの読み書きがMySQLサーバーのパフォーマンスを低下させることがあります、特に同じハードドライブにある場合です。その代わりに、MySQLサービスには別のハードドライブ(できればSSD)を使用することをお勧めします。
これを完了するには、新しいドライブをコンピュータ/サーバーに接続する必要があります。本記事の目的のために、ドライブは/dev/sdbの下にあると仮定します。
次のステップは新しいドライブを準備することです。
# fdisk /dev/sdb
次に「n」を押して新しいパーティションを作成します。その後、「p」を押して新しいパーティションをプライマリにします。それから、パーティションの番号を1-4から設定します。その後、パーティションのサイズを選択します。ここでエンターを押します。次のステップではパーティションのサイズを設定する必要があります。
ディスク全体を使用する場合は、もう一度エンターキーを押してください。それ以外の場合は、新しいパーティションのサイズを手動で設定できます。準備ができたら、「w」を押して変更を保存します。次に、新しいパーティションのためのファイルシステムを作成する必要があります。これは簡単に以下のコマンドで行うことができます:
# mkfs.ext4 /dev/sdb1
今、私たちは新しいパーティションをフォルダーにマウントします。私のフォルダーには「ssd」という名前を付け、ルートディレクトリに作成しました:
# mkdir /ssd/
私たちは新しいフォルダーに作成した新しいパーティションを取り付ける準備ができています:
# mount /dev/sdb1 /ssd/
スタートアップ時にマウントを実行するには、/etc/fstab ファイルに次の行を追加します。
/dev/sdb1 /ssd ext3 defaults 0 0
さて、MySQLを新しいディスクに移動する準備ができました。まず、次のコマンドでMySQLサービスを停止します:
# service mysqld stop
データベースへの書き込みを防ぐために、Apache/nginxも停止することをお勧めします。
# service httpd stop
service nginx stop
新しいドライブにMySQLディレクトリ全体をコピーしてください:
# cp /var/lib/mysql /ssd/ -Rp
これには、MySQLデータベースのサイトによっては時間がかかる場合があります。このプロセスが完了したら、MySQLディレクトリの名前を変更してください:
# mv /var/lib/mysql /var/lib/mysql-backup
次に、シンボリックリンクを作成します。
# ln -s /ssd/mysql /var/lib/mysql
これで、MySQLとウェブサービスを始める準備が整いました:
# service mysqld start
service httpd start
service nginx start
この時点で、あなたのMySQLデータベースは新しいドライブからアクセスされます。
