MySQL/MariaDB のパフォーマンスのチューニングと最適化に役立つ 15 のヒント
MySQL は、 強力なオープンソースのリレーショナル データベース管理システム、つまりRDBMSです。発売されたのは1995年(20年前)。おそらくデータベース内のコンテンツを管理するための最も一般的な選択肢である構造化クエリ言語を使用します。最新の MySQL バージョンは 5.6.25 で、2015 年 5 月 29 日にリリースされました。
MySQL に関する興味深い事実は、その名前が Michael Widenius (MySQL の作成者) の娘である My に由来しているという事実です。 MySQL については興味深い事実がたくさんありますが、この記事は MySQL サーバーの管理に役立ついくつかの役立つ実践方法を示すことを目的としています。
4 月2009 年に、MySQL プロジェクトは Oracle に買収されました。その結果、MariaDB と呼ばれる MySQL コミュニティ フォークが作成されました。フォークを作成した主な理由は、一般公衆利用許諾契約書に基づいてプロジェクトを無料にしておくためでした。
現在、MySQL と MariaDB は、WordPress や などの Web アプリケーションに使用される (最も頻繁ではないにしても) 最も頻繁に使用される RDBMS の 1 つです。 Joomla やマジェントなど。
この記事では、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 file-per-table を有効にする
まず、InnoDB がストレージ エンジンであることを説明することが重要です。 MySQL と MariaDB は、デフォルトのストレージ エンジンとして InnoDB を使用します。以前は、MySQL はデータベース テーブルとインデックスをシステム テーブルスペースに保持していました。このアプローチは、データベース処理のみを目的とし、ストレージ ディスクが他の目的には使用されないサーバーを対象としています。
InnoDB はより柔軟なアプローチを提供し、各データベース情報は .ibd
データ ファイルに保存されます。各 .ibd ファイルは独自のテーブルスペースを表します。そうすることで、「TRUNCATE」などのデータベース操作をより速く完了でき、データベース テーブルを削除または切り詰めるときに未使用のスペースを再利用することもできます。
この構成のもう 1 つの利点は、データベース テーブルの一部を別のストレージ デバイスに保持できることです。これにより、 ディスクのI/O負荷が大幅に改善されます。
innodb_file_per_table は、MySQL 5.6 以降ではデフォルトで有効になっています。これは /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 まで設定します。その後、パーティションのサイズを選択します。ここで Enter を押します。次のステップでは、パーティションのサイズを構成する必要があります。
ディスク全体を使用する場合は、もう一度 Enter キーを押します。それ以外の場合は、新しいパーティションのサイズを手動で設定できます。準備ができたら、「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 と Web サービスを開始する準備が整いました。
service mysqld start
service httpd start
service nginx start
この時点で、MySQL データベースは新しいドライブからアクセスされるようになります。