Spec-Zone.ru › MySQL 8.4

29.12.6.4 Таблица prepared_statements_instances

Схема производительности предоставляет средства инструментирования для подготовленных запросов, для которых существуют два протокола:

  • Бинарный протокол. К нему осуществляется доступ через MySQL C API, который отображается на соответствующие команды сервера, как показано в следующей таблице.

    Функция C API Соответствующая команда сервера
    COM_STMT_PREPARE
    COM_STMT_EXECUTE
    COM_STMT_CLOSE
  • Текстовый протокол. К нему осуществляется доступ с помощью SQL-запросов, которые отображаются на соответствующие команды сервера, как показано в следующей таблице.

    SQL-запрос Соответствующая команда сервера
    PREPARE SQLCOM_PREPARE
    EXECUTE SQLCOM_EXECUTE
    DEALLOCATE PREPARE, DROP PREPARE SQLCOM_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;
    
  • Двигатель выполнения запросов. Значение равно либо PRIMARY, либо SECONDARY. Для использования с HeatWave Service и HeatWave, где двигатель PRIMARY равен InnoDB, а двигатель SECONDARY равен HeatWave (RAPID). Для MySQL Community Edition Server, MySQL Enterprise Edition Server (на локальном сервере) и HeatWave Service без HeatWave значение всегда равно PRIMARY.

  • TIMER_PREPARE

    Время, затраченное на саму подготовку запроса.

  • COUNT_REPREPARE

    Количество раз, когда запрос был переподготовлен внутри (см. Раздел 10.10.3, «Кэширование подготовленных запросов и хранимых процедур»). Статистические данные о переподготовке недоступны, поскольку они учитываются как часть выполнения запроса, а не как отдельная операция.

  • COUNT_EXECUTE, SUM_TIMER_EXECUTE, MIN_TIMER_EXECUTE, AVG_TIMER_EXECUTE, MAX_TIMER_EXECUTE

    Агрегированная статистика по выполнению подготовленного запроса.

  • SUM_xxx

    Остальные столбцы SUM_xxx такие же, как в таблицах сводки запросов (см. Раздел 29.12.20.3, «Таблицы сводки запросов»).

  • MAX_CONTROLLED_MEMORY

    Сообщает максимальный объем контролируемой памяти, используемой подготовленным запросом во время выполнения.

  • MAX_TOTAL_MEMORY

    Сообщает максимальный объем памяти, используемой подготовленным запросом во время выполнения.

Таблица prepared_statements_instances имеет следующие индексы:

  • Основной ключ по (OBJECT_INSTANCE_BEGIN)

  • Индекс по (STATEMENT_ID)

  • Индекс по (STATEMENT_NAME)

  • Индекс по (OWNER_THREAD_ID, OWNER_EVENT_ID)

  • Индекс по (OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME)

TRUNCATE TABLE сбрасывает статистические столбцы таблицы prepared_statements_instances.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/performance-schema-prepared-statements-instances-table.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API