synch/cond/mysys/my_thread_var::suspend - Amazon Aurora

synch/cond/mysys/my_thread_var::suspend

synch/cond/mysys/my_thread_var::suspend 待機イベントは、スレッドが条件を待機中のため、スレッドが中断されていることを示します。

サポート対象エンジンバージョン

この待機イベント情報は、以下のバージョンでサポートされています:

  • Aurora MySQL バージョン 2 から 2.09.2 まで

  • Aurora MySQL バージョン 1 から 1.23.1 まで

Context

イベント synch/cond/mysys/my_thread_var::suspend は、スレッドが条件を待機中のため、スレッドが中断されていることを示します。例えば、スレッドがテーブルレベルのロックを待っているときに、この待機イベントが発生します。この場合、ワークロードを調査し、DB インスタンスのテーブルロックを取得している可能性があるスレッドを特定することをお勧めします。

待ち時間増加の考えられる原因

synch/cond/mysys/my_thread_var::suspend イベントが通常よりも多く表示され、パフォーマンスの問題を示している可能性がある場合、典型的な原因は次のとおりです。

テーブルレベルのロックで待っているスレッド

1 つ以上のスレッドがテーブルレベルのロックを待っています。この場合、スレッド状態は Waiting for table level lock になります。

mysqldump クライアントに送信されるデータ

mysqldump を使用しているため、1 つ以上のスレッドが待機しており、結果が mysqldump クライアントに送信されています。この場合、スレッド状態は Writing to net になります。

アクション

待機イベントの原因に応じたさまざまなアクションをお勧めします。

テーブルのロックを避ける

アプリケーションが LOCK TABLE をステートメントを使用してテーブルを明示的にロックしていないことを確認します。高度な監査を使用して、アプリケーションによって実行されるステートメントをチェックできます。詳細については、「Amazon Aurora MySQL DB クラスターでのアドバンストな監査の使用」を参照してください。

バックアップツールでテーブルがロックされないようにする

バックアップツールを使用している場合は、テーブルがロックされていないことを確認してください。例えばmysqldump を使用している場合は、--single-transaction オプションを使用して、テーブルがロックされないようにします。

テーブルをロックする長時間実行セッション

長時間実行されているセッションに、明示的にロックされたテーブルが存在する可能性があります。次のSQLステートメントを実行して、そのようなセッションをチェックします。

SELECT p.id as session_id, p.user, p.host, p.db, p.command, p.time, p.state, SUBSTRING(p.info, 1, 50) AS INFO, t.trx_started, unix_timestamp(now()) - unix_timestamp(t.trx_started) as trx_age_seconds, t.trx_rows_modified, t.trx_isolation_level FROM information_schema.processlist p LEFT JOIN information_schema.innodb_trx t ON p.id = t.trx_mysql_thread_id;

セッションを特定する際、次のようなオプションが含まれます。

  • アプリケーションの所有者またはユーザーにお問い合わせください。

  • ブロッキングセッションがアイドル状態の場合は、ブロッキングセッションを終了することを検討してください。このアクションは、長いロールバックをトリガーする可能性があります。セッションを終了する方法については、Amazon RDS ユーザーガイドセッションやクエリの終了を参照してください。

ブロックトランザクションの識別の詳細については、MySQL ドキュメントのInnoDB トランザクションの使用と情報のロックを参照してください。

InnoDB 以外のテンポラリテーブル

InnoDB 以外のテンポラリテーブルを使用している場合、データベースは行レベルのロックを使用しないため、テーブルロックが発生する可能性があります。MyISAMMEMORY テーブルは、InnoDB 以外のテンポラリテーブルの例です。InnoDB 以外のテンポラリテーブルを使用している場合は、InnoDB メモリテーブルへの切り替えを検討してください。