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()
を使用します。