2026年8月12日

2026年8月12日

MySQLのコネクションプールを設定する方法

はじめに

MySQLはWebアプリケーションで広く利用されるデータベースです。しかし、サーバーとデータベースとの間でのSQL問い合わせの頻度が高くなることで、パフォーマンス低下やリソース争いが生じることがあります。こうした問題を解決するためには、コネクションプールの設定が有効です。コネクションプールは既に接続されたデータベースコネクションを一時的に保管し、必要時に再利用することで、新しいコネクションを作成する手間とリソースを節約します。

症状・背景

このテーマが必要になる主な場面:

  • Webアプリケーションが大量のユーザーにサービス提供している場合
  • 一連のSQL問い合わせでサーバーへの負荷が高い場合
  • データベースとの接続数制限により性能低下が起きている場合

手順・設定方法

ステップ1: オプションを指定したmy.cnfファイルを作成または編集

# /etc/my.cnf ファイルを開き、必要に応じてコネクションプールのオプションを追加します
vi /etc/my.cnf

ステップ2: 主要オプション/設定

# 最大同時接続数を指定(推奨値はサーバーのRAM量により異なります)
[mysqld]
max_connections = 500

# コネクションプールの最大サイズを指定します
[mysqld]
wait_timeout = 28800 # 8時間
interactive_timeout = 28800 # 8時間

# 時間経過後のコネクションの再利用回数を制限します
[mysqld]
max_connect_errors = 100

# クライアントがコネクションプールから取得できる最大同時接続数を指定します
[client]
connect_timeout = 10 # 10秒以内に接続できない場合はタイムアウトします

ステップ3: 应用/組み合わせ

# 既存の設定ファイルに追加でオプションを追加します
echo "[mysqld]" >> /etc/my.cnf
echo "thread_cache_size = 50" >> /etc/my.cnf # スレッドキャッシュサイズを指定します

ステップ4: 実践/トラブルシュート/監視

# サーバーを再起動して変更を適用する
service mysql restart

# コネクションプールの設定が正しく適用されているか確認します
mysql -e "SHOW VARIABLES LIKE 'max_connections';"

注意事項

  • パフォーマンスへの影響: 大きすぎるmax_connections値は、メモリ消費を増加させてしまう可能性があります。
  • セキュリティ上の注意: コネクションプールを使用する際には、SQLインジェクションや不正アクセス対策を実施することが重要です。
  • パフォーマンス/運用上の注意: 定期的に監視と調整を行い、パフォーマンスとリソース利用状況を最適化します。

まとめ

1. 最大同時接続数の設定max_connectionsオプションを使用して、サーバーが同時に管理できる最大同時接続数を制限します。

2. タイムアウトの設定wait_timeoutinteractive_timeoutにより、無効なコネクションのタイムアウト時間を設定します。

3. 接続再利用の制御max_connect_errorsオプションで、接続が失敗した回数を超えた場合は新しい接続を作成するように指示します。

4. スレッドキャッシュの有効化thread_cache_sizeにより、再利用可能なスレッドプールを生成してパフォーマンスを向上させます。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