SQLITE_STMT 가상 테이블
SQLITE_STMT 가상 테이블 (The SQLITE_STMT Virtual Table)
개요 (Overview)
SQLITE_STMT 확장은 데이터베이스 연결과 연관된 모든 준비된 문(prepared statement)에 대한 정보를 제공하는 에포니머 전용 가상 테이블을 구현해요.
SQLITE_STMT 확장은 amalgamation에 포함되지만 기본적으로는 비활성화돼요. SQLITE_ENABLE_STMTVTAB 컴파일 타임 옵션을 사용해 SQLITE_STMT 확장을 활성화해요. SQLITE_STMT 확장은 https://sqlite.org/src/file/ext/misc/stmt.c의 소스 코드를 사용해 확장을 공유 라이브러리나 DLL로 컴파일하고 로더블 확장을 컴파일하는 방법에 대한 지침을 따르면 런타임에도 로드할 수 있어요.
SQLITE_STMT 확장은 명령줄 셸의 기본 빌드에서 활성화돼요.
출처: 문서
본문
사용법 (Usage)
SQLITE_STMT 가상 테이블은 읽기 전용 테이블로, 직접 질의해 현재 데이터베이스 연결의 모든 준비된 문에 대한 정보를 접근할 수 있어요. 예를 들어:
SELECT * FROM sqlite_stmt;
위와 같은 명령문은 sqlite3_close()를 호출하기 직전에 실행하여 모든 준비된 문이 finalize됐는지 확인하고, "누수"되어 finalize되지 못한 준비된 문을 식별하고 추적하는 데 도움이 될 수 있어요.
SQLITE_STMT 가상 테이블은 애플리케이션 최적화를 돕기 위해 준비된 문에 대한 성능 정보를 접근하는 데도 사용될 수 있어요. 예를 들어 결코 사용되지 않은 준비된 문이 얼마나 많은 메모리를 사용하는지 알아내려면 다음을 실행할 수 있어요.
SELECT sum(mem) FROM sqlite_stmt WHERE run=0;
1. 열 (Columns)
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 문이 쿼리이면 이 열은 참(0이 아닌 값)이고, DML 문이면 거짓(0)이에요.
- busy: 준비된 문이 현재 실행 중이면 이 필드는 참이에요. 즉 준비된 문에 sqlite3_step()이 한 번 이상 호출됐지만 sqlite3_reset()으로 아직 재설정되지 않았다면 이 필드는 참이에요.
- nscan: 바이트코드 엔진이 전체 테이블 스캔의 일부로 테이블을 몇 번 거쳤는지의 횟수예요. 이 필드가 큰 수면 인덱스를 추가해 성능을 개선할 여지가 있음을 나타낼 수 있어요. 이 필드는 SQLITE_STMTSTATUS_FULLSCAN_STEP 값과 동일해요.
- nsort: 바이트코드 엔진이 정렬을 수행해야 했던 횟수예요. 이 필드의 양수 값은 쿼리 결과가 자연스럽게 원하는 순서로 나타나게 하는 인덱스를 추가해 성능을 개선할 여지가 있음을 나타낼 수 있어요. 이 필드는 SQLITE_STMTSTATUS_SORT 값과 동일해요.
- naidx: 자동 인덱스에 삽입된 행 수예요. 이 필드의 양수 값은 자동 인덱스를 대신하는 명명된 인덱스를 추가해 성능을 개선할 여지가 있음을 나타낼 수 있어요. 이 필드는 SQLITE_STMTSTATUS_AUTOINDEX 값과 동일해요.
- nstep: 준비된 문에 대해 수행된 바이트코드 엔진 연산 수예요. 이 필드는 문이 사용한 CPU 시간의 대용 지표로 사용될 수 있어요. 이 필드는 SQLITE_STMTSTATUS_VM_STEP 값과 동일해요.
- reprep: 스키마 변경이나 매개변수 바인딩 변경으로 인해 문을 다시 준비(reprepared)해야 했던 횟수예요. 이 필드는 SQLITE_STMTSTATUS_REPREPARE 값과 동일해요.
- run: 문이 실행된 횟수예요. 이 필드는 SQLITE_STMTSTATUS_RUN 값과 동일해요.
- mem: 준비된 문이 사용하는 힙 저장소의 바이트 수예요. 이 필드는 SQLITE_STMTSTATUS_MEMUSED 값과 동일해요.