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


MySQL 8.0 リファレンスマニュアル  /  関数と演算子  /  パフォーマンススキーマ関数

12.22 パフォーマンススキーマ関数

MySQL 8.0.16 の時点では、MySQL には、パフォーマンススキーマデータを書式設定または取得する組込み SQL 関数が含まれており、対応する sys スキーマストアドファンクションの同等の機能として使用できます。 組込み関数は、sys. スキーマ修飾子を必要とする sys 関数や、sys が現在のスキーマである sys 関数とは異なり、任意のスキーマで起動でき、修飾子は必要ありません。

表 12.27 「パフォーマンススキーマ関数」

名前 説明 導入
FORMAT_BYTES() バイト数を単位付きの値に変換 8.0.16
FORMAT_PICO_TIME() 時間をピコ秒単位で値に変換 8.0.16
PS_CURRENT_THREAD_ID() 現在のスレッドのパフォーマンススキーマスレッド ID 8.0.16
PS_THREAD_ID() 指定されたスレッドのパフォーマンススキーマスレッド ID 8.0.16

組込み関数は、非推奨の対応する sys 関数よりも優先されます。将来のバージョンの MySQL で削除される予定です。 sys 関数を使用するアプリケーションは、かわりに組込み関数を使用するように調整する必要があります。sys 関数と組込み関数の若干の違いに注意してください。 これらの違いの詳細は、このセクションの関数の説明を参照してください。

  • FORMAT_BYTES(count)

    数値バイト数を指定すると、人間が読める形式に変換され、値と単位インジケータで構成される文字列が返されます。 文字列には、小数点以下 2 桁に丸められたバイト数と、3 桁以上の有効桁数が含まれます。 1024 バイト未満の数値は整数として表され、丸められません。

    単位インジケータは、次のテーブルに示すようにバイトカウント引数のサイズによって異なります。

    引数値 結果単位 結果ユニットインジケータ
    1023 まで バイト バイト
    1024 2− 1 まで キビバイト KiB
    1024 3− 1 まで mebibytes MiB
    1024 4− 1 まで gibibytes GiB
    1024 5− 1 まで テビバイト TiB
    1024 6− 1 まで ペビバイト PiB
    1024 以上の 6 exbibytes EiB
    mysql> SELECT FORMAT_BYTES(512), FORMAT_BYTES(18446644073709551615);
    +-------------------+------------------------------------+
    | FORMAT_BYTES(512) | FORMAT_BYTES(18446644073709551615) |
    +-------------------+------------------------------------+
    |  512 bytes        | 16.00 EiB                          |
    +-------------------+------------------------------------+

    FORMAT_BYTES() が MySQL 8.0.16 に追加されました。 sys スキーマ format_bytes() 関数のかわりに使用でき、次の違いに注意してください:

    • FORMAT_BYTES() では、EiB ユニットインジケータが使用されます。sys.format_bytes() ではサポートされません。

  • FORMAT_PICO_TIME(time_val)

    数値のパフォーマンススキーマレイテンシまたは待機時間をピコ秒単位で指定すると、それを人間が読める形式に変換し、値と単位インジケータで構成される文字列を返します。 文字列には、小数点以下 2 桁に丸められた小数点以下の桁数と、3 桁以上の有効桁数が含まれます。 1 ナノ秒未満の時間は整数で表され、丸められません。

    単位インジケータは、次のテーブルに示すように、time-value 引数のサイズによって異なります。

    引数値 結果単位 結果ユニットインジケータ
    最大 10 3− 1 ピコ秒 ps
    最大 10 6− 1 ナノ秒 ns
    最大 10 9− 1 マイクロ秒 us
    最大 10 12− 1 ミリ秒 ms
    最大 60× 10 12− 1 s
    3.6× 10 15− 1 まで minutes min
    8.64× 10 16− 1 まで hours h
    8.64× 10 16 以上 days d
    mysql> SELECT FORMAT_PICO_TIME(3501), FORMAT_PICO_TIME(188732396662000);
    +------------------------+-----------------------------------+
    | FORMAT_PICO_TIME(3501) | FORMAT_PICO_TIME(188732396662000) |
    +------------------------+-----------------------------------+
    | 3.50 ns                | 3.15 min                          |
    +------------------------+-----------------------------------+

    FORMAT_PICO_TIME() が MySQL 8.0.16 に追加されました。 sys スキーマ format_time() 関数のかわりに使用でき、次の相違点に注意してください:

    • 分を示すために、sys.format_time() では m ユニットインジケータを使用し、FORMAT_PICO_TIME() では min を使用します。

    • sys.format_time() では、w (週) 単位インジケータが使用されます。 FORMAT_PICO_TIME() はそうではありません。

  • PS_CURRENT_THREAD_ID()

    現在の接続に割り当てられているパフォーマンススキーマスレッド ID を表す BIGINT UNSIGNED 値を返します。

    スレッド ID の戻り値は、「パフォーマンススキーマ」テーブルの THREAD_ID カラムで指定された型の値です。

    パフォーマンススキーマの構成は、PS_THREAD_ID() の場合と同様に PS_CURRENT_THREAD_ID() に影響します。 詳細は、その関数の説明を参照してください。

    mysql> SELECT PS_CURRENT_THREAD_ID();
    +------------------------+
    | PS_CURRENT_THREAD_ID() |
    +------------------------+
    |                     52 |
    +------------------------+
    mysql> SELECT PS_THREAD_ID(CONNECTION_ID());
    +-------------------------------+
    | PS_THREAD_ID(CONNECTION_ID()) |
    +-------------------------------+
    |                            52 |
    +-------------------------------+

    PS_CURRENT_THREAD_ID() が MySQL 8.0.16 に追加されました。 これは、NULL または CONNECTION_ID() の引数を使用して sys スキーマ ps_thread_id() 関数を起動するショートカットとして使用できます。

  • PS_THREAD_ID(connection_id)

    接続 ID を指定すると、接続 ID に割り当てられたパフォーマンススキーマスレッド ID を表す BIGINT UNSIGNED 値を返します。接続 ID のスレッド ID が存在しない場合は、NULL を返します。 後者は、インストゥルメントされていないスレッドで発生する可能性があります。

    接続 ID 引数は、パフォーマンススキーマ threads テーブルの PROCESSLIST_ID カラムまたは SHOW PROCESSLIST 出力の Id カラムで指定されたタイプの値です。

    スレッド ID の戻り値は、「パフォーマンススキーマ」テーブルの THREAD_ID カラムで指定された型の値です。

    パフォーマンススキーマの構成は、次のように PS_THREAD_ID() の操作に影響します。 (これらの備考は、PS_CURRENT_THREAD_ID() にも適用されます。)

    • thread_instrumentation コンシューマを無効にすると、スレッドレベルでの統計の収集および集計は無効になりますが、PS_THREAD_ID() には影響しません。

    • performance_schema_max_thread_instances が 0 でない場合、パフォーマンススキーマはスレッド統計用にメモリーを割り当て、インスタンスメモリーが使用可能な各スレッドに内部 ID を割り当てます。 インスタンスメモリーが使用できないスレッドがある場合、PS_THREAD_ID()NULL を返します。この場合、Performance_schema_thread_instances_lost はゼロ以外です。

    • performance_schema_max_thread_instances が 0 の場合、パフォーマンススキーマはスレッドメモリーを割り当てず、PS_THREAD_ID()NULL を返します。

    • パフォーマンススキーマ自体が無効になっている場合、PS_THREAD_ID() はエラーを生成します。

    mysql> SELECT PS_THREAD_ID(6);
    +-----------------+
    | PS_THREAD_ID(6) |
    +-----------------+
    |              45 |
    +-----------------+

    PS_THREAD_ID() が MySQL 8.0.16 に追加されました。 sys スキーマ ps_thread_id() 関数のかわりに使用でき、次の違いに注意してください:

    • NULL の引数を指定すると、sys.ps_thread_id() は現在の接続のスレッド ID を返し、PS_THREAD_ID()NULL を返します。 現在の接続スレッド ID を取得するには、かわりに PS_CURRENT_THREAD_ID() を使用します。


関連キーワード:  関数, スキーマ, sys, FORMAT, パフォーマンス, 空間, 単位, PICO, インジケータ, BYTES