Small Restaurant Site SQLite Benchmark

Local macOS production-methodology request-load comparison for a small restaurant WordPress site: 10 pages, 6 blog posts, comments, reservation-request writes, and wp-admin editor/admin paths. Negative latency deltas mean SQLite was faster; positive throughput deltas mean SQLite completed more work.

3repetitions per workload/concurrent-request cell
4, 16, 32, 64concurrent requests tested
0SQLite WAL PR #405 failed benchmark flows
0SQLite WAL PR #405 lock/busy log events

This is a local diagnostic, not the blocked dedicated-Linux full matrix. The measured window starts after fixture restore, server startup, login setup, and warm-up.

How The Test Was Conducted

  1. Create the same small restaurant WordPress fixture for MariaDB and SQLite: homepage, menu, reservations, contact, about, event/catering/gallery/location/journal pages, six posts, seed comments, seed reservations, and benchmark users.
  2. Before every measured cell, restore that variant's clean database snapshot so previous writes do not affect the next run.
  3. Start local nginx and PHP-FPM for the case, log in worker admin sessions outside the measured timing window, and run a warm-up for 5.0 seconds.
  4. Measure for 20.0 seconds with the configured concurrent-request count.
  5. Read-heavy flow mix: public page/menu/search/REST reads plus a small amount of logged-in wp-admin reads.
  6. Balanced and write-heavy mixes add verified comment writes, public reservation-request writes, and authenticated editor-save simulations.
  7. Record full-flow latency, average request completion time, throughput, write throughput, failures, write verification, SQLite WAL size, and SQLite lock/busy logs.

SQLite WAL PR #405 vs MariaDB Delta Heatmaps

Throughput deltaThroughput deltaSQLite WAL PR #405 vs MariaDB. Green is better for SQLite; red is worse.4163264read-heavy-16.9%SQLite WAL PR #405 100.09-20.1%SQLite WAL PR #405 95.81-18.9%SQLite WAL PR #405 96.96-11.3%SQLite WAL PR #405 94.83balanced+29.0%SQLite WAL PR #405 98.26-4.8%SQLite WAL PR #405 98.98-11.3%SQLite WAL PR #405 93.32-9.3%SQLite WAL PR #405 99.37write-heavy+59.4%SQLite WAL PR #405 102.92+9.0%SQLite WAL PR #405 102.77-4.3%SQLite WAL PR #405 101.52-11.9%SQLite WAL PR #405 104.63
Average request-time deltaAverage request-time deltaSQLite WAL PR #405 vs MariaDB. Green is better for SQLite; red is worse.4163264read-heavy+23.3%SQLite WAL PR #405 24.93+23.4%SQLite WAL PR #405 97.82+22.1%SQLite WAL PR #405 202.52+11.7%SQLite WAL PR #405 404.23balanced-20.6%SQLite WAL PR #405 26.48+4.7%SQLite WAL PR #405 102.12+12.4%SQLite WAL PR #405 205.51+10.2%SQLite WAL PR #405 400.18write-heavy-37.7%SQLite WAL PR #405 27.45-8.1%SQLite WAL PR #405 110.76+5.3%SQLite WAL PR #405 228.32+10.2%SQLite WAL PR #405 443.85
p95 full-flow latency deltap95 full-flow latency deltaSQLite WAL PR #405 vs MariaDB. Green is better for SQLite; red is worse.4163264read-heavy+23.6%SQLite WAL PR #405 89.13+16.4%SQLite WAL PR #405 375.21+9.4%SQLite WAL PR #405 731.04+4.1%SQLite WAL PR #405 1,482.05balanced-24.7%SQLite WAL PR #405 98.53-24.8%SQLite WAL PR #405 412.42-29.9%SQLite WAL PR #405 814.48-27.1%SQLite WAL PR #405 1,582.94write-heavy-31.2%SQLite WAL PR #405 98.75-22.1%SQLite WAL PR #405 441.66-20.4%SQLite WAL PR #405 847.75-12.2%SQLite WAL PR #405 1,650.42
Verified writes/sec deltaVerified writes/sec deltaSQLite WAL PR #405 vs MariaDB. Green is better for SQLite; red is worse.4163264read-heavyn/aSQLite WAL PR #405 0.00n/aSQLite WAL PR #405 0.00n/aSQLite WAL PR #405 0.00n/aSQLite WAL PR #405 0.00balanced+27.9%SQLite WAL PR #405 19.89-5.1%SQLite WAL PR #405 19.93-11.2%SQLite WAL PR #405 18.63-10.6%SQLite WAL PR #405 21.13write-heavy+60.0%SQLite WAL PR #405 30.31+6.4%SQLite WAL PR #405 29.84-5.0%SQLite WAL PR #405 31.36-14.3%SQLite WAL PR #405 31.31

