Виртуальная таблица 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