ApsaraDB RDSコンソールで、ApsaraDB RDS for MySQLインスタンスのパラメーター値を変更できます。 キーパラメーターの不適切な値は、RDSインスタンスのパフォーマンスに影響を与えたり、アプリケーションでエラーを引き起こす可能性があります。 このトピックでは、主要なパラメーターの最適化の提案を示します。
デフォルトのパラメーター値は、ApsaraDB RDSコンソールで表示できます。
back_log
サポートされているMySQLバージョン: 8.0、5.7、5.6、5.5。
パラメーターの変更後にインスタンスを再起動するかどうか: はい。
機能: プライマリMySQLスレッドは、処理する接続要求ごとにスレッドを作成します。 プライマリスレッドがスレッドを作成したときにフロントエンドアプリケーションが多数の短命接続を開始した場合、ApsaraDB RDS for MySQLは、back_logパラメーターに基づいて、短命接続リクエストがキューに入るように制御します。 キュー内の待機中の接続リクエストの数がback_logパラメーターの値を超えた場合、ApsaraDB RDS for MySQLは新しい接続リクエストを拒否します。 ApsaraDB RDS for MySQLで多数の短期接続を処理する場合は、このパラメーターの値を大きくします。
症状: このパラメーターの値が小さい場合、アプリケーションでは次のエラーが発生する可能性があります。
SQLSTATE[HY000] [2002] 接続がタイムアウトしました。
提案: このパラメーターの値を増やします。
innodb_autoinc_lock_mode
サポートされているMySQLバージョン: 8.0、5.7、5.6、5.5。
パラメーターの変更後にインスタンスを再起動するかどうか: はい。
機能: MySQL 5.1.22以降では、InnoDBでinnodb_autoinc_lock_modeパラメーターを使用して自動インクリメントロックを管理します。 有効な値: 0、1、および2。 デフォルト値は 1 です。 デフォルト値では、InnoDBがテーブルレベルのロックではなく、軽量のミューテックスを使用して自動インクリメントのロックを取得することを指定します。
INSERT... SELECT
やREPLACE... SELECT
などのステートメントを実行してデータをロードするときに自動インクリメントロックを使用すると、データを同時にインポートするときにアプリケーションでデッドロックが発生する可能性があります。症状:
INSERT … SELECT
やREPLACE … SELECT
などのステートメントを実行してデータをロードするときに、自動インクリメントロックを使用します。 データを同時にインポートすると、アプリケーションで次のデッドロックが発生します。RECORD LOCKS space id xx page no xx n bits xx indexテーブルxx.xx trx id xxx lock_mode X挿入意思待ちのPRIMARY。 テーブルロックテーブルxxx.xxx trx id xxxxロックモードAUTO-INC待機;
提案: このパラメーターの値を2に変更します。 値2は、行モードでデータをロードするために使用されるすべてのSQL文が軽量ミューテックスを使用することを示します。 これにより、AUTO-INCのデッドロックが防止され、
INSERT … SELECT
ステートメントのパフォーマンスが大幅に向上します。説明パラメーターを2に設定した場合、バイナリログの形式をrowに設定する必要があります。
query_cache_size
サポートされているMySQLバージョン: 5.7、5.6、5.5。
パラメーターの変更後にインスタンスを再起動するかどうか: いいえ。
機能: このパラメーターは、MySQLクエリキャッシュのメモリ容量を管理します。 MySQLクエリキャッシュを有効にすると、システムはクエリを実行する前にクエリキャッシュをロックし、キャッシュ内のクエリ結果を確認します。 クエリ結果がクエリキャッシュに存在する場合、システムは直接結果を返します。 そうでない場合、システムはクエリを実行して結果を取得します。 INSERT、UPDATE、DELETEなどの操作により、クエリキャッシュが無効になることがあります。 構文またはインデックスを変更すると、クエリキャッシュが無効になることもあります。 クエリキャッシュが頻繁に無効化されると、RDSインスタンスに圧力がかかります。 RDSインスタンスのデータが頻繁に更新されない場合、クエリキャッシュはクエリ効率を大幅に向上させることができます。 ただし、RDSインスタンスが少数のテーブルに対して多数の書き込み操作を処理する場合、クエリキャッシュのロックメカニズムによってロックの競合が頻繁に発生する可能性があります。 ロックされたテーブルの書き込み要求と読み取り要求は、クエリキャッシュがロック解除されるのを待ちます。 これにより、SELECTステートメントのクエリ効率が低下します。
症状: 多数のデータベース接続の状態は、
クエリのクエリキャッシュのチェック
、クエリキャッシュロックの待機
、およびクエリキャッシュの結果の格納
です。提案: デフォルトでは、ApsaraDB RDSはクエリキャッシュを無効にします。 クエリキャッシュを有効にし、前の症状が発生した場合は、クエリキャッシュを無効にします。
net_write_timeout
サポートされているMySQLバージョン: 8.0、5.7、5.6、5.5。
パラメーターの変更後にインスタンスを再起動するかどうか: いいえ。
機能: このパラメーターは、ApsaraDB RDSがブロックをクライアントに送信する前に待機するタイムアウト期間を設定します。
症状: パラメータ値が小さい場合、クライアントは次のエラーが発生する可能性があります。
「サーバーから正常に受信した最後のパケットはミリ秒前でした」または「サーバーに正常に送信された最後のパケットはミリ秒前でした」
提案: このパラメータのデフォルト値は60です。 値が小さい場合、ネットワークが安定していない場合や、クライアントが各ブロックを処理するのに長い時間が必要な場合に、クライアントがRDSインスタンスから頻繁に切断される可能性があります。 このパラメーターの値を増やすことを推奨します。
tmp_table_size
サポートされているMySQLバージョン: 8.0、5.7、5.6、5.5。
パラメーターの変更後にインスタンスを再起動するかどうか: いいえ。
機能: このパラメータは、内部メモリ内一時テーブルの最大サイズを指定します。 このパラメーターで指定されたメモリは、各スレッドに割り当てられます。 内部メモリ内一时テーブルの実际の最大サイズは、tmp_table_sizeまたはmax_heap_table_sizeのいずれか小さい値で指定します。 インメモリ一時テーブルのサイズが最大サイズを超えた場合、ApsaraDB RDS for MySQLは自動的にテーブルをディスク上のMyISAMテーブルに変換します。 クエリ文を最適化するときは、一時テーブルを使用しないでください。 一時テーブルを使用する必要がある場合は、一時テーブルがメモリに格納されていることを確認してください。
症状: GROUP BYまたはDISTINCT句を含む複雑なSQL文に一時テーブルを使用し、インデックスを使用して最適化できない場合、SQL文の実行に時間がかかります。
提案: SQL文に多数のGROUP BY句またはDISTINCT句が含まれ、RDSインスタンスに十分なメモリがある場合は、tmp_table_sizeパラメーターとmax_heap_table_sizeパラメーターの値を増やしてクエリのパフォーマンスを向上させます。
loose_rds_max_tmp_disk_space
サポートされているMySQLバージョン: 5.6と5.5。
パラメーターの変更後にインスタンスを再起動するかどうか: いいえ。
機能: このパラメーターは、RDSインスタンス上の一時ファイルのサイズを管理します。
症状: 一時ファイルのサイズがloose_rds_max_tmp_disk_spaceパラメーターの値を超えると、アプリケーションで次のエラーが発生することがあります。
テーブル '/home/mysql/dataxxx/tmp/#sql_2db3_1' がいっぱいです
提案: インデックス作成またはその他の方法を使用して、一時ファイルのサイズが大きくなるSQL文を最適化できるかどうかを確認します。 インスタンスに十分なスペースがある場合は、このパラメーターの値を増やして、SQL文が正常に実行されるようにします。
loose_tokudb_buffer_pool_ratio
サポートされているMySQLバージョン: 5.6。
パラメーターの変更後にインスタンスを再起動するかどうか: はい。
機能: このパラメータは、TokuDBテーブルで使用できるバッファメモリのサイズを指定します。 たとえば、innodb_buffer_pool_sizeパラメーターが1000 MBに設定され、tokudb_buffer_pool_ratioパラメーターが50% を示す50に設定されている場合、TokuDBテーブルで使用できるバッファメモリのサイズは500 MBになります。
提案: RDSインスタンスでTokuDBエンジンが使用されている場合は、このパラメーターの値を大きくして、TokuDBテーブルのアクセスパフォーマンスを向上させます。
loose_max_statement_time
サポートされているMySQLバージョン: 5.6。
パラメーターの変更後にインスタンスを再起動するかどうか: いいえ。
機能: このパラメーターは、RDSインスタンスの最大クエリ期間を管理します。 デフォルトでは、クエリの期間は制限されていません。 このパラメーターが設定されていて、クエリ期間が指定された制限を超えると、クエリは失敗します。
症状: クエリ期間がこのパラメーターの値を超えると、次のエラーが発生します。
エラー3006 (HY000): クエリの実行が中断され、max_statement_timeが超過
説明パラメーターが変更されると、変更は新しい接続に対してのみ有効になります。 変更を有効にするには、既存の接続を再接続する必要があります。
提案: SQL文の実行期間を管理する場合は、このパラメーターの値を指定します。 単位:ミリ秒。
loose_rds_threads_running_high_watermark
サポートされているMySQLバージョン: 5.6と5.5。
パラメーターの変更後にインスタンスを再起動するかどうか: いいえ。
機能: このパラメーターは、同時クエリの数を管理します。 たとえば、rds_threads_running_high_watermarkパラメーターを100に設定すると、合計100のMySQLクエリを同時に実行できます。 追加のクエリは拒否されます。
提案: このパラメーターを使用して、ピーク時のバーストリクエストとリクエストを処理し、RDSインスタンスを保護できます。
innodb_buffer_pool_instances
サポートされているMySQLバージョン: 8.0、5.7、5.6、5.5。
パラメーターの変更後にインスタンスを再起動するかどうか: はい。
機能: このパラメータは、innodb_buffer_pool_sizeパラメータで指定されたInnoDBバッファプールのサイズが1 GBより大きい場合、InnoDBバッファプールを特定の数のインスタンスに分割します。 各インスタンスには、独自のロック、セマフォ、バッファチャンク、および論理的にリンクされたリストがあります。 その結果、インスタンス間で競合が存在せず、同時の読み取りと書き込みがサポートされます。
提案: 以前のバージョンのインスタンスの場合、innodb_buffer_pool_sizeパラメーターの値は1 GBより大きい場合がありますが、innodb_buffer_pool_instancesパラメーターは1に設定されています。 現在のパラメーターテンプレートのデフォルト値に基づいて値をリセットすることを推奨します。
table_open_cache_instances
サポートされているMySQLバージョン: 8.0、5.7、5.6。
パラメーターの変更後にインスタンスを再起動するかどうか: はい。
機能: このパラメーターは、セッション間のテーブルキャッシュの競合を減らすために、
table_open_cache/table_open_cache_instances
の式を使用して計算される特定のサイズの複数のキャッシュインスタンスにオープンテーブルキャッシュを分割します。提案: 以前のバージョンのインスタンスの場合、innodb_buffer_pool_sizeパラメーターの値は1 GBより大きい場合がありますが、table_open_cache_instancesパラメーターは1に設定されています。 現在のパラメーターテンプレートのデフォルト値に基づいて値をリセットすることを推奨します。
table_open_cache
サポートされているMySQLバージョン: 8.0、5.7、5.6。
パラメーターの変更後にインスタンスを再起動するかどうか: いいえ。
関数: このパラメーターは、サーバーがテーブルキャッシュインスタンスで開いたままにしておくことができるテーブルの最大数を定義します。 このパラメーターの値が小さすぎると、同時実行性の高いシナリオでSQLクエリのパフォーマンスが影響を受ける可能性があります。
提案:
SHOW GLOBAL STATUS LIKE 'Open_tables'
ステートメントを実行します。 戻り値がtable_open_cacheパラメーターの値に近いか等しい場合は、ビジネス要件に基づいてこのパラメーターの値を増やすことを推奨します。
innodb_adaptive_hash_index
サポートされているMySQLバージョン: 8.0、5.7、5.6。
パラメーターの変更後にインスタンスを再起動するかどうか: いいえ。
機能: このパラメーターは、適応ハッシュインデックス機能を無効にするか有効にするかを決定します。 アダプティブハッシュインデックスは、クエリ条件に基づいてデータベース内のリーフノードをすばやく見つけ、I/O操作の数を減らすのに役立ちます。
このパラメーターがONに設定されている場合、クエリのパフォーマンスへの影響は、実行するSQL文によって異なります。 ステートメントによっては、アダプティブハッシュインデックスのメンテナンスを引き起こす可能性があります。 たとえば、DDLステートメントがテーブルで実行されると、適応ハッシュインデックスがメモリから消去されます。 その結果、SQL文の実行がブロックされたり、クエリのパフォーマンスが低下したりします。 このパラメーターをONに設定する前に、SQL文を実行した後にクエリのパフォーマンスを向上できるかどうかを確認してください。 SQL文の実行後にクエリのパフォーマンスが低下する可能性がある場合は、デフォルト値をオフのままにすることをお勧めします。
open_files_limit
サポートされているMySQLバージョン: 8.0、5.7、5.6。
パラメーターの変更後にインスタンスを再起動するかどうか: はい。
機能: このパラメーターは、RDSインスタンスで同時に開くことができるファイルハンドルの数を指定します。 また、innodb_open_filesパラメーターの設定にも影響します。
提案: このパラメーターをデフォルト値655350に設定します。 RDSインスタンスの仕様が32 CPUコア以上で、アクティブなセッションまたはテーブルが多数ある場合は、実際の状況に基づいてこのパラメーターの値を増やすことができます。 このパラメーターの値がインスタンスファイルの数よりも大きい場合でも、インスタンスの実行は影響を受けません。