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


27.12.13.4 table_handles テーブル

パフォーマンススキーマは、table_handles テーブルを介してテーブルロック情報を公開し、開いているテーブルハンドルごとに現在有効なテーブルロックを表示します。table_handles では、テーブルロックインストゥルメンテーションによって記録される内容がレポートされます。 この情報には、サーバーが開いているテーブルハンドル、ロック方法、およびセッションが表示されます。

table_handles テーブルは読取り専用であり、更新できません。 デフォルトでは自動サイズ設定されています。テーブルサイズを構成するには、サーバーの起動時に performance_schema_max_table_handles システム変数を設定します。

テーブルロックのインストゥルメンテーションでは、デフォルトで有効になっている wait/lock/table/sql/handler インストゥルメントが使用されます。

サーバー起動時のテーブルロックのインストゥルメンテーション状態を制御するには、my.cnf ファイルで次のような行を使用します:

  • 有効化:

    [mysqld]
    performance-schema-instrument='wait/lock/table/sql/handler=ON'
  • 無効化:

    [mysqld]
    performance-schema-instrument='wait/lock/table/sql/handler=OFF'

実行時にテーブルロックのインストゥルメンテーション状態を制御するには、setup_instruments テーブルを更新します:

  • 有効化:

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'YES', TIMED = 'YES'
    WHERE NAME = 'wait/lock/table/sql/handler';
  • 無効化:

    UPDATE performance_schema.setup_instruments
    SET ENABLED = 'NO', TIMED = 'NO'
    WHERE NAME = 'wait/lock/table/sql/handler';

table_handles テーブルには、次のカラムがあります:

  • OBJECT_TYPE

    テーブルハンドルによってオープンされたテーブル。

  • OBJECT_SCHEMA

    オブジェクトを格納するスキーマ。

  • OBJECT_NAME

    インストゥルメントされたオブジェクトの名前。

  • OBJECT_INSTANCE_BEGIN

    メモリー内のテーブルハンドルアドレス。

  • OWNER_THREAD_ID

    テーブルハンドルを所有するスレッド。

  • OWNER_EVENT_ID

    テーブルハンドルがオープンされる原因となったイベント。

  • INTERNAL_LOCK

    SQL レベルで使用されるテーブルロック。 値は、READ, READ WITH SHARED LOCKS, READ HIGH PRIORITY, READ NO INSERT, WRITE ALLOW WRITE, WRITE CONCURRENT INSERT, WRITE LOW PRIORITY または WRITE のいずれかです。 これらのロックタイプについては、include/thr_lock.h ソースファイルを参照してください。

  • EXTERNAL_LOCK

    ストレージエンジンレベルで使用されるテーブルロック。 値は、READ EXTERNAL または WRITE EXTERNAL のいずれかです。

table_handles テーブルには次のインデックスがあります:

  • 主キー (OBJECT_INSTANCE_BEGIN)

  • (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME) のインデックス

  • (OWNER_THREAD_IDOWNER_EVENT_ID) のインデックス

TRUNCATE TABLE は、table_handles テーブルに対して許可されていません。


関連キーワード:  テーブル, スキーマ, パフォーマンス, events, replication, handles, ロック, history, 変数, OBJECT