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


27.12.9 パフォーマンススキーマ接続属性テーブル

接続属性は、アプリケーションプログラムが接続時にサーバーに渡すことができるキーと値のペアです。 libmysqlclient クライアントライブラリによって実装される C API に基づくアプリケーションの場合、mysql_options() および mysql_options4() 関数によって接続属性セットが定義されます。 他の MySQL コネクタは、独自の属性定義メソッドを提供する場合があります。

「これらのパフォーマンススキーマ」テーブルでは、属性情報が公開されます:

  • session_account_connect_attrs: 現在のセッションおよびセッションアカウントに関連付けられている他のセッションの接続属性

  • session_connect_attrs: すべてのセッションの接続属性。

また、監査ログに書き込まれる接続イベントには、接続属性が含まれる場合があります。 セクション6.4.5.4「監査ログファイル形式」を参照してください。

アンダースコア (_) で始まる属性名は内部使用のために予約されているため、アプリケーションプログラムで作成しないでください。 この規則により、アプリケーション属性と競合せずに MySQL で新しい属性を導入でき、内部属性と競合しない独自の属性をアプリケーションプログラムで定義できます。

使用可能な接続属性

特定の接続内に表示される接続属性のセットは、プラットフォーム、接続の確立に使用される MySQL Connector、クライアントプログラムなどの要因によって異なります。

libmysqlclient クライアントライブラリは、次の属性を設定します:

  • _client_name: クライアント名 (クライアントライブラリの libmysql)。

  • _client_version: クライアントライブラリのバージョン。

  • _os: オペレーティングシステム (LinuxWin64 など)。

  • _pid: クライアントプロセス ID。

  • _platform: マシンプラットフォーム (例: x86_64)。

  • _thread: クライアントスレッド ID (Windows のみ)。

他の MySQL コネクタでは、独自の接続属性を定義できます。

MySQL Connector/C++ 8.0.16 以上では、X DevAPI または X DevAPI for C を使用するアプリケーションに対して次の属性が定義されます:

  • _client_license: コネクタライセンス (GPL-2.0 など)。

  • _client_name: コネクタ名 (mysql-connector-cpp)。

  • _client_version: コネクタバージョン。

  • _os: オペレーティングシステム (LinuxWin64 など)。

  • _pid: クライアントプロセス ID。

  • _platform: マシンプラットフォーム (例: x86_64)。

  • _source_host: クライアントが実行されているマシンのホスト名。

  • _thread: クライアントスレッド ID (Windows のみ)。

MySQL Connector/J では、次の属性が定義されます:

  • _client_name: クライアント名

  • _client_version: クライアントライブラリバージョン

  • _os: オペレーティングシステム (LinuxWin64 など)

  • _client_license: コネクタライセンスタイプ

  • _platform: マシンプラットフォーム (x86_64 など)

  • _runtime_vendor: Java ランタイム環境 (JRE) ベンダー

  • _runtime_version: Java ランタイム環境 (JRE) のバージョン

MySQL Connector/NET では、次の属性が定義されます:

  • _client_version: クライアントライブラリのバージョン。

  • _os: オペレーティングシステム (LinuxWin64 など)。

  • _pid: クライアントプロセス ID。

  • _platform: マシンプラットフォーム (例: x86_64)。

  • _program_name: クライアント名。

  • _thread: クライアントスレッド ID (Windows のみ)。

PHP は、コンパイル方法に依存する属性を定義します:

  • libmysqlclient を使用してコンパイル: 前に説明した標準の libmysqlclient 属性。

  • mysqlnd を使用してコンパイル: mysqlnd の値を持つ_client_name 属性のみ。

多くの MySQL クライアントプログラムは、クライアント名と等しい値を持つ program_name 属性を設定します。 たとえば、mysqladmin および mysqldump は、program_namemysqladmin および mysqldump にそれぞれ設定します。MySQL Shell は、program_namemysqlsh に設定します。

一部の MySQL クライアントプログラムでは、追加の属性が定義されます:

  • mysql (MySQL 8.0.17 の時点):

    • os_user: プログラムを実行しているオペレーティングシステムユーザーの名前。 Unix および Unix に似たシステムおよび Windows で使用できます。

    • os_sudouser: SUDO_USER 環境変数の値。 Unix および Unix に似たシステムで使用できます。

    値が空の mysql 接続属性は送信されません。

  • mysqlbinlog:

    • _client_role: binary_log_listener

  • レプリカ接続:

    • program_name: mysqld

    • _client_role: binary_log_listener

    • _client_replication_channel_name: チャネル名。

  • FEDERATED ストレージエンジン接続:

    • program_name: mysqld

    • _client_role: federated_storage

接続属性制限

クライアントからサーバーに送信される接続属性データの量には制限があります:

  • 接続時間の前にクライアントによって課される固定制限。

  • 接続時にサーバーによって課される固定制限。

  • 接続時にパフォーマンススキーマによって課される構成可能な制限。

C API を使用して開始された接続の場合、libmysqlclient ライブラリでは、クライアント側の接続属性データの集計サイズに 64KB の制限が課されます: この制限を超える mysql_options() をコールすると、CR_INVALID_PARAMETER_NO エラーが発生します。 他の MySQL コネクタでは、サーバーに送信できる接続属性データの量に独自のクライアント側制限が課される場合があります。

サーバー側では、接続属性データに対する次のサイズチェックが行われます:

  • サーバーは、受け入れる接続属性データの集計サイズに 64KB の制限を課します。 クライアントが 64KB を超える属性データを送信しようとすると、サーバーは接続を拒否します。 それ以外の場合、サーバーは属性バッファが有効であるとみなし、Performance_schema_session_connect_attrs_longest_seen ステータス変数で最も長いバッファのサイズを追跡します。

  • 受け入れられる接続の場合、パフォーマンススキーマは performance_schema_session_connect_attrs_size システム変数の値に対して集約属性サイズをチェックします。 属性サイズがこの値を超えると、次のアクションが実行されます:

    • パフォーマンススキーマは属性データを切り捨て、Performance_schema_session_connect_attrs_lost ステータス変数を増分します。これは、属性の切り捨てが発生した接続の数を示します。

    • log_error_verbosity システム変数が 1 より大きい場合、パフォーマンススキーマはエラーメッセージをエラーログに書き込みます:

      Connection attributes of length N were truncated
      (N bytes lost)
      for connection N, user user_name@host_name
      (as user_name), auth: {yes|no}

      警告メッセージの情報は、DBA が属性の切捨てが発生したクライアントを識別するのに役立ちます。

    • 属性バッファに十分な領域がある場合は、失われたバイト数を示す値とともに_truncated 属性がセッション属性に追加されます。 これにより、パフォーマンススキーマは接続属性テーブルで接続ごとの切り捨て情報を公開できます。 この情報は、エラーログを確認せずに調べることができます。


関連キーワード:  テーブル, 属性, 接続, パフォーマンス, スキーマ, events, replication, 変数, 定義, 制限