Skip to content

Latest commit

ย 

History

History
558 lines (412 loc) ยท 17.5 KB

File metadata and controls

558 lines (412 loc) ยท 17.5 KB
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

Database System ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ

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 ์ตœ์ ํ™”
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •: ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ํ”„๋กœ๋•์…˜ ์„ค์ •

์—ฐ๊ฒฐ ํ’€ ์„ฑ๋Šฅ

์—ฐ๊ฒฐ ํ’€ v3 ๋ฒค์น˜๋งˆํฌ

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 ๋ฒค์น˜๋งˆํฌ

์„ค์ •: 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 ๋ฒค์น˜๋งˆํฌ

์„ค์ •: 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 ๋ฒค์น˜๋งˆํฌ

์„ค์ •: 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 ๋ฒค์น˜๋งˆํฌ

์„ค์ •: 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 ๋ฒค์น˜๋งˆํฌ

์„ค์ •: 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

์—…๊ณ„ ๋น„๊ต

vs. ๋„ค์ดํ‹ฐ๋ธŒ ๋“œ๋ผ์ด๋ฒ„

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%

vs. ORM ํ”„๋ ˆ์ž„์›Œํฌ

์„ฑ๋Šฅ ๋น„๊ต (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 ๐Ÿ€โ˜€๐ŸŒ•๐ŸŒฅ ๐ŸŒŠ