0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MySQLの接続数や接続サイズに関連するパラメータ

Posted at

直近性能に関わる設計〜実装、テストまでを行ったので確認・更新した設定についてまとめる。
参考: MySQL 8.0 Reference Manual / MySQL Server Administration / The MySQL Server / Server System Variables

各設定

max_connections

概要:

サーバーに同時に接続できるクライアントの最大数を設定するパラメータ。クライアント数が max_connections を超えると、新しい接続はエラーとなる。

実態のクライアント接続許可数は、設置値 + 1であり、管理者は常にクライアントアクセスの様子を確認できるようにしている。
最大有効値は、open_files_limit *1 の値 - 810と、実際にmax_connectionsに設定された値のうち、小さい方である。

*1: MySQLサーバーが同時に開けるファイルの最大数を定義するパラメータであり、ファイルハンドルの上限に関係する設定。
ファイルハンドルは、サーバーがファイル(例えばテーブル、ログ、インデックス)にアクセスするために使用するリソースであり、MySQLでは、各テーブルやログファイルが個別のファイルとして扱われ、同時に多くのファイルが開かれる。

用途:

接続数が急増する可能性のあるアプリケーションやサービスで、このパラメータを増やす必要がある。ただし、メモリ使用量やCPU負荷が高まるため、インスタンスのリソースに見合った値とする。

以下はmax_connectionの基本情報:

Command-Line Format --max-connections=#
System Variable max_connections
Scope Global
Dynamic Yes
SET_VAR Hint Applies No
Type Integer
Default Value 151
Minimum Value 1
Maximum Value 100000

max_user_connections

概要:

1ユーザーが持てる最大接続数を制限するパラメータ。max_connections とは異なり、特定のユーザーの接続を制限する。
デフォルトは0が指定されており、0以外の数値が指定されると、その値が適用される。

用途:

一部のユーザーがリソースを独占しないように制限を設ける場合に有効。

以下はmax_user_connectionsの基本情報:

Command-Line Format --max-user-connections=#
System Variable max_user_connections
Scope Global, Session
Dynamic Yes
SET_VAR Hint Applies No
Type Integer
Default Value 0
Minimum Value 0
Maximum Value 4294967295

wait_timeout

概要

クライアント接続がアイドル状態になってから切断されるまでの時間を定義する。

用途

長時間アイドル状態の接続が続くと、無駄な接続が保持され続けるので
早めに切断することで、max_connections に達するのを防ぐ。

以下はwait_timeoutの基本情報:

Command-Line Format --wait-timeout=#
System Variable wait_timeout
Scope Global, Session
Dynamic Yes
SET_VAR Hint Applies No
Type Integer
Default Value 28800
Minimum Value 1
Maximum Value (Windows) 2147483
Maximum Value (Other) 31536000
Unit seconds

interactive_timeout

概要:

対話的なクライアント接続に適用されるタイムアウト設定。
主に MySQLクライアントやターミナルから直接接続された対話的なセッションが対象。

用途:

wait_timeoutと一緒。接続の方法が違うだけ。

以下はinteractive_timeoutの基本情報:

Command-Line Format --interactive-timeout=#
System Variable interactive_timeout
Scope Global, Session
Dynamic Yes
SET_VAR Hint Applies No
Type Integer
Default Value 28800
Minimum Value 1
Maximum Value 31536000
Unit seconds

max_allowed_packet

概要:

サーバーが一度に送受信できる最大パケットサイズを指定する。大きなデータ(例えば、BLOBや長い文字列)を扱う場合には、これを増やす必要がある。

用途:

大量データの転送や、バッチ処理、バイナリデータの保存に必要なパラメータ。これが不足していると、クエリがエラーになる。
大きすぎると不正なリクエストのサイズも許容してしまうので注意が必要。

以下はmax_allowed_packetの基本情報:

Command-Line Format --max-allowed-packet=#
System Variable max_allowed_packet
Scope Global, Session
Dynamic Yes
SET_VAR Hint Applies No
Type Integer
Default Value 67108864
Minimum Value 1024
Maximum Value 1073741824
Unit bytes
Block Size 1024

net_buffer_length

概要:

初期のネットワークバッファサイズを定義する。MySQLがクエリを受信したときに最初に使用するバッファのサイズで、必要に応じてmax_allowed_packetまで自動的に増加する。

用途:

大きなデータのクエリが発生しやすい場合に最初のバッファサイズを調整して、パフォーマンスを最適化する。

以下はnet_buffer_lengthの基本情報:

Command-Line Format --net-buffer-length=#
System Variable net_buffer_length
Scope Global, Session
Dynamic Yes
SET_VAR Hint Applies No
Type Integer
Default Value 16384
Minimum Value 1024
Maximum Value 1048576
Unit bytes
Block Size 1024

thread_cache_size

概要:

スレッドキャッシュのサイズを設定する。クライアント接続時に新しいスレッドを生成するのではなく、キャッシュされたスレッドを再利用することで接続処理のオーバーヘッドを減らす。

用途:

高頻度で接続が発生する環境では、通常 thread_cache_size を十分に大きく設定し、ほとんどの新規接続がキャッシュされたスレッドを使用するようにする。

以下はthread_cache_sizeの基本情報:

Command-Line Format --thread-cache-size=#
System Variable thread_cache_size
Scope Global
Dynamic Yes
SET_VAR Hint Applies No
Type Integer
Default Value -1 (autosizing)
Minimum Value 0
Maximum Value 16384

学び

必要な値まで上げれば良いと思っていたが、コストやセキュリティ上のリスクが増大してしまう。
設計によってそれぞれの要件を許容できるラインを見つけることが必要である。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?