Throughput And Tail Latency

Throughput vs p95 latencyThroughput vs p95 latencyEach point is a median cell. Better points move right and down.MariaDB balanced c4: 76.18 flows/s, p95 131ms4MariaDB balanced c16: 103.94 flows/s, p95 549ms16MariaDB balanced c32: 105.26 flows/s, p95 1.16s32MariaDB balanced c64: 109.55 flows/s, p95 2.17s64MariaDB read-heavy c4: 120.50 flows/s, p95 72ms4MariaDB read-heavy c16: 119.87 flows/s, p95 322ms16MariaDB read-heavy c32: 119.55 flows/s, p95 668ms32MariaDB read-heavy c64: 106.94 flows/s, p95 1.42s64MariaDB write-heavy c4: 64.55 flows/s, p95 144ms4MariaDB write-heavy c16: 94.30 flows/s, p95 567ms16MariaDB write-heavy c32: 106.12 flows/s, p95 1.07s32MariaDB write-heavy c64: 118.70 flows/s, p95 1.88s64SQLite WAL PR #405 balanced c4: 98.26 flows/s, p95 99ms4SQLite WAL PR #405 balanced c16: 98.98 flows/s, p95 412ms16SQLite WAL PR #405 balanced c32: 93.32 flows/s, p95 814ms32SQLite WAL PR #405 balanced c64: 99.37 flows/s, p95 1.58s64SQLite WAL PR #405 read-heavy c4: 100.09 flows/s, p95 89ms4SQLite WAL PR #405 read-heavy c16: 95.81 flows/s, p95 375ms16SQLite WAL PR #405 read-heavy c32: 96.96 flows/s, p95 731ms32SQLite WAL PR #405 read-heavy c64: 94.83 flows/s, p95 1.48s64SQLite WAL PR #405 write-heavy c4: 102.92 flows/s, p95 99ms4SQLite WAL PR #405 write-heavy c16: 102.77 flows/s, p95 442ms16SQLite WAL PR #405 write-heavy c32: 101.52 flows/s, p95 848ms32SQLite WAL PR #405 write-heavy c64: 104.63 flows/s, p95 1.65s64MariaDBSQLite WAL PR #405Completed flows per secondp95 full-flow latency

Aggregate Table

VariantWorkloadConcurrent requestsRepsMedian flows/sAvg request completionp95 flow latencyVerified writes/sFailed flowsWrite verify failuresSQLite lock/busyMax WAL bytes
mariadb-innodb-baselinebalanced4376.1833ms131ms15.550000
mariadb-innodb-baselinebalanced163103.9498ms549ms21.010000
mariadb-innodb-baselinebalanced323105.26183ms1.16s20.980000
mariadb-innodb-baselinebalanced643109.55363ms2.17s23.630000
mariadb-innodb-baselineread-heavy43120.5020ms72ms0.000000
mariadb-innodb-baselineread-heavy163119.8779ms322ms0.000000
mariadb-innodb-baselineread-heavy323119.55166ms668ms0.000000
mariadb-innodb-baselineread-heavy643106.94362ms1.42s0.000000
mariadb-innodb-baselinewrite-heavy4364.5544ms144ms18.940000
mariadb-innodb-baselinewrite-heavy16394.30121ms567ms28.060000
mariadb-innodb-baselinewrite-heavy323106.12217ms1.07s33.020000
mariadb-innodb-baselinewrite-heavy643118.70403ms1.88s36.520000
sqlite-wal-pr405balanced4398.2626ms99ms19.890004148872
sqlite-wal-pr405balanced16398.98102ms412ms19.930004466112
sqlite-wal-pr405balanced32393.32206ms814ms18.630005224192
sqlite-wal-pr405balanced64399.37400ms1.58s21.130006052312
sqlite-wal-pr405read-heavy43100.0925ms89ms0.0000082432
sqlite-wal-pr405read-heavy16395.8198ms375ms0.0000074192
sqlite-wal-pr405read-heavy32396.96203ms731ms0.0000078312
sqlite-wal-pr405read-heavy64394.83404ms1.48s0.0000086552
sqlite-wal-pr405write-heavy43102.9227ms99ms30.310004264232
sqlite-wal-pr405write-heavy163102.77111ms442ms29.840004997592
sqlite-wal-pr405write-heavy323101.52228ms848ms31.360006373672
sqlite-wal-pr405write-heavy643104.63444ms1.65s31.3100018581232