MySQL 包含內建的 SQL 函數,可格式化或擷取 Performance Schema 資料,並且可以作為對應 sys
結構描述儲存函數的等效函數使用。與 sys
函數不同,內建函數可以在任何結構描述中呼叫,且不需要限定詞,而 sys
函數需要 sys.
結構描述限定詞,或 sys
為目前的結構描述。
表 14.32 Performance Schema 函數
名稱 | 描述 |
---|---|
FORMAT_BYTES() |
將位元組計數轉換為帶單位的數值 |
FORMAT_PICO_TIME() |
將皮秒時間轉換為帶單位的數值 |
PS_CURRENT_THREAD_ID() |
目前執行緒的 Performance Schema 執行緒 ID |
PS_THREAD_ID() |
給定執行緒的 Performance Schema 執行緒 ID |
內建函數取代對應的 sys
函數,後者已棄用;預計在未來版本的 MySQL 中將會移除。使用 sys
函數的應用程式應調整為改用內建函數,並記住 sys
函數與內建函數之間的一些細微差異。有關這些差異的詳細資訊,請參閱本節中的函數描述。
給定數值位元組計數,將其轉換為人類可讀的格式,並傳回包含數值和單位指示器的字串。該字串包含四捨五入到小數點後 2 位,且至少 3 位有效數字的位元組數。小於 1024 位元組的數字表示為整數,且不四捨五入。如果
count
為NULL
,則傳回NULL
。單位指示器取決於位元組計數引數的大小,如下表所示。
引數值 結果單位 結果單位指示器 最多 1023 位元組 位元組 最多 10242 − 1 千位元組 KiB 最多 10243 − 1 百萬位元組 MiB 最多 10244 − 1 吉位元組 GiB 最多 10245 − 1 太位元組 TiB 最多 10246 − 1 拍位元組 PiB 10246 及以上 艾位元組 EiB mysql> SELECT FORMAT_BYTES(512), FORMAT_BYTES(18446644073709551615); +-------------------+------------------------------------+ | FORMAT_BYTES(512) | FORMAT_BYTES(18446644073709551615) | +-------------------+------------------------------------+ | 512 bytes | 16.00 EiB | +-------------------+------------------------------------+
FORMAT_BYTES()
可用於取代sys
結構描述format_bytes()
函數,但請記住此差異FORMAT_BYTES()
使用EiB
單位指示器。sys.format_bytes()
不使用。
給定數值的 Performance Schema 延遲或等待時間 (以皮秒為單位),將其轉換為人類可讀的格式,並傳回包含數值和單位指示器的字串。該字串包含四捨五入到小數點後 2 位,且至少 3 位有效數字的十進位時間。小於 1 奈秒的時間表示為整數,且不四捨五入。
如果
time_val
為NULL
,則此函數傳回NULL
。單位指示器取決於時間值引數的大小,如下表所示。
引數值 結果單位 結果單位指示器 最多 103 − 1 皮秒 ps 最多 106 − 1 奈秒 ns 最多 109 − 1 微秒 us 最多 1012 − 1 毫秒 ms 最多 60×1012 − 1 秒 s 最多 3.6×1015 − 1 分鐘 min 最多 8.64×1016 − 1 小時 h 8.64×1016 及以上 天 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()
可用於取代sys
結構描述format_time()
函數,但請記住這些差異為了表示分鐘,
sys.format_time()
使用m
單位指示符,而FORMAT_PICO_TIME()
則使用min
。sys.format_time()
使用w
(週) 單位指示符。FORMAT_PICO_TIME()
則不使用。
傳回一個
BIGINT UNSIGNED
值,表示指派給目前連線的 Performance Schema 執行緒 ID。傳回的執行緒 ID 值是 Performance Schema 表格中
THREAD_ID
欄位中給定的類型值。Performance Schema 配置會以與
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()
可以作為呼叫sys
schemaps_thread_id()
函數時,使用NULL
或CONNECTION_ID()
作為引數的快捷方式。給定一個連線 ID,傳回一個
BIGINT UNSIGNED
值,表示指派給該連線 ID 的 Performance Schema 執行緒 ID;如果該連線 ID 沒有執行緒 ID,則傳回NULL
。後者可能發生在未檢測的執行緒,或connection_id
為NULL
的情況。連線 ID 引數是 Performance Schema
threads
表格的PROCESSLIST_ID
欄位中,或SHOW PROCESSLIST
輸出的Id
欄位中給定的類型值。傳回的執行緒 ID 值是 Performance Schema 表格中
THREAD_ID
欄位中給定的類型值。Performance Schema 配置會以下列方式影響
PS_THREAD_ID()
的運作。(這些說明也適用於PS_CURRENT_THREAD_ID()
。)停用
thread_instrumentation
消費者會停用在執行緒層級收集和彙總統計資料,但不會影響PS_THREAD_ID()
。如果
performance_schema_max_thread_instances
不為 0,Performance Schema 會為執行緒統計資料配置記憶體,並為每個可用的執行緒執行個體記憶體指派一個內部 ID。如果有些執行緒沒有可用的執行個體記憶體,PS_THREAD_ID()
會傳回NULL
;在這種情況下,Performance_schema_thread_instances_lost
不為零。如果
performance_schema_max_thread_instances
為 0,Performance Schema 不會配置執行緒記憶體,並且PS_THREAD_ID()
會傳回NULL
。如果 Performance Schema 本身已停用,
PS_THREAD_ID()
會產生錯誤。
mysql> SELECT PS_THREAD_ID(6); +-----------------+ | PS_THREAD_ID(6) | +-----------------+ | 45 | +-----------------+
PS_THREAD_ID()
可以用來替代sys
schema 的ps_thread_id()
函數,請記住這個差異當引數為
NULL
時,sys.ps_thread_id()
會傳回目前連線的執行緒 ID,而PS_THREAD_ID()
則會傳回NULL
。若要取得目前連線執行緒 ID,請改用PS_CURRENT_THREAD_ID()
。