edit-icon download-icon

CommonRequest の使用

最終更新日: May 05, 2018

MySQL インスタンスの場合、コンソールを使用していくつかのパラメータを変更できます。キーパラメータに不適切な値を設定すると、インスタンスのパフォーマンスが低下し、アプリケーションエラーが発生する可能性があります。この資料では、パラメーターを設定する際のリスクを軽減するために、主要パラメーターの最適値を推奨しています。

back_log

  • デフォルト値: 3000

  • 変更後に再起動が必要:はい

  • 機能: MySQL は、それぞれの接続を操作リクエストできるよう対応する新しいスレッドを作成します。メインスレッドが新しいスレッドを作成しているときに、多数の短い接続リクエストがデータベースに送信されると、MySQL は back_log パラメータを使用して、これらの新しい接続がリクエストキューに参加するのを制限します。待機接続数が back_log 値を超えた場合、新しい接続リクエストは受け入れられません。MySQL が多数の短い接続を処理することが予想される場合は、このパラメータの値を増やすことをお勧めします。

  • 症状::パラメータ値が小さすぎると、次のエラーが発生することがあります。

    1. SQLSTATE[HY000] [2002] Connection timed out;
  • 推奨される修正方法:パラメータ値を増加させます。

innodb_autoinc_lock_mode

  • デフォルト値: 1

  • 変更後に再起動が必要:はい

  • 機能: MySQL 5.1.22 およびそれ以降のバージョンでは、InnoDB は innodb_autoinc_lock_mode パラメータを導入して、自動インクリメントプライマリキーに関するテーブルレベルのロックの問題を解決します。このパラメータの値には、0,1,2 が含まれます。 RDS のデフォルト値は 1 です。これは、 InnoDB が軽量の mutex ロックを使用して自動増分ロックを取得し、元のテーブルレベルのロックを置き換えることを示します。ただし、自動インクリメントテーブルロックがロードデータシナリオ( INSERT … SELECT および REPLACE … SELECT を含む)で使用されている場合、アプリケーションが同時にデータをインポートするとデッドロックが発生することがあります。

  • 症状:自動インクリメントテーブルロックがロードデータシナリオ( INSERT … SELECT および REPLACE … SELECT を含む)で使用されている場合、データが同時にインポートされるとデッドロックが発生することがあります。

    1. RECORD LOCKS space id xx page no xx n bits xx index PRIMARY of table xx.xx trx id xxx lock_mode X insert intention waiting. TABLE LOCK table xxx.xxx trx id xxxx lock mode AUTO-INC waiting;
  • 推奨される修正方法:すべての挿入シナリオで軽量の mutex ロックを使用するには、パラメータ値を 2 に設定します。これは、 auto_inc を使用するときにデッドロックを回避するだけでなく、 INSERT … SELECT シナリオ中にパフォーマンスを向上させます。

    注意:このパラメータの値が 2 の場合は、 binlog 形式を row に設定することをお勧めします。

query_cache_size

  • デフォルト値: 3145728

  • 変更後に再起動が必要:いいえ

  • 機能:このパラメータは、MySQL クエリキャッシュのメモリサイズを制御するために使用されます。MySQL でクエリキャッシュが有効になっている場合、 MySQL はまずクエリを実行する前にクエリキャッシュをロックし、次にクエリがクエリキャッシュにすでに存在するかどうかを判断します。クエリが存在する場合、結果はすぐに返されます。クエリが存在しない場合は、エンジンクエリなどの操作が実行されます。同時に、 INSERTUPDATEDELETE などの操作は、クエリキャッシュを失敗させます。構造または索引を変更すると失敗する可能性もあります。キャッシュ障害から回復するのはコストがかかり、MySQL に重いストレスを与えます。クエリキャッシュは、データベースが頻繁に更新されない場合に便利な機能です。ただし、データ書き込みが頻繁で、主に複数のテーブルで実行されると、クエリキャッシュのロックによって頻繁にロックの競合が発生します。ロック競合が発生すると、テーブルの読み込みと書き込みは、クエリキャッシュのロックが解除されるまで一時停止され、選択クエリの効率が低下します。

  • 症状:データベースは、checking query cache for queryWaiting for query cache lock and storing result in query cache など、いくつかの異なるステータスを処理します。

  • 推奨される変更:クエリキャッシュ機能は RDS ではデフォルトで無効になっています。インスタンス内でクエリキャッシュが有効になっている場合は、上記のいずれかのステータスが発生した場合に無効にすることができます。

