はじめに
AWSのRDS MySQL 8.0で効率的にサーバを運用するためには、デフォルトの設定ではなく環境に合わせたチューニングが必要になる場合があります。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
そのため、CloudFormationを使って第一段階でパラメータグループやオプショングループを作成するテンプレートを用意しました。
書こうと思ったきっかけ
MySQL RDSの初期構築時に、デフォルト値だと効率が悪かったり、スロークエリを逆に見落とすことがあるため、よく使われるチューニングパラメータをあらかじめ定義したテンプレートを作ろうと考えたためです。
実際のテンプレート
1. RDS MySQL 8.0 用「DBパラメータグループ」
(リソース名: MyDBParameterGroup
)
パラメータ一覧 (設定内容):
パラメータ名 | 設定値 | 説明 |
---|---|---|
max_connections | 100 | 同時接続数の上限 |
innodb_buffer_pool_size | 3221225472 | InnoDBバッファプールサイズ(約3GB) |
innodb_log_file_size | 536870912 | InnoDBログファイルサイズ(512MB) |
innodb_flush_log_at_trx_commit | 2 | トランザクションコミット時のログフラッシュ効果(パフォーマンス重視) |
table_open_cache | 512 | 同時オープン可能なテーブルキャッシュ数 |
tmp_table_size | 67108864 | 一時テーブルサイズの上限(64MB) |
max_allowed_packet | 67108864 | 1パケットあたりの最大許可サイズ(64MB) |
max_execution_time | 30000 | クエリの最大実行時間(ミリ秒)30秒) |
net_write_timeout | 120 | 書き込みタイムアウト(秒) |
net_read_timeout | 120 | 読み取りタイムアウト(秒) |
sort_buffer_size | 3145728 | ソート時バッファサイズ(約3MB) |
join_buffer_size | 3145728 | JOIN操作時バッファサイズ(約3MB) |
innodb_io_capacity | 200 | InnoDBストレージIO能力の情報 |
innodb_read_io_threads | 4 | InnoDB読み込みIOスレッド数 |
innodb_write_io_threads | 4 | InnoDB書き込みIOスレッド数 |
log_bin_trust_function_creators | 1 | バイナリログ使用時のファンクション作成許可 |
slow_query_log | 1 | スロークエリログを有効化 |
long_query_time | 2 | スロークエリ認識実行時間(2秒) |
character_set_server | utf8mb4 | デフォルトサーバ文字コード(絵文字対応) |
collation_server | utf8mb4_0900_ai_ci | デフォルト照合順序(MySQL8.0標準) |
time_zone | Asia/Tokyo | サーバータイムゾーン(日本時間) |
2. RDS MySQL 8.0 用「オプショングループ」
(リソース名: MyDBOptionGroup
)
オプション一覧 (追加されている内容):
オプション名 | 説明 |
---|---|
MARIADB_AUDIT_PLUGIN | 監査ログ取得用プラグイン (セキュリティ監査目的) |
(エンジン名:mysql
、メジャーバージョン:8.0
で固定)
まとめ
- DBパラメータグループでMySQL8.0を性能、ロギング、タイムゾーン設定などの面で最適化
- オプショングループで監査ログ準備を行い、セキュリティ安全性を小さい手間で向上させる
以上を個人的備忘録としてテンプレートおよび記事にまとめています。
おまけ:実際のコード
test.yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: CloudFormation template to create RDS MySQL 8.0 Parameter Group and Option Group
Parameters:
DBFamily:
Description: MySQL DB Parameter Group Family
Type: String
Default: mysql8.0
OptionGroupName:
Description: The name of the Option Group
Type: String
Default: my-mysql-option-group
Resources:
MyDBParameterGroup:
Type: AWS::RDS::DBParameterGroup
Properties:
Description: MySQL 8.0 Parameter Group
Family: !Ref DBFamily
Parameters:
max_connections: "100"
innodb_buffer_pool_size: "3221225472"
innodb_log_file_size: "536870912"
innodb_flush_log_at_trx_commit: "2"
table_open_cache: "512"
tmp_table_size: "67108864"
max_allowed_packet: "67108864"
max_execution_time : "30000"
net_write_timeout: "120"
net_read_timeout : "120"
sort_buffer_size: "3145728"
join_buffer_size: "3145728"
innodb_io_capacity: "200"
innodb_read_io_threads: "4"
innodb_write_io_threads: "4"
log_bin_trust_function_creators: "1"
slow_query_log: "1"
long_query_time: "2"
character_set_server : "utf8mb4"
collation_server : "utf8mb4_0900_ai_ci"
time_zone : "Asia/Tokyo"
MyDBOptionGroup:
Type: AWS::RDS::OptionGroup
Properties:
EngineName: mysql
MajorEngineVersion: "8.0"
OptionGroupDescription: MySQL 8.0 Option Group
OptionConfigurations:
- OptionName: MARIADB_AUDIT_PLUGIN
Outputs:
ParameterGroupName:
Description: The name of the created MySQL Parameter Group
Value: !Ref MyDBParameterGroup
OptionGroupName:
Description: The name of the created MySQL Option Group
Value: !Ref MyDBOptionGroup