Spec-Zone.ru › SQLite

Виртуальная таблица SQLITE_STMT

1. Обзор

Расширение SQLITE_STMT реализует виртуальную таблицу только для одного экземпляра, предоставляющую информацию обо всех подготовленных операторах, связанных с соединением с базой данных.

Расширение SQLITE_STMT включено в сборку, но по умолчанию отключено. Используйте опцию компиляции SQLITE_ENABLE_STMTVTAB, чтобы включить расширение SQLITE_STMT. Расширение SQLITE_STMT также может быть загружено во время выполнения, скомпилировав расширение в динамическую библиотеку или DLL с использованием исходного кода по адресу https://sqlite.org/src/file/ext/misc/stmt.c и выполнив инструкции по компиляции загружаемых расширений.

Расширение SQLITE_STMT включено в стандартных сборках консольного интерфейса командной строки.

2. Использование

Виртуальная таблица SQLITE_STMT — это таблица только для чтения, к которой можно напрямую обращаться для получения информации обо всех подготовленных операторах текущего подключения к базе данных. Например:

SELECT * FROM sqlite_stmt;

Такой оператор может быть запущен непосредственно перед вызовом sqlite3_close(), чтобы подтвердить, что все подготовленные операторы были завершённы и помочь идентифицировать и отследить подготовленные операторы, которые "просочились" и не были завершены.

Виртуальная таблица SQLITE_STMT также может использоваться для доступа к информации о производительности подготовленных операторов, чтобы помочь в оптимизации приложения. Например, чтобы узнать, сколько памяти используется подготовленными операторами, которые никогда не использовались, можно выполнить:

SELECT sum(mem) FROM sqlite_stmt WHERE run=0;

2.1. Столбцы

Столбцы, предоставляемые виртуальной таблицей SQLITE_STMT, суммируются в гипотетическом операторе CREATE TABLE, показанном здесь:

CREATE TABLE sqlite_stmt(
  sql    TEXT,    -- Original SQL text
  ncol   INT,     -- Number of output columns
  ro     BOOLEAN, -- True for "read only" statements
  busy   BOOLEAN, -- True if the statement is current running
  nscan  INT,     -- Number of full-scan steps
  nsort  INT,     -- Number of sort operations
  naidx  INT,     -- Number of automatic index inserts
  nstep  INT,     -- Number of byte-code engine steps
  reprep INT,     -- Number of reprepare operations
  run    INT,     -- Number of times this statement has been run
  mem    INT      -- Heap memory used by this statement
);

В будущих выпусках могут быть добавлены новые столбцы вывода и изменён порядок устаревших столбцов. Более подробная информация о значении каждого столбца в виртуальной таблице SQLITE_STMT приведена ниже:

  • sql: Исходный текст SQL подготовленного оператора. Если подготовленный оператор скомпилирован с помощью интерфейса sqlite3_prepare(), то текст SQL может быть не сохранён, в этом случае этот столбец будет NULL.

  • ncol: Количество столбцов в наборе результатов запроса. Для операторов DML значение этого столбца равно 0.

  • ro: Столбец "только для чтения". Значение этого столбца истинно (ненулевое), если оператор SQL является запросом, и ложно (нулевое), если это оператор DML.

  • busy: Этот поле истинно, если подготовленный оператор выполняется в данный момент. Другими словами, это поле истинно, если для подготовленного оператора был вызван sqlite3_step() по крайней мере один раз, но sqlite3_reset() ещё не был вызван для его сброса.

  • nscan: Это поле — количество раз, когда движок байткода проходил по таблице в рамках сканирования всей таблицы. Большое значение этого поля может указывать на возможность улучшить производительность, добавив индекс. Это поле эквивалентно значению SQLITE_STMTSTATUS_FULLSCAN_STEP.

  • nsort: Это поле — количество раз, когда движок байткода выполнял сортировку. Положительное значение в этом поле может указывать на возможность улучшить производительность, добавив индекс, который позволит результатам запроса отображаться в нужном порядке по умолчанию. Это поле эквивалентно значению SQLITE_STMTSTATUS_SORT.

  • naidx: Это поле — количество строк, которые были вставлены в автоматические индексы. Положительное значение в этом поле может указывать на возможность улучшить производительность, добавив именованный индекс, который заменит автоматический индекс. Это поле эквивалентно значению SQLITE_STMTSTATUS_AUTOINDEX.

  • nstep: Это поле — количество операций движка байткода, выполненных для подготовленного оператора. Это поле может использоваться как прокси для того, сколько процессорного времени использовал оператор. Это поле эквивалентно значению SQLITE_STMTSTATUS_VM_STEP.

  • reprep: Это поле — количество раз, когда оператор нужно было переподготовить из-за изменений схемы или изменений параметров связи. Это поле эквивалентно значению SQLITE_STMTSTATUS_REPREPARE.

  • run: Это поле — количество раз, когда оператор был выполнен. Это поле эквивалентно значению SQLITE_STMTSTATUS_RUN.

  • mem: Это поле — количество байтов памяти кучи, используемой подготовленным оператором. Это поле эквивалентно значению SQLITE_STMTSTATUS_MEMUSED.

Последнее изменение этой страницы 08.01.2022 05:02:57 UTC

SQLite is in the Public Domain.
https://sqlite.org/stmt.html

Spec-Zone.ru

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