net_write_timeout

  • デフォルト値: 60

  • 変更後に再起動が必要:いいえ

  • 機能:このパラメータは、ブロックがクライアントに送信されるまで待機する必要がある時間を制御します。

  • 症状:パラメータ値が小さすぎると、クライアントのエラーが発生する可能性があります。 the last packet successfully received from the server was milliseconds ago もしくは the last packet sent successfully to the server was milliseconds ago

  • 推奨される修正方法:このパラメータの値は、デフォルトで RDS で 60 (s) に設定されています。ネットワーク接続が遅いと、クライアントが各ブロックを処理するのに時間がかかることがあります。この場合、net_write_timeout 値が小さすぎると、頻繁に切断される可能性があります。そのような場合は、パラメータ値を大きくすることをお勧めします。

tmp_table_size

  • デフォルト値: 2097152

  • 変更後に再起動が必要:いいえ

  • 機能:このパラメータは、各スレッドに割り当てられる内部の一時メモリテーブルの最大サイズを決定します。実際の制限は、tmp_table_size パラメータと max_heap_table_size パラメータの小さい方の値です。一時メモリテーブルが制限を超えた場合、 MySQL は自動的にディスクベースの MyISAM テーブルに変換します。問合せ文を最適化するときは、一時表を使用しないでください。一時表が必要な場合は、これらの一時表がメモリー内にあることを確認してください。

  • **症状:複雑な SQL 文に、 group by や distinct などの索引で最適化できない文が含まれている場合に一時表を使用すると、SQLの実行時間が延長されます。

  • 推奨される修正アプリケーションにグループ別/個別の文が多数含まれ、データベースに十分なメモリがある場合は、tmp_table_size(max_heap_table_size)の値を大きくしてクエリのパフォーマンスを向上させることができます。

loose_rds_max_tmp_disk_space

  • デフォルト値: 10737418240

  • 変更後に再起動が必要:いいえ

  • 機能:このパラメータは、MySQL が使用できる一時ファイルのサイズを決定します。

  • 症状:一時ファイルが loose_rds_max_tmp_disk_space の値を超えると、次のエラーが発生します。

`` テーブル '/ home / mysql / dataxxx / tmp /#sql_2db3_1'がいっぱいです ``

  • 推奨される修正:テンポラリ・ファイルを増加させる SQL 文を索引付けまたは他の手法を使用して最適化できるかどうかを分析します。次に、十分なインスタンス・スペースがある場合は、このパラメーターの値を大きくして、SQL ステートメントが正しく実行されるようにします。

loose_tokudb_buffer_pool_ratio

  • デフォルト値: 0

  • 変更後に再起動が必要:はい

  • 機能:このパラメータは、TokuDB エンジンが使用できるバッファメモリのサイズを制御します。たとえば、innodb_buffer_pool_size が 1000 MB に設定され、tokudb_buffer_pool_ratio の値が 50(つまり 50%)に設定されている場合、TokuDB エンジンで使用できるバッファメモリサイズは 500 MB です。

  • 推奨される修正 RDS で TokuDB エンジンを使用する場合は、このパラメータの値を大きくして TokuDB エンジンのアクセスパフォーマンスを向上させることをお勧めします。

loose_max_statement_time

  • デフォルト値: 0

  • 変更後に再起動が必要:いいえ

  • 機能:このパラメータは、MySQL でのクエリの最大実行時間を決定します。このパラメーターの構成時間を超えると、照会は自動的に失敗します。デフォルトでは、制限はありません。

  • 症状:クエリ時間がこのパラメータの設定値を超えると、次のエラーが発生します。

`` エラー3006(HY000):クエリの実行が中断され、max_statement_timeを超えました ``

  • 推奨される修正:データベースの SQL 文の実行時間を制御するために、このパラメータの値(単位:秒)を設定します。

loose_rds_threads_running_high_watermark

  • デフォルト値: 50000

  • 変更後に再起動が必要:いいえ

  • 機能:このパラメータは、MySQL での同時クエリの数を制御します。たとえば、rds_threads_running_high_watermark 値が 100 に設定されている場合、MySQL で同時に許可される同時クエリ数は 100 です。この制限を超えるクエリは拒否されます。このパラメータは rds_threads_running_ctl_mode パラメータで使用されます(デフォルトは select です)。

  • 推奨される修正:多数の同時要求を含むシナリオ、たとえば「直前のスパイク」状況でこのパラメータを設定します。これは、データベースを保護するのに役立ちます。