Open3
Microsoft Learn 「Azure 上で MySQL Database を使用する」を眺めてみて。

以下のラーニングパスを回してみた時のメモを残します。
目的としては、Flexible ServerとMySQL8.0についての調査の一環です。
- 最大接続数は
max_connection
で管理- 使用可能な CPU コア数の 1 倍、2 倍、または 4 倍に設定してください。 1 秒あたりのトランザクション数が増えなくなるまで、
max_connections
の数を 2 倍にしていきます。 待機時間が長くなり始めたら、接続数によってパフォーマンスが制限されていないということになります。
- 使用可能な CPU コア数の 1 倍、2 倍、または 4 倍に設定してください。 1 秒あたりのトランザクション数が増えなくなるまで、
- MySQL8.0ではテーブルスペースの暗号化を有効にするには
default_table_encryption=on
にする。 - InnoDB では、複数のサーバー パラメーターを使用してスレッド コンカレンシーが管理されます。 同時スレッドの数は、次の 2 つのパラメーターによって調整されます。
-
innodb_thread_concurrency
- 既定値は 0 です。つまり、InnoDB は同時に実行されるスレッドの数を制限しません。 通常は、一度に実行できる同時スレッドの数を制限する必要がない限り、このパラメーターを変更しないことをお勧め
-
innodb_thread_sleep_delay
-
innodb_thread_concurrency
が制限に達したためにスレッドを実行できない場合は、innodb_thread_sleep_delay
で、スレッドの再試行までの待機時間をマイクロ秒単位で定義できます。 既定値は 10,000 マイクロ秒です。 2 回目の実行ができない場合、スレッドはスレッド キューに配置されます。innodb_thread_sleep_delay
の値はほとんどのワークロードに対して適切なものですが、非常に小さなクエリを極端に多く実行した場合は、この値が大きすぎて待機時間が発生する可能性があります。 ただし、値を変更する前に、innodb_adaptive_max_sleep_delay
を設定することを検討してください。-
innodb_adaptive_max_sleep_delay
を使用すると、InnoDB が現在のワークロードに応じてinnodb_thread_sleep_delay
の値を調整できるようになります。innodb_adaptive_max_sleep_delay
の既定値は 15,000 マイクロ秒です。 スリープ遅延は、この最大値を上限として上下に調整されます。
-
-
- MySQL8.0では不要。
-
- MySQL8.0ではスレッドプールを有効化することが可能
- 複数のスレッドをプール(準備しておく場所)に置いておく仕組みです。つまり、MySQLは予めたくさんのスレッドを用意しておき、必要に応じてそれを使います。これによって、スレッドを作る手間を省き、処理速度を向上させることができます。
-
thread_handling=pool-of-threads
にする。 - 次のシナリオでは、スレッド プールをより効率的に使用できる可能性があります。
- 同時接続数が 500 を超える場合。
- CPU の使用率が高くなっています。
- 高い接続バーストが同時に発生する場合。
- 次のシナリオでは、スレッド プールの効率が下がる可能性があります。
- 非アクティブな状態が長時間続いた後にアクティビティが増える場合。
- 実行時間の長いクエリが処理を待機しない場合。
- IOPS が不十分な場合。 Azure Database for MySQL では、IOPS 制限を最大 20 K 超えるまで IOPS を追加できます。
- トランザクション
- デフォルトはオートコミット
- 分離レベルは
REPEATABLE READ
。
- ロック
-
innodb_lock_wait_timeout
- InnoDB トランザクションが行ロックを待機する時間 (秒単位)。50
-
lock_wait_timeout
- メタデータ ロックを取得するまでの時間 (秒単位)。
-

そのほか、以下を見ておくと良さそう。