홈으로 돌아가기

OLTP core: DBMS에서의 API 및 적응형 튜닝

새로운 OLTP DBMS는 테이블스페이스별 페이지 크기, 레이어 간 엄격한 API 계약 및 적응형 튜닝을 위한 Resource Broker를 사용합니다. eBPF/USDT를 통한 진단. 이 아키텍처는 수동 튜닝과 성능 저하를 제거합니다.

OLTP core 구축: 페이지 크기부터 eBPF까지
Advertisement 728x90

OLTP 코어 구축: API 계약, 페이지 크기, 적응형 튜닝

새로운 OLTP 데이터베이스를 개발하며 Rust의 트레이트 인터페이스를 활용해 격리된 계층 구조를 엄격히 구현했습니다. 각 계층은 명확한 API 계약을 가지며, 테이블스페이스별로 페이지 크기를 설정할 수 있고, 리소스 브로커가 수동 튜닝 없이 설정을 관리합니다. 진단 기능은 USDT와 eBPF를 통해 통합됩니다.

페이지 크기와 테이블스페이스 설정

데이터 페이지 크기는 순수 OLTP의 경우 4~8KB, NVMe 기반 HTAP의 경우 16~32KB 범위입니다. 각 테이블스페이스는 생성 후 고정 페이지 크기를 가진 별도의 파일입니다. 기본값은 16KB입니다. PageId는 복합 구조로 [tablespace_id:16][page_index:48]입니다. BufferPool은 크기별로 요청을 서브 캐시에 라우팅합니다.

파일 시작 부분의 슈퍼블록은 페이지 크기와 독립적으로 테이블스페이스 메타데이터를 저장합니다. 마운트 시 설정을 확인하며, 불일치 시 저하 없이 시작을 차단합니다.

Google AdInline article slot

아키텍처 계층과 API 계약

코어는 네 개의 계층으로 나뉩니다:

  • 어댑터 계층 (async tokio): TLS 종료, 와이어 프로토콜 파싱.
#[async_trait]
pub trait NetworkAdapter {
    async fn handle_connection(&self, stream: Box<dyn ConnectionStream>) -> Result<(), NetworkError>;
}
  • CompatLayer: SQL을 AST로 파싱, pg_catalog 에뮬레이션, LogicalPlan으로 변환, 지원되지 않는 기능 거부 (오류 0A000).
pub trait CompatLayer {
    fn translate_query(&self, ast: SqlAst) -> Result<LogicalPlan, CompatError>;
}
  • Core Engine (sync): 옵티마이저, 실행기, 트랜잭션 매니저. spawn_blocking 풀에서 실행.
pub trait ExecutionEngine {
    fn execute_plan(&self, plan: LogicalPlan, session: &Session) -> Result<ResultSet, ExecutionError>;
}
  • StorageManager: PageProvider와 TransactionLogSink 위의 파사드. 코어가 페이지와 UNDO 레코드를 요청.
pub trait StorageManager {
    fn pin_page(&self, page_id: PageId, mode: LockMode) -> Result<PageGuard, StorageError>;
    fn append_undo(&self, txn_id: TxnId, record: UndoRecord) -> Result<UndoPtr, StorageError>;
}

계층 경계는 세부 사항 유출을 방지합니다: 락 메트릭은 비동기 대기를 제외합니다.

적응형 튜닝과 리소스 브로커

약 60개의 파라미터를 예산, 가드레일, 오버라이드로 분리합니다. 운영자는 고수준 제한을 설정:

Google AdInline article slot
[resources]
memory_budget = "16GB"
cpu_budget    = "auto"
io_iops       = 5000

어드바이저(MemoryAdvisor, IoAdvisor, CpuAdvisor)가 매초 리소스를 재분배:

  • CpuAdvisor: DOP와 스레드 풀 vs 스로틀링.
  • MemoryAdvisor: 부하 시 BufferPool vs work_mem.
  • IoAdvisor: 트랜잭션 우선순위, 클라우드 버스트 인식.

보호 장치

  • 히스테리시스: 5초 창, 5% 단위로 진동 방지.
  • 하드 플로어: BufferPool/UNDO 최소 128MB.
  • 우아한 전환: 새 할당에 새 제한 적용.
  • 전문가 오버라이드가 자동 튜닝 우선.

백그라운드 UNDO 로그 정리로 VACUUM 대체. 재시작 없이 런타임 변경.

진단: USDT 프로브와 eBPF

진단 메커니즘은 바이너리에 내장. 런타임 분석을 위한 USDT 프로브, 오버헤드 없는 추적을 위한 eBPF.

Google AdInline article slot

주요 요점:

  • 테이블스페이스별 페이지 크기와 시작 확인.
  • 계층 간 엄격한 트레이트 계약으로 유출 방지.
  • 리소스 브로커: 예산 → 가드레일이 포함된 자동 튜닝.
  • 코어 내 eBPF/USDT 진단.
  • 수동 튜닝 대신 적응형 메커니즘 채택.

— Editorial Team

Advertisement 728x90

다음 읽기