MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  MySQL パフォーマンススキーマ  /  現在および過去のイベントのパフォーマンススキーマテーブル

27.9 現在および過去のイベントのパフォーマンススキーマテーブル

wait、stage、statement、および transaction イベントの場合、パフォーマンススキーマは現在のイベントをモニターおよび格納できます。 また、イベントが終了すると、パフォーマンススキーマはそれらを履歴テーブルに格納できます。 イベントタイプごとに、パフォーマンススキーマは現在のイベントと履歴イベントの格納に 3 つのテーブルを使用します。 テーブルには次の形式の名前があります。ここで、xxx はイベントタイプ (waits, stages, statements, transactions) を示します:

  • events_xxx_current: 現在のイベントテーブルには、各スレッド (スレッドごとに 1 行) の現在の監視対象イベントが格納されます。

  • events_xxx_history: 最近の履歴テーブルには、スレッドごとに終了した最新のイベントが格納されます (スレッド当たりの最大行数まで)。

  • events_xxx_history_long: 長い履歴テーブルには、グローバルに終了した最新のイベントが格納されます (すべてのスレッドで、テーブル当たりの最大行数まで)。

各イベントタイプの_current テーブルにはスレッドごとに 1 つの行が含まれるため、その最大サイズを構成するためのシステム変数はありません。 パフォーマンススキーマは、個々の履歴テーブルを説明するセクションに示されているように、テーブル固有のシステム変数を使用して、サーバーの起動時に履歴テーブルのサイズを自動設定するか、サイズを明示的に構成できます。 一般的な自動サイズ設定された値は、_history テーブルではスレッドごとに 10 行、_history_long テーブルでは合計 10,000 行です。

イベントタイプごとに、_current_history および_history_long の各テーブルに同じカラムがあります。 _current テーブルと_history テーブルのインデックス付けは同じです。 _history_long テーブルにインデックス付けがありません。

_current テーブルには、サーバー内で現在何が起こっているかが表示されます。 現在のイベントが終了すると、その_current テーブルから削除されます。

_history および_history_long のテーブルには、最近行われたことが表示されます。 履歴テーブルがいっぱいになると、新しいイベントが追加されると古いイベントは破棄されます。 テーブルの目的が異なるため、_history テーブルと_history_long テーブルの行は様々な方法で期限切れになります:

  • _history は、グローバルサーバーの負荷に関係なく、個々のスレッドを調査することを目的としています。

  • _history_long は、各スレッドではなくグローバルにサーバーを調査することを目的としています。

2 つのタイプの履歴テーブルの違いは、データ保存ポリシーに関連します。 イベントが最初に表示されたときに、両方のテーブルに同じデータが含まれています。 ただし、各テーブル内のデータは時間の経過とともに異なる期限が切れるため、各テーブルでデータが長期間または短時間保持される可能性があります:

  • _history では、テーブルに特定のスレッドの最大行数が含まれている場合、そのスレッドの新しい行が追加されると、最も古いスレッド行は破棄されます。

  • _history_long では、テーブルがいっぱいになると、いずれかの行を生成したスレッドに関係なく、新しい行が追加されたときに最も古い行が破棄されます。

スレッドが終了すると、そのすべての行は_history テーブルから破棄されますが、_history_long テーブルからは破棄されません。

次の例は、2 つのタイプの履歴テーブルに対してイベントを追加および破棄する方法の違いを示しています。 原則はすべてのイベントタイプに均等に適用されます。 この例は、次の前提に基づいています:

  • パフォーマンススキーマは、スレッドあたり 10 行を_history テーブルに保持し、合計 10,000 行を_history_long テーブルに保持するように構成されています。

  • スレッド A は 1 秒当たり 1 つのイベントを生成します。

    スレッド B は 100 イベント/秒を生成します。

  • 他のスレッドは実行されていません。

5 秒後:

  • A および B は、それぞれ 5 および 500 のイベントを生成しました。

  • _history には、A に 5 行、B に 10 行が含まれています。 スレッド当たりの記憶域は 10 行に制限されているため、A の行は破棄されていませんが、B の 490 行は破棄されています。

  • _history_long には、A は 5 行、B は 500 行が含まれています。 テーブルの最大サイズは 10,000 行であるため、いずれのスレッドでも破棄された行はありません。

実行の 5 分 (300 秒) 後:

  • A および B は、それぞれ 300 および 30,000 個のイベントを生成しました。

  • _history には、A に 10 行、B に 10 行が含まれています。 スレッド当たりの記憶域は 10 行に制限されているため、A の 290 行は破棄されましたが、B の 29,990 行は破棄されました。 A の行には最大 10 秒経過したデータが含まれ、B の行には最大 .1 秒経過したデータのみが含まれます。

  • _history_long には 10,000 行が含まれます。 A と B はともに 101 イベント/秒を生成するため、テーブルには A ではなく B から約 100 から 1 の行が混在した、約 10,000/101 = 99 秒前までのデータが含まれます。


関連キーワード:  テーブル, history, イベント, パフォーマンス, スキーマ, long, events, replication, 破棄, 変数