- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
SQLite [SQLite]10만 TPS와 10억 행 처리: SQLite의 놀라운 효율성
2025.12.05 02:23
10만 TPS와 10억 행 처리: SQLite의 놀라운 효율성
(andersmurphy.com)- SQLite의 단일 작성자 구조와 내장형 특성이 오히려 확장성과 성능을 높이는 요인으로 작용함을 실험으로 입증
- 동일한 조건에서 Postgres는 네트워크 지연 시 348 TPS까지 하락했지만, SQLite는 네트워크 제거로 44,096 TPS를 달성
- 단일 작성자 모델을 활용한 배치 처리와 SAVEPOINT 기반 세분화 트랜잭션으로 최대 186,157 TPS, 안정적 구성 시 102,545 TPS 기록
- Amdahl의 법칙이 네트워크 기반 데이터베이스의 병목을 설명하며, SQLite는 이를 회피함으로써 높은 효율을 유지
- 이 결과는 로컬 환경에서의 SQLite 활용 가능성과 네트워크 병목 제거의 중요성을 강조함
SQLite의 구조와 실험 환경
- SQLite는 MVCC가 없고 단일 작성자만 허용하지만, 이러한 구조가 오히려 높은 확장성을 가능하게 함
- 내장형 데이터베이스로서 네트워크 오버헤드가 없음
- 벤치마크는 Apple M1 Pro, 16GB 메모리의 MacBook Pro(2021) 환경에서 수행
- 실험은 완벽한 최적화가 아닌, 일반적인 조건에서도 높은 쓰기 처리량을 달성할 수 있음을 보여주는 목적으로 진행
TPS 정의와 트랜잭션 예시
- TPS는 단순한 쓰기 속도가 아니라 상호작용형 트랜잭션(Interactive Transaction) 을 의미
- 예: 계좌 간 송금 시 여러 쿼리와 애플리케이션 코드가 하나의 트랜잭션 내에서 실행
- 트랜잭션은 오류 발생 시 상태를 롤백할 수 있어 일관성 유지에 핵심적 역할
벤치마크 구성
- Clojure 기반 가상 스레드(virtual threads) 를 사용해 대규모 동시 요청을 시뮬레이션
- Postgres는 HikariCP 기반 커넥션 풀로 구성, SQLite는 단일 작성자와 코어 수만큼의 읽기 연결을 사용
- 두 데이터베이스 모두 id, balance 필드를 가진 단순한 account 테이블을 사용하며, 10억 개의 행을 삽입
- 사용자 활동은 파워 법칙 분포(0.9995) 를 따르며, 약 10만 명의 활성 사용자가 존재
네트워크 데이터베이스(Postgres) 성능
- 동일 서버 내에서 Postgres는 13,756 TPS 달성
- 네트워크 지연 5ms 추가 시 1,214 TPS, 10ms 시 702 TPS로 급감
- 직렬화 격리 수준 적용 후 660 TPS, 추가 쿼리 포함 시 348 TPS로 하락
- 이는 Amdahl의 법칙에 따라 네트워크 병목이 전체 성능을 제한함을 보여줌
- 네트워크 지연이 증가하면 트랜잭션 락 경쟁이 심화되어 확장 불가능
SQLite의 내장형 이점
- 네트워크 제거 후 SQLite는 44,096 TPS 달성
- 네트워크 병목이 사라지면서 Amdahl의 법칙의 영향을 최소화
- 단일 작성자 구조를 활용해 배치 처리(batch processing) 적용 시 186,157 TPS까지 상승
- 동적 배치 크기 조정으로 지연(latency)과 처리량(throughput) 을 자동 최적화
SAVEPOINT를 통한 세분화 트랜잭션
- 배치 내 개별 트랜잭션 실패를 방지하기 위해 SAVEPOINT를 사용한 중첩 트랜잭션 적용
- 실패 시 해당 트랜잭션만 롤백, 전체 배치는 유지
- 이 방식으로도 121,922 TPS 유지
읽기/쓰기 혼합 부하 테스트
- 전체 요청의 75%를 읽기, 25%를 쓰기로 구성
- 별도의 읽기 스레드 풀을 사용하여 읽기 요청이 쓰기를 방해하지 않도록 분리
- 결과적으로 102,545 TPS 달성
성능 비교 요약
| 조건 | Postgres | SQLite |
|---|---|---|
| 네트워크 없음 | 13,756 | 44,096 |
| 5ms 지연 | 1,214 | n/a |
| 10ms 지연 | 702 | n/a |
| 10ms + 직렬화 | 660 | n/a |
| 배치 처리 | n/a | 186,157 |
| 배치 + SAVEPOINT | n/a | 121,922 |
| 배치 + SAVEPOINT + 읽기 | n/a | 102,545 |
결론
- SQLite는 단일 작성자 모델과 내장형 구조 덕분에 네트워크 기반 데이터베이스보다 훨씬 높은 TPS를 달성
- Amdahl의 법칙이 제시하는 네트워크 병목 한계를 회피함으로써 효율성을 극대화
- 전체 코드는 GitHub에서 공개되어 있으며, 관련 주제로 Amdahl의 법칙, 파워 법칙, SQLite 확장 사례 등의 자료가 함께 제시됨
- SQLite는 로컬 환경에서의 고성능 트랜잭션 처리에 매우 효과적인 선택지임
[출처] https://news.hada.io/topic?id=24792
본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

