SQLITE_MEMSTAT 가상 테이블

SQLITE_MEMSTAT 가상 테이블

SQLITE_MEMSTAT 확장은 현재 SQLite 인스턴스의 메모리 사용량 등 성능 특성을 SQL로 질의할 수 있게 해주는 가상 테이블이에요. sqlite3_status64()와 sqlite3_db_status() C API를 감싸는 형태로 동작해요.

출처: The SQLITE_MEMSTAT Virtual Table 문서

본문

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)