OCI E6環境でのMariaDB最適化:innodb_buffer_pool_sizeを変更してDB処理の遅延を解消する
OCI E6プロセッサを活かすMariaDBのメモリバッファ最適化
FiveM(Qbox / ox_inventory環境)などを独自スクリプトでカスタマイズして運用していると、プレイヤーのアイテム増減や車両のカスタマイズ、位置情報の保存のために、秒間数千回レベルの激しいデータベース(MariaDB)の読み書き(クエリ)が発生します。
サーバーの規模(同時接続人数)が大きくなると、このDBの処理待ち(I/Oボトルネック)が原因となり、ゲーム全体の瞬間的なカクつき(スタッター)を引き起こします。
今回は、高性能なOCIのE6インスタンスにおいて、MariaDBのパフォーマンスを劇的に向上させる最重要パラメータ innodb_buffer_pool_size のチューニング手法をまとめます。
innodb_buffer_pool_size の役割
InnoDBストレージエンジンが、テーブルデータやインデックスをメモリ上に直接キャッシュしておくための領域です。 この値がデフォルト値(多くの場合は128MBなど)のままだと、E6インスタンスのメモリが大量に余っているにもかかわらず、データの読み書きのたびにストレージ(ブロック・ボリューム)へアクセスしてしまい、著しいボトルネックになります。
E6環境での割り当ての目安
- ゲームサーバープログラムとDBが同居している場合: インスタンス全体のメモリの 20% 〜 30% を目安に割り当てます。
- DB専用サーバーとしてインスタンスを独立させている場合: メモリの 50% 〜 70% 程度まで強気に割り当てて完全メモリキャッシュ化を狙います。
設定変更の手順(Ubuntu)
MariaDBの設定ファイル(50-server.cnf または my.cnf)を編集します。
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld] セクション内に、お使いの環境の空きメモリ量に合わせたサイズを指定します(例としてバッファプールを 2GB に設定する場合)。
[mysqld]
# データベースキャッシュ用のメモリ割り当て(メモリ容量に応じて調整)
innodb_buffer_pool_size = 2G
# ログファイルのサイズも調整(バッファプールの25%程度が目安)
innodb_log_file_size = 512M
保存してファイルを閉じたら、MariaDBサービスを再起動して設定を反映します。
sudo systemctl restart mariadb
設定が反映されたかの確認
再起動後、MariaDBにログインして実際にキャッシュサイズが変更されたかクエリを叩いて確認します。
sudo mysql -u root -p
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
出力されたバイト換算の値が、設定したサイズ(2GBなら 2147483648)になっていれば成功です。
まとめ
E6インスタンスが持つ高速なメモリ空間へデータを完全に展開(キャッシュ)させることで、ディスクI/Oを極限まで減らし、インベントリ処理やプレイヤーデータのセーブに伴うデータベース遅延を完全にシャットアウトすることができます。ゲームサーバーの安定度を高めるために必須のチューニングです。