25.12.6.4 Таблица prepared_statements_instances
Схема производительности предоставляет средства инструментирования для подготовленных запросов, для которых существуют два протокола:
-
Бинарный протокол. К нему осуществляется доступ через API MySQL C и он отображается на соответствующие серверные команды, как показано в следующей таблице.
Функция API C Соответствующая серверная команда COM_STMT_PREPARECOM_STMT_EXECUTECOM_STMT_CLOSE -
Текстовый протокол. К нему осуществляется доступ с помощью SQL-запросов, и он отображается на соответствующие серверные команды, как показано в следующей таблице.
SQL-запрос Соответствующая серверная команда PREPARESQLCOM_PREPAREEXECUTESQLCOM_EXECUTEDEALLOCATE PREPARE,DROP PREPARESQLCOM_DEALLOCATE PREPARE
Средства инструментирования для подготовленных запросов схемы производительности охватывают оба протокола. Далее в обсуждении используются серверные команды, а не функции API C или SQL-запросы.
Информация о подготовленных запросах доступна в таблице prepared_statements_instances. Эта таблица позволяет инспектировать подготовленные запросы, используемые на сервере, и предоставляет агрегированные статистические данные о них. Для управления размером этой таблицы установите системную переменную performance_schema_max_prepared_statements_instances при запуске сервера.
Сбор информации о подготовленных запросах зависит от средств инструментирования запросов, показанных в следующей таблице. Эти средства инструментирования включены по умолчанию. Для их изменения обновите таблицу setup_instruments.
| Средство инструментирования | Серверная команда |
|---|---|
statement/com/Prepare | COM_STMT_PREPARE |
statement/com/Execute | COM_STMT_EXECUTE |
statement/sql/prepare_sql | SQLCOM_PREPARE |
statement/sql/execute_sql | SQLCOM_EXECUTE |
Схема производительности управляет содержимым таблицы prepared_statements_instances следующим образом:
-
Подготовка запроса
Команда
COM_STMT_PREPAREилиSQLCOM_PREPAREсоздаёт подготовленный запрос на сервере. Если запрос успешно инструментирован, в таблицуprepared_statements_instancesдобавляется новая строка. Если запрос не может быть инструментирован, увеличивается значение переменной состоянияPerformance_schema_prepared_statements_lost. -
Выполнение подготовленного запроса
Выполнение команды
COM_STMT_EXECUTEилиSQLCOM_PREPAREдля экземпляра подготовленного запроса, который был инструментирован, обновляет соответствующую строку таблицыprepared_statements_instances. -
Деактивация подготовленного запроса
Выполнение команды
COM_STMT_CLOSEилиSQLCOM_DEALLOCATE_PREPAREдля экземпляра подготовленного запроса, который был инструментирован, удаляет соответствующую строку таблицыprepared_statements_instances. Чтобы избежать утечек ресурсов, удаление происходит даже в случае, если средства инструментирования подготовленного запроса, описанные ранее, отключены.
Таблица prepared_statements_instances содержит следующие столбцы:
-
OBJECT_INSTANCE_BEGINАдрес в памяти инструментированного подготовленного запроса.
-
STATEMENT_IDВнутренний идентификатор запроса, назначенный сервером. Текстовый и бинарный протоколы оба используют идентификаторы запросов.
-
STATEMENT_NAMEДля бинарного протокола этот столбец —
NULL. Для текстового протокола этот столбец — внешнее имя запроса, назначенное пользователем. Например, для следующего SQL-запроса имя подготовленного запроса —stmt:PREPARE stmt FROM 'SELECT 1';
-
SQL_TEXTТекст подготовленного запроса с маркерами заполнителей
?. -
OWNER_THREAD_ID,OWNER_EVENT_IDЭти столбцы указывают на событие, которое создало подготовленный запрос.
-
OWNER_OBJECT_TYPE,OWNER_OBJECT_SCHEMA,OWNER_OBJECT_NAMEДля подготовленного запроса, созданного сеансом клиента, эти столбцы —
NULL. Для подготовленного запроса, созданного хранимой процедурой, эти столбцы указывают на хранимую процедуру. Типичная ошибка пользователя — забыть деактивировать подготовленные запросы. Эти столбцы можно использовать для поиска хранимых процедур, которые утечка подготовленных запросов:SELECT OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME, STATEMENT_NAME, SQL_TEXT FROM performance_schema.prepared_statements_instances WHERE OWNER_OBJECT_TYPE IS NOT NULL;
-
TIMER_PREPAREВремя, затраченное на саму подготовку запроса.
-
COUNT_REPREPAREКоличество раз, когда запрос был повторно подготовлен внутри (см. Раздел 8.10.4, «Кэширование подготовленных запросов и хранимых программ»). Статистические данные по времени повторной подготовки недоступны, так как они учитываются как часть выполнения запроса, а не как отдельная операция.
-
COUNT_EXECUTE,SUM_TIMER_EXECUTE,MIN_TIMER_EXECUTE,AVG_TIMER_EXECUTE,MAX_TIMER_EXECUTEАгрегированная статистика по выполнениям подготовленного запроса.
-
SUM_xxxОстальные столбцы
SUM_аналогичны столбцам таблиц сводки запросов (см. Раздел 25.12.15.3, «Таблицы сводки запросов»).xxx
TRUNCATE TABLE сбрасывает столбцы статистики в таблице prepared_statements_instances.
© 2025 Oracle
Licensed under the GPLv2 License.