SQLITE_MEMSTAT 가상 테이블
SQLITE_MEMSTAT 가상 테이블
SQLITE_MEMSTAT 확장은 현재 SQLite 인스턴스의 메모리 사용량 등 성능 특성을 SQL로 질의할 수 있게 해주는 가상 테이블이에요. sqlite3_status64()와 sqlite3_db_status() C API를 감싸는 형태로 동작해요.
본문
1. 개요
SQLITE_MEMSTAT 확장은 sqlite3_status64()와 sqlite3_db_status() 인터페이스에 대한 SQL 접근을 제공하는 동명 전용(eponymous-only) 가상 테이블을 구현해요.
SQLITE_MEMSTAT 확장은 https://sqlite.org/src/file/ext/misc/memstat.c의 소스 코드를 공유 라이브러리나 DLL로 컴파일하고 로드 가능한 확장 컴파일 방법 지침을 따르면 런타임에도 로드할 수 있어요.
2. 사용법
SQLITE_MEMSTAT 가상 테이블은 읽기 전용 테이블로, 현재 SQLite 인스턴스의 성능 특성(주로 사용 중인 메모리 양)을 알아내기 위해 질의할 수 있어요. SQLITE_MEMSTAT 테이블은 기본적으로 C 언어 API인 sqlite3_status64()와 sqlite3_db_status()를 감싸는 래퍼예요. memstat.c 소스 파일이 -DSQLITE_ENABLE_ZIPVFS 옵션으로 컴파일되면, SQLITE_MEMSTAT는 ZIPVFS 하위 시스템이 라이선스되고 설치되어 사용 중일 때 그 하위 시스템의 메모리 사용 정보를 추출하기 위해 일부 file-control 호출도 수행해요.
SQLITE_MEMSTAT 테이블은 다음과 같은 스키마를 가져요.
CREATE TABLE sqlite_memstat(
name TEXT,
schema TEXT,
value INT,
hiwtr INT
);
SQLITE_MEMSTAT 테이블의 각 행은 sqlite3_status64() 또는 sqlite3_db_status() 인터페이스 중 하나에 대한 단일 호출에 해당해요. 행의 NAME 열은 이들 인터페이스에 전달된 "동사"를 식별해요. 예를 들어 sqlite3_status64()가 SQLITE_STATUS_MEMORY_USED로 호출되면 NAME 열은 'MEMORY_USED'가 돼요. 또는 sqlite3_db_status()가 SQLITE_DBSTATUS_CACHE_USED로 호출되면 NAME 열은 "DB_CACHE_USED"가 돼요.
SCHEMA 열은 sqlite3_file_control() 인터페이스로 ZIPVFS 백엔드를 조사하는 경우를 제외하고는 NULL이에요. 이는 memstat.c 모듈이 -DSQLITE_ENABLE_ZIPVFS로 컴파일되고 ZIPVFS가 사용 중일 때만 발생하므로, SCHEMA는 보통 NULL이에요.
VALUE와 HIWTR 열은 측정값의 현재 값과 그 "하이-워터 마크(high-water mark)"를 보고해요. 하이-워터 마크는 적어도 마지막 재설정 이후 측정에서 본 가장 높은 값이에요. SQLITE_MEMSTAT 가상 테이블은 하이-워터 마크를 재설정하는 메커니즘을 제공하지 않아요.
조사하는 매개변수에 따라 VALUE 또는 HIWTR 측정 중 하나가 정의되지 않을 수 있어요. 예를 들어 SQLITE_STATUS_MALLOC_SIZE에는 하이-워터 마크만 의미가 있고, SQLITE_DBSTATUS_CACHE_USED에는 현재 값만 의미가 있어요. VALUE 또는 HIWTR 중 하나가 의미가 없는 행에서는 그 값이 NULL로 반환돼요.
더 알아보기 (Learn more)
- sqlite3_status64() / sqlite3_db_status() C 인터페이스
- 가상 테이블 개요
- 로드 가능한 확장
- SQLITE_MEMSTAT 소스: ext/misc/memstat.c