벤치마크가 거짓말하게 만드는 3 가지
인터넷에 굴러다니는 가벼운 SQLite 벤치마크는 거의 다 아래 셋 중 하나 때문에 틀렸어. 네가 잴 때는 피해.
- 차가운 cache와 따뜻한 cache — 첫 실행은 디스크를 읽고, 그다음부터는 OS page cache에서 가져와. 어느 쪽을 재는 건지 먼저 정하고, 의도적으로 데우거나 식혀.
- statement마다 transaction — autocommit으로 쓰면 row마다 fsync가 한 번씩 걸려. transaction 없이 10k INSERT를 도는 루프는 SQLite의 write 속도를 재는 게 아니라, 파일시스템 sync latency를 재는 거야.
- 너무 작은 dataset — row가 100개면 어느 DB든 빨라. 현실적인 row 수로 재. 이왕이면 production 규모의 몇 배로.
Principle: 어떤 PRAGMA를 걸었는지, dataset이 어떤 모양인지, cache가 따뜻했는지가 안 적힌 벤치마크는 벤치마크가 아니야. 이 셋은 항상 같이 적어.