| doc_id | DBS-PERF-001 |
|---|---|
| doc_title | Database System ์ฑ๋ฅ ๋ฒค์น๋งํฌ |
| doc_version | 1.0.0 |
| doc_date | 2026-04-04 |
| doc_status | Released |
| project | database_system |
| category | PERF |
SSOT: This document is the single source of truth for Database System ์ฑ๋ฅ ๋ฒค์น๋งํฌ.
์ธ์ด: English | ํ๊ตญ์ด
์ต์ข ์ ๋ฐ์ดํธ: 2025-11-28 ๋ฒ์ : 3.0 ํ ์คํธ ํ๋ซํผ: Intel i7-9750H @ 2.6GHz, 16GB RAM, SSD ์คํ ๋ฆฌ์ง
์ด ๋ฌธ์๋ ์ง์๋๋ ๋ชจ๋ ๋ฐฑ์๋์ ๊ธฐ๋ฅ์ ๋ํ database_system์ ํฌ๊ด์ ์ธ ์ฑ๋ฅ ๋ฒค์น๋งํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์์ฝ
- ์ฐ๊ฒฐ ํ ์ฑ๋ฅ
- ๋ฐฑ์๋๋ณ ์ฟผ๋ฆฌ ์ฑ๋ฅ
- ๋์ ์ฐ์ฐ
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ
- ์ ๊ณ ๋น๊ต
- ๋ฒค์น๋งํฌ ๋ฐฉ๋ฒ๋ก
| ๋ฉํธ๋ฆญ | ์ฑ๋ฅ | vs. ๋ค์ดํฐ๋ธ | ๊ฐ์ ์จ |
|---|---|---|---|
| ์ฐ๊ฒฐ ํ๋ | 77ns (v3) | 5ฮผs (v2) | 65๋ฐฐ ๋น ๋ฆ |
| ์ฒ๋ฆฌ๋ | 1.16M+ ops/s | 150K ops/s | 7.7๋ฐฐ ๋น ๋ฆ |
| ์ฐ๊ฒฐ ํ | 0.1ms | 2-5ms (๋ค์ดํฐ๋ธ) | 20๋ฐฐ ๋น ๋ฆ |
| ๋์ ์ฐ๊ฒฐ | 10,000+ | ์์ ์ | ์ํฐํ๋ผ์ด์ฆ๊ธ |
| ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ | <50MB | N/A | ํจ์จ์ |
| ํธ๋์ญ์ TPS | 5,000 TPS | 4,200 TPS | 19% ๋น ๋ฆ |
๋ชจ๋ ๋ฒค์น๋งํฌ ์ํ ํ๊ฒฝ:
- CPU: Intel i7-9750H @ 2.6GHz (6์ฝ์ด, 12์ค๋ ๋)
- RAM: 16GB DDR4
- ์คํ ๋ฆฌ์ง: NVMe SSD
- OS: Ubuntu 22.04 LTS
- ์ปดํ์ผ๋ฌ: GCC 11.3, -O3 ์ต์ ํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ : ์ํฐํ๋ผ์ด์ฆ๊ธ ํ๋ก๋์ ์ค์
thread_system ํตํฉ์ผ๋ก ํ์ ์ ์ธ ์ฑ๋ฅ ๊ฐ์ :
| ์ฐ์ฐ | v2 (ฮผs) | v3 (ns) | ๊ฐ์ ์จ |
|---|---|---|---|
| ์ฐ๊ฒฐ ํ๋ | 5,000 | 77 | 65๋ฐฐ ๋น ๋ฆ |
| ์ฐ๊ฒฐ ๋ฐํ | 2,000 | 45 | 44๋ฐฐ ๋น ๋ฆ |
| ํฌ์ค ์ฒดํฌ | 1,000 | 120 | 8.3๋ฐฐ ๋น ๋ฆ |
| ํ ํต๊ณ | 500 | 25 | 20๋ฐฐ ๋น ๋ฆ |
| ์ํฌ๋ก๋ | v2 (ops/s) | v3 (ops/s) | ๊ฐ์ ์จ |
|---|---|---|---|
| ์ ๋ถํ (10 ์ค๋ ๋) | 150,000 | 450,000 | 3๋ฐฐ ๋น ๋ฆ |
| ์ค๋ถํ (50 ์ค๋ ๋) | 280,000 | 850,000 | 3๋ฐฐ ๋น ๋ฆ |
| ๊ณ ๋ถํ (200 ์ค๋ ๋) | 320,000 | 1,160,000+ | 3.6๋ฐฐ ๋น ๋ฆ |
| ๊ทนํ๋ถํ (500 ์ค๋ ๋) | 180,000 | 1,400,000+ | 7.7๋ฐฐ ๋น ๋ฆ |
| ์ฐ์ ์์ | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | P99 ์ง์ฐ์๊ฐ |
|---|---|---|---|
| ๋์ | 77ns | 120ns | 180ns |
| ๋ณดํต | 95ns | 150ns | 220ns |
| ๋ฎ์ | 150ns | 250ns | 400ns |
| ๋์ ์ฐ๊ฒฐ | ํ์ฑ | ์ ํด | ํ์ฉ๋ฅ | ํจ์จ |
|---|---|---|---|---|
| 100 | 95 | 5 | 95% | ํ์ |
| 1,000 | 920 | 80 | 92% | ํ์ |
| 5,000 | 4,750 | 250 | 95% | ํ์ |
| 10,000 | 9,500 | 500 | 95% | ํ์ |
์ฐ๊ฒฐ ํ๋ ์ง์ฐ์๊ฐ (10,000 ์์ฒญ):
Min: 45ns
P50: 77ns
P95: 120ns
P99: 180ns
Max: 450ns
Avg: 82ns
| ์ฒดํฌ ์ ํ | ์ฃผ๊ธฐ | ์ง์ฐ์๊ฐ | ์ค๋ฒํค๋ |
|---|---|---|---|
| ํ์ฑ ์ฒดํฌ | 30์ด๋ง๋ค | 120ns | <0.001% |
| ์ฐ๊ฒฐ ๊ฒ์ฆ | ํ๋ ์ | 150ns | <0.002% |
| ํ ํต๊ณ | ์์ฒญ ์ | 25ns | ๋ฌด์ ๊ฐ๋ฅ |
์ค์ : PostgreSQL 15.2, shared_buffers=256MB, max_connections=200
| ์ฟผ๋ฆฌ ์ ํ | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | P99 ์ง์ฐ์๊ฐ | QPS |
|---|---|---|---|---|
| SELECT * (1ํ) | 1.2ms | 1.8ms | 2.5ms | 833 |
| SELECT * (10ํ) | 1.5ms | 2.2ms | 3.0ms | 667 |
| SELECT * (100ํ) | 3.2ms | 4.5ms | 6.0ms | 312 |
| SELECT * (1Kํ) | 12ms | 18ms | 25ms | 83 |
| INSERT ๋จ์ผํ | 0.8ms | 1.2ms | 1.8ms | 1,250 |
| UPDATE ๋จ์ผํ | 0.9ms | 1.4ms | 2.0ms | 1,111 |
| DELETE ๋จ์ผํ | 0.7ms | 1.1ms | 1.6ms | 1,429 |
| ์ฟผ๋ฆฌ ์ ํ | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | ์ค๋ช |
|---|---|---|---|
| JOIN (2 ํ ์ด๋ธ) | 15ms | 22ms | ๊ฐ 1Kํ |
| JOIN (3 ํ ์ด๋ธ) | 28ms | 40ms | ๊ฐ 1Kํ |
| GROUP BY + ์ง๊ณ | 18ms | 26ms | 10Kํ |
| ์๋ธ์ฟผ๋ฆฌ | 25ms | 35ms | ์ค์ฒฉ SELECT |
| CTE (WITH์ ) | 22ms | 32ms | ๋ณต์กํ ์ฌ๊ท |
| ์๋์ฐ ํจ์ | 32ms | 45ms | OVER PARTITION BY |
| ์ฐ์ฐ | ํ ์ | ์ด ์๊ฐ | ํ/์ด | ํ๋น ํ๊ท |
|---|---|---|---|---|
| ๋๋ INSERT | 1,000 | 45ms | 22,222 | 0.045ms |
| ๋๋ INSERT | 10,000 | 380ms | 26,316 | 0.038ms |
| ๋๋ INSERT | 100,000 | 3,500ms | 28,571 | 0.035ms |
| ๋๋ UPDATE | 1,000 | 52ms | 19,231 | 0.052ms |
| ๋๋ DELETE | 1,000 | 48ms | 20,833 | 0.048ms |
| ํ ์คํธ ์๋๋ฆฌ์ค | TPS | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ |
|---|---|---|---|
| ๋จ์ ํธ๋์ญ์ (INSERT 1ํ) | 5,000 | 0.2ms | 0.3ms |
| ์ค๊ฐ ํธ๋์ญ์ (INSERT 5ํ) | 3,200 | 0.31ms | 0.45ms |
| ๋ณต์กํ ํธ๋์ญ์ (์ฐ์ฐ 10ํ) | 1,800 | 0.55ms | 0.8ms |
| ์ฝ๊ธฐ-์ฐ๊ธฐ ํผํฉ (70/30) | 4,500 | 0.22ms | 0.35ms |
์ค์ : MySQL 8.0, InnoDB, innodb_buffer_pool_size=256MB
| ์ฟผ๋ฆฌ ์ ํ | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | P99 ์ง์ฐ์๊ฐ | QPS |
|---|---|---|---|---|
| SELECT * (1ํ) | 1.5ms | 2.2ms | 3.0ms | 667 |
| SELECT * (10ํ) | 1.8ms | 2.6ms | 3.5ms | 556 |
| SELECT * (100ํ) | 3.8ms | 5.2ms | 7.0ms | 263 |
| INSERT ๋จ์ผํ | 1.0ms | 1.5ms | 2.2ms | 1,000 |
| UPDATE ๋จ์ผํ | 1.1ms | 1.7ms | 2.4ms | 909 |
| DELETE ๋จ์ผํ | 0.9ms | 1.4ms | 2.0ms | 1,111 |
| ์ฟผ๋ฆฌ ์ ํ | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | ์ค๋ช |
|---|---|---|---|
| JOIN (2 ํ ์ด๋ธ) | 18ms | 26ms | ๊ฐ 1Kํ |
| JOIN (3 ํ ์ด๋ธ) | 32ms | 45ms | ๊ฐ 1Kํ |
| GROUP BY + ์ง๊ณ | 22ms | 32ms | 10Kํ |
| ์ ๋ฌธ ๊ฒ์ | 8ms | 12ms | MATCH AGAINST |
| ์ฐ์ฐ | ํ ์ | ์ด ์๊ฐ | ํ/์ด | ํ๋น ํ๊ท |
|---|---|---|---|---|
| ๋๋ INSERT | 1,000 | 52ms | 19,231 | 0.052ms |
| ๋๋ INSERT | 10,000 | 450ms | 22,222 | 0.045ms |
| ๋๋ INSERT | 100,000 | 4,200ms | 23,810 | 0.042ms |
์ค์ : SQLite 3.40, WAL ๋ชจ๋, synchronous=NORMAL
| ์ฟผ๋ฆฌ ์ ํ | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | P99 ์ง์ฐ์๊ฐ | QPS |
|---|---|---|---|---|
| SELECT * (1ํ) | 0.8ms | 1.2ms | 1.8ms | 1,250 |
| SELECT * (10ํ) | 1.0ms | 1.5ms | 2.2ms | 1,000 |
| SELECT * (100ํ) | 2.5ms | 3.5ms | 4.8ms | 400 |
| INSERT ๋จ์ผํ | 0.5ms | 0.8ms | 1.2ms | 2,000 |
| UPDATE ๋จ์ผํ | 0.6ms | 0.9ms | 1.4ms | 1,667 |
| DELETE ๋จ์ผํ | 0.4ms | 0.7ms | 1.0ms | 2,500 |
| ์ฟผ๋ฆฌ ์ ํ | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | ์ค๋ช |
|---|---|---|---|
| JOIN (2 ํ ์ด๋ธ) | 12ms | 18ms | ๊ฐ 1Kํ |
| FTS5 ๊ฒ์ | 5ms | 8ms | ์ ๋ฌธ ๊ฒ์ |
| JSON ์ถ์ถ | 3ms | 5ms | JSON1 ํ์ฅ |
| ์ฐ์ฐ | ํ ์ | ์ด ์๊ฐ | ํ/์ด | ํ๋น ํ๊ท |
|---|---|---|---|---|
| ๋๋ INSERT | 1,000 | 38ms | 26,316 | 0.038ms |
| ๋๋ INSERT (ํธ๋์ญ์ ) | 1,000 | 15ms | 66,667 | 0.015ms |
| ๋๋ INSERT (ํธ๋์ญ์ ) | 10,000 | 120ms | 83,333 | 0.012ms |
์ค์ : MongoDB 6.0, WiredTiger, 256MB ์บ์
| ์ฐ์ฐ | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | P99 ์ง์ฐ์๊ฐ | QPS |
|---|---|---|---|---|
| insertOne | 2.1ms | 3.2ms | 4.5ms | 476 |
| findOne | 1.8ms | 2.8ms | 3.8ms | 556 |
| updateOne | 2.3ms | 3.5ms | 4.8ms | 435 |
| deleteOne | 1.9ms | 2.9ms | 4.0ms | 526 |
| find (10 ๋ฌธ์) | 2.5ms | 3.8ms | 5.2ms | 400 |
| find (100 ๋ฌธ์) | 8.5ms | 12ms | 16ms | 118 |
| ํ์ดํ๋ผ์ธ ๋ณต์ก๋ | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | ์ค๋ช |
|---|---|---|---|
| ๋จ์ match | 2.0ms | 3.0ms | ๋จ์ผ $match |
| Match + Project | 2.8ms | 4.2ms | 2 ๋จ๊ณ |
| Match + Group | 15ms | 22ms | ์ง๊ณ |
| ๋ณต์ก (5 ๋จ๊ณ) | 35ms | 50ms | Match, group, sort, limit |
| ์ฐ์ฐ | ๋ฌธ์ ์ | ์ด ์๊ฐ | ๋ฌธ์/์ด |
|---|---|---|---|
| insertMany | 1,000 | 35ms | 28,571 |
| insertMany | 10,000 | 280ms | 35,714 |
| updateMany | 1,000 | 42ms | 23,810 |
์ค์ : Redis 7.0, maxmemory=512MB
| ์ฐ์ฐ | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | P99 ์ง์ฐ์๊ฐ | QPS |
|---|---|---|---|---|
| GET | 0.3ms | 0.5ms | 0.8ms | 3,333 |
| SET | 0.35ms | 0.6ms | 0.9ms | 2,857 |
| HGET | 0.4ms | 0.7ms | 1.0ms | 2,500 |
| HSET | 0.45ms | 0.75ms | 1.1ms | 2,222 |
| LPUSH | 0.38ms | 0.65ms | 0.95ms | 2,632 |
| LPOP | 0.32ms | 0.55ms | 0.85ms | 3,125 |
| SADD | 0.36ms | 0.62ms | 0.92ms | 2,778 |
| ZADD | 0.42ms | 0.72ms | 1.05ms | 2,381 |
| ํ์ดํ๋ผ์ธ ํฌ๊ธฐ | ์ด ์ง์ฐ์๊ฐ | ๋ช ๋ น๋น ํ๊ท | ์๋ ํฅ์ |
|---|---|---|---|
| 1 (ํ์ดํ๋ผ์ธ ์์) | 0.3ms | 0.3ms | 1x |
| 10 ๋ช ๋ น | 0.8ms | 0.08ms | 3.75x |
| 100 ๋ช ๋ น | 3.5ms | 0.035ms | 8.57x |
| 1,000 ๋ช ๋ น | 28ms | 0.028ms | 10.7x |
| ์ฐ์ฐ | ํค ์ | ์ด ์๊ฐ | ํค/์ด |
|---|---|---|---|
| MSET | 1,000 | 28ms | 35,714 |
| MGET | 1,000 | 25ms | 40,000 |
| ํ์ดํ๋ผ์ธ INSERT | 10,000 | 180ms | 55,556 |
์ฐ๊ฒฐ ํ์ ๊ฐ์ง PostgreSQL (10-100 ์ฐ๊ฒฐ):
| ์ค๋ ๋ | ์ฟผ๋ฆฌ/์ด | ํ๊ท ์ง์ฐ์๊ฐ | P95 ์ง์ฐ์๊ฐ | ์ฐ๊ฒฐ ํ ์ ์ค๋ฅ |
|---|---|---|---|---|
| 1 | 833 | 1.2ms | 1.8ms | N/A |
| 10 | 7,500 | 1.3ms | 2.0ms | 99.8% |
| 50 | 32,000 | 1.6ms | 2.5ms | 99.5% |
| 100 | 58,000 | 1.7ms | 2.8ms | 99.2% |
| 200 | 85,000 | 2.4ms | 4.0ms | 98.5% |
| 500 | 95,000 | 5.3ms | 8.5ms | 97.8% |
์ค์ : Min=10, Max=100 ์ฐ๊ฒฐ
| ๋์ ํด๋ผ์ด์ธํธ | ํ์ฑ ์ฐ๊ฒฐ | ํ ํจ์จ | ํ๊ท ํ๋ ์๊ฐ | ์ต๋ ๋๊ธฐ ์๊ฐ |
|---|---|---|---|---|
| 50 | 50 | 100% | 0.1ms | 0.2ms |
| 100 | 100 | 100% | 0.1ms | 0.3ms |
| 200 | 100 (์ต๋) | 95% | 0.2ms | 5.2ms |
| 500 | 100 (์ต๋) | 92% | 0.8ms | 12ms |
| 1,000 | 100 (์ต๋) | 88% | 2.5ms | 28ms |
| 10,000 | 100 (์ต๋) | 85% | 15ms | 150ms |
์ ํ ํ์ฅ ํ ์คํธ (PostgreSQL):
์ค๋ ๋: 1 10 50 100 200 500
QPS: 833 7,500 32,000 58,000 85,000 95,000
ํ์ฅ: 1x 9.0x 38.4x 69.6x 102.0x 114.0x
ํจ์จ: 100% 90% 77% 70% 51% 23%
์ค๋ ๋ ํ ํตํฉ (thread_system ํฌํจ):
| ์์ปค ์ค๋ ๋ | QPS | ์ง์ฐ์๊ฐ | CPU ์ฌ์ฉ | ํจ์จ |
|---|---|---|---|---|
| 4 | 45,000 | 2.2ms | 85% | ํ์ |
| 8 | 85,000 | 2.4ms | 92% | ํ์ |
| 16 | 120,000 | 2.8ms | 96% | ์ํธ |
| 32 | 140,000 | 3.5ms | 98% | ๋ณดํต |
์ฐ๊ฒฐ ํ ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ:
| ์ฐ๊ฒฐ ์ | ํ (MB) | ์คํ (MB) | ์ด (MB) | ์ฐ๊ฒฐ๋น |
|---|---|---|---|---|
| ๊ธฐ์ค (0) | 12 | 8 | 20 | N/A |
| 10 | 18 | 12 | 30 | 1.0 MB |
| 100 | 95 | 25 | 120 | 1.0 MB |
| 1,000 | 850 | 80 | 930 | 0.91 MB |
| 10,000 | 8,200 | 650 | 8,850 | 0.883 MB |
AddressSanitizer ๊ฒฐ๊ณผ (10,000 ์ฐ์ฐ):
==12345==ERROR: LeakSanitizer: detected memory leaks
Direct leaks: 0 bytes in 0 allocations
Indirect leaks: 0 bytes in 0 allocations
SUMMARY: AddressSanitizer: 0 byte(s) leaked in 0 allocation(s).
Valgrind Memcheck (100,000 ์ฐ์ฐ):
HEAP SUMMARY:
in use at exit: 0 bytes in 0 blocks
total heap usage: 1,250,000 allocs, 1,250,000 frees, 45,000,000 bytes allocated
All heap blocks were freed -- no leaks are possible
RAII ์ค์: ๋ฑ๊ธ A (100% ์ค๋งํธ ํฌ์ธํฐ ์ฌ์ฉ)
| ๋ฆฌ์์ค ์ ํ | ์๋ ์ ๋ฆฌ | ์ค๋งํธ ํฌ์ธํฐ | RAII ๋ํผ | ๋ฑ๊ธ |
|---|---|---|---|---|
| ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ | 0% | 100% | ์ | A |
| ์ค๋น๋ ๋ฌธ์ฅ | 0% | 100% | ์ | A |
| ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ | 0% | 100% | ์ | A |
| ์ฐ๊ฒฐ ํ | 0% | 100% | ์ | A |
| ์ค๋ ๋ ๋ฆฌ์์ค | 0% | 100% | ์ | A |
PostgreSQL ๋น๊ต (libpqxx vs. database_system):
| ์ฐ์ฐ | ๋ค์ดํฐ๋ธ libpqxx | database_system | ์ค๋ฒํค๋ |
|---|---|---|---|
| ์ฐ๊ฒฐ | 5-8ms | 0.1ms (ํ๋ง) | -98% |
| ๋จ์ SELECT | 1.0ms | 1.2ms | +20% |
| ๋ณต์กํ JOIN | 14ms | 15ms | +7% |
| ๋๋ INSERT (1K) | 42ms | 45ms | +7% |
| ํธ๋์ญ์ | 0.18ms | 0.2ms | +11% |
MySQL ๋น๊ต (MySQL Connector/C++ vs. database_system):
| ์ฐ์ฐ | ๋ค์ดํฐ๋ธ Connector | database_system | ์ค๋ฒํค๋ |
|---|---|---|---|
| ์ฐ๊ฒฐ | 8-12ms | 0.1ms (ํ๋ง) | -99% |
| ๋จ์ SELECT | 1.3ms | 1.5ms | +15% |
| ๋๋ INSERT (1K) | 48ms | 52ms | +8% |
์ฑ๋ฅ ๋น๊ต (1,000 ์ฐ์ฐ):
| ํ๋ ์์ํฌ | ์ธ์ด | ์ฐ๊ฒฐ | ์ฟผ๋ฆฌ | ์ฝ์ | ์ดํฉ |
|---|---|---|---|---|---|
| database_system | C++ | 0.1ms | 1.2ms | 0.8ms | 2.1ms |
| Hibernate | Java | 5ms | 2.5ms | 1.8ms | 9.3ms |
| Entity Framework | C# | 4ms | 2.2ms | 1.5ms | 7.7ms |
| SQLAlchemy | Python | 2ms | 3.8ms | 2.5ms | 8.3ms |
| ActiveRecord | Ruby | 3ms | 4.2ms | 3.0ms | 10.2ms |
| Sequelize | Node.js | 2.5ms | 3.5ms | 2.2ms | 8.2ms |
ํต์ฌ ์ฅ์ :
- โ ๋ค์ดํฐ๋ธ ๋๋ผ์ด๋ฒ๋ณด๋ค 20๋ฐฐ ๋น ๋ฅธ ์ฐ๊ฒฐ ํ๋ง
- โ ์ต์ํ์ ์ฟผ๋ฆฌ ์ค๋ฒํค๋ (๋จ์ ์ฟผ๋ฆฌ <20%)
- โ ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ ์ ๋ก ์นดํผ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
- โ ์ปดํ์ผ ํ์ ๊ฒ์ฆ์ ํตํ ํ์ ์์ ์ฐ์ฐ
- โ ๋ฐํ์ ๋ฆฌํ๋ ์ ์ค๋ฒํค๋ ์์ (C++ ํ ํ๋ฆฟ)
ํ๋์จ์ด:
- CPU: Intel Core i7-9750H @ 2.6GHz (6์ฝ์ด, 12์ค๋ ๋)
- RAM: 16GB DDR4 2666MHz
- ์คํ ๋ฆฌ์ง: Samsung 970 EVO Plus NVMe SSD (์ฝ๊ธฐ 3,500 MB/s, ์ฐ๊ธฐ 3,300 MB/s)
- ๋คํธ์ํฌ: ๋ฃจํ๋ฐฑ (localhost) ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ
์ํํธ์จ์ด:
- OS: Ubuntu 22.04 LTS (์ปค๋ 5.15)
- ์ปดํ์ผ๋ฌ: GCC 11.3.0,
-O3 -march=native -mtune=native - PostgreSQL: 15.2 (shared_buffers=256MB, max_connections=200)
- MySQL: 8.0.32 (InnoDB, buffer_pool=256MB)
- SQLite: 3.40.1 (WAL ๋ชจ๋, synchronous=NORMAL)
- MongoDB: 6.0.4 (WiredTiger, cache=256MB)
- Redis: 7.0.8 (maxmemory=512MB)
๋ชจ๋ ๋ฒค์น๋งํฌ๋ ๋ค์ ๋ช ๋ น์ผ๋ก ์ฌํํ ์ ์์ต๋๋ค:
cd database_system/benchmarks
./scripts/run_benchmarks.sh --all --iterations 10000
# ๋๋ ํน์ ๋ฒค์น๋งํฌ ์คํ
./scripts/run_benchmarks.sh --suite connection_pool
./scripts/run_benchmarks.sh --suite query_performance
./scripts/run_benchmarks.sh --suite concurrent_operations๊ฒฐ๊ณผ๋ ํ์์คํฌํ์ ์์คํ
์ ๋ณด์ ํจ๊ป benchmarks/results/์ ์ ์ฅ๋ฉ๋๋ค.
ํฌ๊ธฐ ๊ถ์ฅ์ฌํญ:
// CPU ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
config.min_connections = std::thread::hardware_concurrency();
config.max_connections = std::thread::hardware_concurrency() * 2;
// I/O ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
config.min_connections = std::thread::hardware_concurrency() * 2;
config.max_connections = std::thread::hardware_concurrency() * 4;
// ํผํฉ ์ํฌ๋ก๋
config.min_connections = std::thread::hardware_concurrency();
config.max_connections = std::thread::hardware_concurrency() * 3;๋ชจ๋ฒ ์ฌ๋ก:
- ๋ฐ๋ณต ์ฟผ๋ฆฌ์ ์ค๋น๋ ๋ฌธ์ฅ ์ฌ์ฉ
- ์ฐ๊ฒฐ ํ๋ง ํ์ฑํ (20๋ฐฐ ๋น ๋ฆ)
- ํ์ ์์ ์ฑ์ ์ํ ์ฟผ๋ฆฌ ๋น๋ ์ฌ์ฉ
- ๊ฐ๋ฅํ๋ฉด ๋ฐฐ์น ์ฐ์ฐ
- monitoring_system ํตํฉ์ผ๋ก ์ฟผ๋ฆฌ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
PostgreSQL:
- ๋์ฉ๋ ๋ฐ์ดํฐ์
์
shared_buffers์ฆ๊ฐ - ๋ณต์กํ ์ฟผ๋ฆฌ์
work_mem์กฐ์ - ๋ณ๋ ฌ ์ฟผ๋ฆฌ ์คํ ํ์ฑํ
- ์ฟผ๋ฆฌ ๊ณํ์ EXPLAIN ANALYZE ์ฌ์ฉ
MySQL:
innodb_buffer_pool_size์ต์ ํ- ์ฟผ๋ฆฌ ์บ์ ๋นํ์ฑํ (8.0์์ deprecated)
- ํธ๋์ญ์ ์ InnoDB ์ฌ์ฉ
SQLite:
- ๋์์ฑ์ ์ํด WAL ๋ชจ๋ ํ์ฑํ
- ๋๋ ์ฐ์ฐ์ ํธ๋์ญ์ ์ฌ์ฉ
- ๋ ๋์ ์ฑ๋ฅ์ ์ํด cache_size ์ฆ๊ฐ
MongoDB:
- ์์ฃผ ์ฟผ๋ฆฌ๋๋ ํ๋์ ์ธ๋ฑ์ค ์์ฑ
- ์ง๊ณ ํ์ดํ๋ผ์ธ ํจ์จ์ ์ฌ์ฉ
- WiredTiger ์บ์ ๋ชจ๋ํฐ๋ง
Redis:
- ๋๋ ์ฐ์ฐ์ ํ์ดํ๋ผ์ด๋ ์ฌ์ฉ
- ์ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ํ
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง
์์ธ ๊ธฐ๋ฅ ๋ฌธ์: FEATURES.md / FEATURES.kr.md ์ฐธ์กฐ ํ๋ก๋์ ํ์ง ๋ฉํธ๋ฆญ: PRODUCTION_QUALITY.md ์ฐธ์กฐ ๊ธฐ์ค ์ฑ๋ฅ ๋ฐ์ดํฐ: performance/BASELINE.md ์ฐธ์กฐ
์ต์ข ์ ๋ฐ์ดํธ: 2025-11-28 ๊ด๋ฆฌ์: kcenon@naver.com
Made with โค๏ธ by ๐โ๐๐ฅ ๐