As of MySQL 8.0.16, MySQL includes built-in SQL functions that
format or retrieve Performance Schema data, and that may be used
as equivalents for the corresponding sys
schema
stored functions. The built-in functions can be invoked in any
schema and require no qualifier, unlike the sys
functions, which require either a sys.
schema
qualifier or that sys
be the current schema.
Table 14.31 Performance Schema Functions
Name | Description | Introduced |
---|---|---|
FORMAT_BYTES() |
Convert byte count to value with units | 8.0.16 |
FORMAT_PICO_TIME() |
Convert time in picoseconds to value with units | 8.0.16 |
PS_CURRENT_THREAD_ID() |
Performance Schema thread ID for current thread | 8.0.16 |
PS_THREAD_ID() |
Performance Schema thread ID for given thread | 8.0.16 |
The built-in functions supersede the corresponding
sys
functions, which are deprecated; expect
them to be removed in a future version of MySQL. Applications that
use the sys
functions should be adjusted to use
the built-in functions instead, keeping in mind some minor
differences between the sys
functions and the
built-in functions. For details about these differences, see the
function descriptions in this section.
Given a numeric byte count, converts it to human-readable format and returns a string consisting of a value and a units indicator. The string contains the number of bytes rounded to 2 decimal places and a minimum of 3 significant digits. Numbers less than 1024 bytes are represented as whole numbers and are not rounded. Returns
NULL
ifcount
isNULL
.The units indicator depends on the size of the byte-count argument as shown in the following table.
Argument Value Result Units Result Units Indicator Up to 1023 bytes bytes Up to 10242 − 1 kibibytes KiB Up to 10243 − 1 mebibytes MiB Up to 10244 − 1 gibibytes GiB Up to 10245 − 1 tebibytes TiB Up to 10246 − 1 pebibytes PiB 10246 and up exbibytes EiB mysql> SELECT FORMAT_BYTES(512), FORMAT_BYTES(18446644073709551615); +-------------------+------------------------------------+ | FORMAT_BYTES(512) | FORMAT_BYTES(18446644073709551615) | +-------------------+------------------------------------+ | 512 bytes | 16.00 EiB | +-------------------+------------------------------------+
FORMAT_BYTES()
was added in MySQL 8.0.16. It may be used instead of thesys
schemaformat_bytes()
function, keeping in mind this difference:FORMAT_BYTES()
uses theEiB
units indicator.sys.format_bytes()
does not.
Given a numeric Performance Schema latency or wait time in picoseconds, converts it to human-readable format and returns a string consisting of a value and a units indicator. The string contains the decimal time rounded to 2 decimal places and a minimum of 3 significant digits. Times under 1 nanosecond are represented as whole numbers and are not rounded.
If
time_val
isNULL
, this function returnsNULL
.The units indicator depends on the size of the time-value argument as shown in the following table.
Argument Value Result Units Result Units Indicator Up to 103 − 1 picoseconds ps Up to 106 − 1 nanoseconds ns Up to 109 − 1 microseconds us Up to 1012 − 1 milliseconds ms Up to 60×1012 − 1 seconds s Up to 3.6×1015 − 1 minutes min Up to 8.64×1016 − 1 hours h 8.64×1016 and up 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()
was added in MySQL 8.0.16. It may be used instead of thesys
schemaformat_time()
function, keeping in mind these differences:To indicate minutes,
sys.format_time()
uses them
units indicator, whereasFORMAT_PICO_TIME()
usesmin
.sys.format_time()
uses thew
(weeks) units indicator.FORMAT_PICO_TIME()
does not.
Returns a
BIGINT UNSIGNED
value representing the Performance Schema thread ID assigned to the current connection.The thread ID return value is a value of the type given in the
THREAD_ID
column of Performance Schema tables.Performance Schema configuration affects
PS_CURRENT_THREAD_ID()
the same way as forPS_THREAD_ID()
. For details, see the description of that function.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()
was added in MySQL 8.0.16. It may be used as a shortcut for invoking thesys
schemaps_thread_id()
function with an argument ofNULL
orCONNECTION_ID()
.Given a connection ID, returns a
BIGINT UNSIGNED
value representing the Performance Schema thread ID assigned to the connection ID, orNULL
if no thread ID exists for the connection ID. The latter can occur for threads that are not instrumented, or ifconnection_id
isNULL
.The connection ID argument is a value of the type given in the
PROCESSLIST_ID
column of the Performance Schemathreads
table or theId
column ofSHOW PROCESSLIST
output.The thread ID return value is a value of the type given in the
THREAD_ID
column of Performance Schema tables.Performance Schema configuration affects
PS_THREAD_ID()
operation as follows. (These remarks also apply toPS_CURRENT_THREAD_ID()
.)Disabling the
thread_instrumentation
consumer disables statistics from being collected and aggregated at the thread level, but has no effect onPS_THREAD_ID()
.If
performance_schema_max_thread_instances
is not 0, the Performance Schema allocates memory for thread statistics and assigns an internal ID to each thread for which instance memory is available. If there are threads for which instance memory is not available,PS_THREAD_ID()
returnsNULL
; in this case,Performance_schema_thread_instances_lost
is nonzero.If
performance_schema_max_thread_instances
is 0, the Performance Schema allocates no thread memory andPS_THREAD_ID()
returnsNULL
.If the Performance Schema itself is disabled,
PS_THREAD_ID()
produces an error.
mysql> SELECT PS_THREAD_ID(6); +-----------------+ | PS_THREAD_ID(6) | +-----------------+ | 45 | +-----------------+
PS_THREAD_ID()
was added in MySQL 8.0.16. It may be used instead of thesys
schemaps_thread_id()
function, keeping in mind this difference:With an argument of
NULL
,sys.ps_thread_id()
returns the thread ID for the current connection, whereasPS_THREAD_ID()
returnsNULL
. To obtain the current connection thread ID, usePS_CURRENT_THREAD_ID()
instead.