Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add query batching #180

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft

Add query batching #180

wants to merge 4 commits into from

Conversation

marco6
Copy link
Collaborator

@marco6 marco6 commented Sep 30, 2024

All update operations (insert/update/delete) force a fsync on the WAL (and sometimes on the disk because of checkpoints). This limits the number of operations to what the underlying disk can do (usually in the order of hundreds).

Grouping these operations in transactions should dramatically increase the throughput while making the top X%ile latency a bit higher. However, this should be balanced by a lower latency in the bottom X%ile.

We should test this also on a real cluster.

This PR also removes the write lock as now there is always only one active writer.

Copy link

github-actions bot commented Sep 30, 2024

Benchmark

Results
goos: linux
goarch: amd64
pkg: github.com/canonical/k8s-dqlite/test
cpu: AMD EPYC 7763 64-Core Processor                
                                        │     Before      │                After                │
                                        │     sec/op      │    sec/op     vs base               │
Compaction/sqlite-4                         22.46µ ±  28%   16.58µ ± 46%        ~ (p=0.259 n=7)
Compaction/dqlite-4                         39.60µ ±  18%   41.69µ ± 11%        ~ (p=0.318 n=7)
Create/sqlite/1-workers-4                   412.3µ ±   1%   414.4µ ±  1%        ~ (p=0.053 n=7)
Create/sqlite/4-workers-4                   386.6µ ±   3%   152.5µ ±  1%  -60.56% (p=0.001 n=7)
Create/sqlite/16-workers-4                 371.23µ ±   4%   67.45µ ±  2%  -81.83% (p=0.001 n=7)
Create/sqlite/64-workers-4                 379.54µ ±  22%   42.89µ ±  5%  -88.70% (p=0.001 n=7)
Create/sqlite/128-workers-4               1106.57µ ±  93%   36.66µ ±  5%  -96.69% (p=0.001 n=7)
Create/dqlite/1-workers-4                   841.6µ ±   1%   837.1µ ±  3%        ~ (p=0.902 n=7)
Create/dqlite/4-workers-4                   744.8µ ±   2%   445.2µ ±  7%  -40.24% (p=0.001 n=7)
Create/dqlite/16-workers-4                  745.6µ ±   3%   198.3µ ±  2%  -73.40% (p=0.001 n=7)
Create/dqlite/64-workers-4                  741.6µ ±   2%   125.2µ ±  1%  -83.11% (p=0.001 n=7)
Create/dqlite/128-workers-4                 734.5µ ±   2%   110.4µ ±  2%  -84.97% (p=0.001 n=7)
Delete/sqlite/1-workers-4                   407.5µ ±   1%   409.0µ ±  2%        ~ (p=0.805 n=7)
Delete/sqlite/4-workers-4                   385.0µ ±   2%   154.2µ ±  2%  -59.95% (p=0.001 n=7)
Delete/sqlite/16-workers-4                 360.55µ ±   2%   72.81µ ±  5%  -79.80% (p=0.001 n=7)
Delete/sqlite/64-workers-4                 419.28µ ±  38%   46.86µ ±  3%  -88.82% (p=0.001 n=7)
Delete/sqlite/128-workers-4                472.63µ ±  48%   43.18µ ±  5%  -90.86% (p=0.001 n=7)
Delete/dqlite/1-workers-4                   852.1µ ±   2%   840.6µ ±  1%        ~ (p=0.053 n=7)
Delete/dqlite/4-workers-4                   734.3µ ±   2%   486.7µ ±  7%  -33.72% (p=0.001 n=7)
Delete/dqlite/16-workers-4                  740.4µ ±   4%   204.7µ ±  6%  -72.35% (p=0.001 n=7)
Delete/dqlite/64-workers-4                  741.5µ ±   3%   129.2µ ±  1%  -82.58% (p=0.001 n=7)
Delete/dqlite/128-workers-4                 740.8µ ±   3%   116.1µ ±  3%  -84.33% (p=0.001 n=7)
Get/sqlite-4                                220.1µ ±   2%   213.9µ ±  2%   -2.84% (p=0.001 n=7)
Get/dqlite-4                                339.0µ ±   1%   327.7µ ±  1%   -3.34% (p=0.001 n=7)
List/sqlite-tiny/all-4                      3.063µ ±   4%   3.082µ ±  5%        ~ (p=0.902 n=7)
List/sqlite-tiny/pagination-4               4.501µ ±   4%   4.566µ ±  4%        ~ (p=0.620 n=7)
List/sqlite-fits-in-page/all-4              6.189µ ±   6%   6.280µ ±  4%        ~ (p=0.244 n=7)
List/sqlite-fits-in-page/pagination-4       16.41µ ±   3%   16.37µ ± 12%        ~ (p=0.456 n=7)
List/sqlite-overflows-page/all-4            14.81µ ±   2%   14.69µ ±  4%        ~ (p=0.097 n=7)
List/sqlite-overflows-page/pagination-4     18.74µ ±   4%   18.24µ ±  2%   -2.64% (p=0.017 n=7)
List/dqlite-tiny/all-4                      2.010µ ±   1%   1.988µ ±  4%        ~ (p=0.596 n=7)
List/dqlite-tiny/pagination-4               3.145µ ±   4%   3.065µ ±  7%        ~ (p=0.456 n=7)
List/dqlite-fits-in-page/all-4              5.329µ ±   2%   5.291µ ±  4%        ~ (p=0.165 n=7)
List/dqlite-fits-in-page/pagination-4       11.78µ ±   3%   11.60µ ±  5%        ~ (p=0.165 n=7)
List/dqlite-overflows-page/all-4            18.42µ ±   4%   18.38µ ±  2%        ~ (p=1.000 n=7)
List/dqlite-overflows-page/pagination-4     22.31µ ±   3%   22.67µ ±  4%        ~ (p=0.902 n=7)
Update/sqlite/1-workers-4                   411.6µ ±   1%   413.2µ ±  0%   +0.41% (p=0.026 n=7)
Update/sqlite/4-workers-4                   390.4µ ±   5%   156.2µ ±  1%  -59.99% (p=0.001 n=7)
Update/sqlite/16-workers-4                 362.87µ ±  12%   74.94µ ±  1%  -79.35% (p=0.001 n=7)
Update/sqlite/64-workers-4                 382.41µ ± 112%   49.66µ ±  0%  -87.01% (p=0.001 n=7)
Update/sqlite/128-workers-4               1787.84µ ± 110%   44.35µ ±  3%  -97.52% (p=0.001 n=7)
Update/dqlite/1-workers-4                   834.0µ ±   3%   828.9µ ±  2%        ~ (p=0.710 n=7)
Update/dqlite/4-workers-4                   732.5µ ±   2%   459.7µ ±  9%  -37.23% (p=0.001 n=7)
Update/dqlite/16-workers-4                  738.2µ ±   2%   208.0µ ± 12%  -71.82% (p=0.001 n=7)
Update/dqlite/64-workers-4                  731.8µ ±   4%   138.9µ ±  4%  -81.02% (p=0.001 n=7)
Update/dqlite/128-workers-4                 727.4µ ±   5%   120.5µ ±  1%  -83.44% (p=0.001 n=7)
geomean                                     163.8µ          68.77µ        -58.02%

                                        │        Before        │                    After                     │
                                        │ page-cache-misses/op │ page-cache-misses/op  vs base                │
Compaction/sqlite-4                               0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Compaction/dqlite-4                               0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Get/sqlite-4                                      0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Get/dqlite-4                                      0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                            0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-tiny/pagination-4                     0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/all-4                    0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/pagination-4             0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/all-4                  0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/pagination-4           0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-tiny/all-4                            0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-tiny/pagination-4                     0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/all-4                    0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/pagination-4             0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/all-4                  0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/pagination-4           0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
geomean                                                      ²                         +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │        Before        │                    After                     │
                                        │ page-cache-spills/op │ page-cache-spills/op  vs base                │
Compaction/sqlite-4                               0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Compaction/dqlite-4                               0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Get/sqlite-4                                      0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Get/dqlite-4                                      0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                            0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-tiny/pagination-4                     0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/all-4                    0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/pagination-4             0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/all-4                  0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/pagination-4           0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-tiny/all-4                            0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-tiny/pagination-4                     0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/all-4                    0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/pagination-4             0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/all-4                  0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/pagination-4           0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/sqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/4-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/16-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/64-workers-4                        0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/128-workers-4                       0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
geomean                                                      ²                         +0.00%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │    Before     │                After                 │
                                        │ page-reads/op │ page-reads/op  vs base               │
Compaction/sqlite-4                         12.33 ±  1%     12.24 ±  2%        ~ (p=0.404 n=7)
Compaction/dqlite-4                         12.28 ±  1%     12.15 ±  1%        ~ (p=0.119 n=7)
Create/sqlite/1-workers-4                   13.98 ±  0%     13.98 ±  0%        ~ (p=1.000 n=7)
Create/sqlite/4-workers-4                   12.27 ±  3%     10.54 ±  0%  -14.10% (p=0.001 n=7)
Create/sqlite/16-workers-4                  10.55 ±  4%     10.42 ±  0%        ~ (p=0.691 n=7)
Create/sqlite/64-workers-4                  8.539 ±  6%    10.350 ±  0%  +21.21% (p=0.001 n=7)
Create/sqlite/128-workers-4                 7.963 ± 14%    10.330 ±  0%  +29.72% (p=0.001 n=7)
Create/dqlite/1-workers-4                   13.61 ±  1%     13.96 ±  2%   +2.57% (p=0.002 n=7)
Create/dqlite/4-workers-4                   11.01 ±  1%     10.98 ±  0%   -0.27% (p=0.041 n=7)
Create/dqlite/16-workers-4                  11.06 ±  1%     10.48 ±  0%   -5.24% (p=0.001 n=7)
Create/dqlite/64-workers-4                  11.03 ±  3%     10.33 ±  0%   -6.35% (p=0.001 n=7)
Create/dqlite/128-workers-4                 11.07 ±  1%     10.31 ±  0%   -6.87% (p=0.001 n=7)
Delete/sqlite/1-workers-4                   16.21 ±  0%     16.21 ±  0%        ~ (p=0.414 n=7)
Delete/sqlite/4-workers-4                   14.19 ±  2%     14.19 ±  1%        ~ (p=0.875 n=7)
Delete/sqlite/16-workers-4                  11.37 ±  3%     16.92 ±  2%  +48.81% (p=0.001 n=7)
Delete/sqlite/64-workers-4                  9.901 ±  4%    17.210 ±  0%  +73.82% (p=0.001 n=7)
Delete/sqlite/128-workers-4                 9.361 ±  3%    17.210 ±  0%  +83.85% (p=0.001 n=7)
Delete/dqlite/1-workers-4                   15.94 ±  2%     16.37 ±  1%   +2.70% (p=0.001 n=7)
Delete/dqlite/4-workers-4                   13.53 ±  1%     13.22 ±  0%   -2.29% (p=0.001 n=7)
Delete/dqlite/16-workers-4                  13.44 ±  1%     12.92 ±  3%   -3.87% (p=0.001 n=7)
Delete/dqlite/64-workers-4                  13.24 ±  1%     14.28 ±  1%   +7.85% (p=0.001 n=7)
Delete/dqlite/128-workers-4                 13.21 ±  1%     14.29 ±  0%   +8.18% (p=0.001 n=7)
Get/sqlite-4                                14.96 ±  0%     14.96 ±  0%        ~ (p=0.593 n=7)
Get/dqlite-4                                11.96 ±  0%     11.98 ±  0%   +0.17% (p=0.042 n=7)
List/sqlite-tiny/all-4                     190.7m ±  0%    191.0m ±  1%        ~ (p=0.645 n=7)
List/sqlite-tiny/pagination-4               1.125 ±  3%     1.125 ±  3%        ~ (p=0.392 n=7)
List/sqlite-fits-in-page/all-4             258.3m ± 37%    260.0m ± 37%        ~ (p=0.596 n=7)
List/sqlite-fits-in-page/pagination-4      963.6m ±  3%    962.5m ±  3%        ~ (p=0.434 n=7)
List/sqlite-overflows-page/all-4           177.5m ±  0%    177.5m ±  0%        ~ (p=1.000 n=7)
List/sqlite-overflows-page/pagination-4     1.065 ±  0%     1.065 ±  0%        ~ (p=1.000 n=7)
List/dqlite-tiny/all-4                     190.4m ±  0%    190.3m ±  0%        ~ (p=0.158 n=7)
List/dqlite-tiny/pagination-4               1.124 ±  0%     1.123 ±  0%        ~ (p=0.592 n=7)
List/dqlite-fits-in-page/all-4             260.4m ± 37%    260.2m ± 37%        ~ (p=0.277 n=7)
List/dqlite-fits-in-page/pagination-4      955.8m ±  0%    955.1m ±  4%        ~ (p=0.152 n=7)
List/dqlite-overflows-page/all-4           184.7m ±  0%    184.9m ±  0%        ~ (p=0.625 n=7)
List/dqlite-overflows-page/pagination-4     1.073 ±  0%     1.073 ±  3%        ~ (p=0.690 n=7)
Update/sqlite/1-workers-4                   15.90 ±  0%     15.90 ±  0%        ~ (p=1.000 n=7)
Update/sqlite/4-workers-4                   14.24 ±  3%     12.38 ±  0%  -13.06% (p=0.001 n=7)
Update/sqlite/16-workers-4                  12.09 ±  5%     12.27 ±  0%        ~ (p=0.195 n=7)
Update/sqlite/64-workers-4                  10.59 ±  5%     12.26 ±  0%  +15.77% (p=0.001 n=7)
Update/sqlite/128-workers-4                 9.447 ± 14%    12.610 ±  1%  +33.48% (p=0.001 n=7)
Update/dqlite/1-workers-4                   15.61 ±  1%     15.85 ±  0%   +1.54% (p=0.001 n=7)
Update/dqlite/4-workers-4                   12.97 ±  1%     12.93 ±  0%        ~ (p=0.119 n=7)
Update/dqlite/16-workers-4                  12.92 ±  1%     12.34 ±  0%   -4.49% (p=0.001 n=7)
Update/dqlite/64-workers-4                  12.87 ±  2%     12.23 ±  0%   -4.97% (p=0.001 n=7)
Update/dqlite/128-workers-4                 12.75 ±  3%     12.21 ±  0%   -4.24% (p=0.001 n=7)
geomean                                     5.221           5.449         +4.37%

                                        │     Before     │                  After                  │
                                        │ page-writes/op │ page-writes/op  vs base                 │
Compaction/sqlite-4                        190.6m ± 0%       190.8m ±  0%        ~ (p=0.395 n=7)
Compaction/dqlite-4                        188.2m ± 1%       187.7m ±  1%   -0.27% (p=0.026 n=7)
Create/sqlite/1-workers-4                   4.376 ± 0%        4.377 ±  0%        ~ (p=0.324 n=7)
Create/sqlite/4-workers-4                   4.335 ± 1%        2.685 ±  1%  -38.06% (p=0.001 n=7)
Create/sqlite/16-workers-4                4297.0m ± 1%       999.3m ±  1%  -76.74% (p=0.001 n=7)
Create/sqlite/64-workers-4                4291.0m ± 1%       439.4m ±  4%  -89.76% (p=0.001 n=7)
Create/sqlite/128-workers-4               4154.0m ± 3%       307.5m ±  9%  -92.60% (p=0.001 n=7)
Create/dqlite/1-workers-4                   4.305 ± 0%        4.312 ±  0%        ~ (p=0.361 n=7)
Create/dqlite/4-workers-4                   4.331 ± 0%        2.344 ±  1%  -45.88% (p=0.001 n=7)
Create/dqlite/16-workers-4                4323.0m ± 0%       794.5m ±  4%  -81.62% (p=0.001 n=7)
Create/dqlite/64-workers-4                4328.0m ± 0%       305.2m ±  7%  -92.95% (p=0.001 n=7)
Create/dqlite/128-workers-4               4313.0m ± 1%       180.7m ±  8%  -95.81% (p=0.001 n=7)
Delete/sqlite/1-workers-4                   4.375 ± 0%        4.376 ±  0%        ~ (p=0.572 n=7)
Delete/sqlite/4-workers-4                   4.369 ± 1%        2.702 ±  1%  -38.16% (p=0.001 n=7)
Delete/sqlite/16-workers-4                  4.368 ± 1%        1.139 ±  4%  -73.92% (p=0.001 n=7)
Delete/sqlite/64-workers-4                4353.0m ± 1%       683.9m ±  8%  -84.29% (p=0.001 n=7)
Delete/sqlite/128-workers-4               4380.0m ± 2%       513.2m ± 11%  -88.28% (p=0.001 n=7)
Delete/dqlite/1-workers-4                   4.374 ± 1%        4.385 ±  1%        ~ (p=0.316 n=7)
Delete/dqlite/4-workers-4                   4.406 ± 0%        2.403 ±  1%  -45.46% (p=0.001 n=7)
Delete/dqlite/16-workers-4                4381.0m ± 0%       808.3m ±  5%  -81.55% (p=0.001 n=7)
Delete/dqlite/64-workers-4                4367.0m ± 0%       340.2m ± 10%  -92.21% (p=0.001 n=7)
Delete/dqlite/128-workers-4               4377.0m ± 1%       235.7m ± 10%  -94.62% (p=0.001 n=7)
Get/sqlite-4                                0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
Get/dqlite-4                                0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                      0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-tiny/pagination-4               0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/all-4              0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/pagination-4       0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/all-4            0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/pagination-4     0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-tiny/all-4                      0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-tiny/pagination-4               0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/all-4              0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/pagination-4       0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/all-4            0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/pagination-4     0.000 ± 0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
Update/sqlite/1-workers-4                   4.244 ± 0%        4.244 ±  0%        ~ (p=0.913 n=7)
Update/sqlite/4-workers-4                   4.329 ± 0%        2.979 ±  0%  -31.19% (p=0.001 n=7)
Update/sqlite/16-workers-4                  4.319 ± 1%        1.691 ±  1%  -60.85% (p=0.001 n=7)
Update/sqlite/64-workers-4                  4.304 ± 1%        1.185 ±  1%  -72.47% (p=0.001 n=7)
Update/sqlite/128-workers-4               4148.0m ± 4%       963.8m ±  1%  -76.76% (p=0.001 n=7)
Update/dqlite/1-workers-4                   4.215 ± 0%        4.217 ±  0%        ~ (p=0.274 n=7)
Update/dqlite/4-workers-4                   4.241 ± 0%        2.736 ±  1%  -35.49% (p=0.001 n=7)
Update/dqlite/16-workers-4                  4.236 ± 0%        1.390 ±  2%  -67.19% (p=0.001 n=7)
Update/dqlite/64-workers-4                4249.0m ± 0%       778.1m ± 13%  -81.69% (p=0.001 n=7)
Update/dqlite/128-workers-4               4252.0m ± 1%       538.4m ± 19%  -87.34% (p=0.001 n=7)
geomean                                                ²                   -56.14%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │     Before     │                 After                  │
                                        │ sec-reading/op │ sec-reading/op  vs base                │
Compaction/sqlite-4                         31.50µ ± 38%     20.70µ ± 69%         ~ (p=0.318 n=7)
Compaction/dqlite-4                         16.10µ ± 56%     18.30µ ± 31%   +13.66% (p=0.048 n=7)
Create/sqlite/1-workers-4                   22.40µ ± 18%     20.10µ ± 26%         ~ (p=0.175 n=7)
Create/sqlite/4-workers-4                   21.10µ ±  9%     71.00µ ± 11%  +236.49% (p=0.001 n=7)
Create/sqlite/16-workers-4                  23.80µ ± 26%     37.10µ ±  8%   +55.88% (p=0.001 n=7)
Create/sqlite/64-workers-4                  25.20µ ± 14%     20.20µ ±  6%   -19.84% (p=0.001 n=7)
Create/sqlite/128-workers-4                 20.90µ ± 28%     16.70µ ± 11%   -20.10% (p=0.001 n=7)
Create/dqlite/1-workers-4                   12.20µ ± 35%     15.00µ ± 43%         ~ (p=0.259 n=7)
Create/dqlite/4-workers-4                   12.50µ ± 16%     12.50µ ± 35%         ~ (p=0.831 n=7)
Create/dqlite/16-workers-4                  9.400µ ± 44%     5.400µ ± 44%   -42.55% (p=0.001 n=7)
Create/dqlite/64-workers-4                 11.900µ ± 24%     2.900µ ± 41%   -75.63% (p=0.001 n=7)
Create/dqlite/128-workers-4                10.300µ ± 17%     2.300µ ± 35%   -77.67% (p=0.001 n=7)
Delete/sqlite/1-workers-4                   32.00µ ± 16%     31.50µ ± 14%         ~ (p=0.402 n=7)
Delete/sqlite/4-workers-4                   33.60µ ± 12%     85.00µ ±  5%  +152.98% (p=0.001 n=7)
Delete/sqlite/16-workers-4                  34.60µ ±  9%     50.60µ ±  7%   +46.24% (p=0.001 n=7)
Delete/sqlite/64-workers-4                  36.70µ ± 14%     36.10µ ±  7%         ~ (p=0.474 n=7)
Delete/sqlite/128-workers-4                 36.20µ ±  7%     34.00µ ±  7%    -6.08% (p=0.002 n=7)
Delete/dqlite/1-workers-4                   15.50µ ± 32%     15.90µ ± 43%         ~ (p=0.456 n=7)
Delete/dqlite/4-workers-4                   14.30µ ± 45%     17.30µ ± 22%         ~ (p=0.318 n=7)
Delete/dqlite/16-workers-4                 17.200µ ± 31%     8.100µ ± 25%   -52.91% (p=0.001 n=7)
Delete/dqlite/64-workers-4                 15.700µ ± 38%     6.300µ ± 21%   -59.87% (p=0.001 n=7)
Delete/dqlite/128-workers-4                13.900µ ± 33%     5.400µ ± 22%   -61.15% (p=0.001 n=7)
Get/sqlite-4                                57.50µ ±  5%     57.00µ ±  6%         ~ (p=1.000 n=7)
Get/dqlite-4                                41.30µ ± 15%     39.80µ ±  8%         ~ (p=0.456 n=7)
List/sqlite-tiny/all-4                      5.100µ ± 12%     5.400µ ± 15%         ~ (p=0.682 n=7)
List/sqlite-tiny/pagination-4               6.000µ ± 10%     6.400µ ± 12%         ~ (p=0.339 n=7)
List/sqlite-fits-in-page/all-4              10.90µ ± 13%     11.30µ ±  4%         ~ (p=0.438 n=7)
List/sqlite-fits-in-page/pagination-4       30.50µ ±  9%     29.30µ ± 30%         ~ (p=0.274 n=7)
List/sqlite-overflows-page/all-4            11.20µ ±  3%     11.10µ ±  4%         ~ (p=0.075 n=7)
List/sqlite-overflows-page/pagination-4     14.40µ ±  2%     14.40µ ±  2%         ~ (p=1.000 n=7)
List/dqlite-tiny/all-4                      2.500µ ± 28%     2.500µ ± 24%         ~ (p=0.818 n=7)
List/dqlite-tiny/pagination-4               3.500µ ± 14%     3.200µ ± 16%         ~ (p=0.336 n=7)
List/dqlite-fits-in-page/all-4              7.200µ ± 17%     8.300µ ± 13%         ~ (p=0.147 n=7)
List/dqlite-fits-in-page/pagination-4       17.30µ ± 14%     16.80µ ± 27%         ~ (p=0.209 n=7)
List/dqlite-overflows-page/all-4            29.80µ ±  5%     29.80µ ±  1%         ~ (p=0.469 n=7)
List/dqlite-overflows-page/pagination-4     36.40µ ±  6%     35.90µ ±  8%         ~ (p=0.533 n=7)
Update/sqlite/1-workers-4                   21.70µ ± 26%     21.10µ ± 15%         ~ (p=0.512 n=7)
Update/sqlite/4-workers-4                   20.20µ ±  7%     83.60µ ±  9%  +313.86% (p=0.001 n=7)
Update/sqlite/16-workers-4                  24.60µ ± 18%     42.70µ ±  3%   +73.58% (p=0.001 n=7)
Update/sqlite/64-workers-4                  23.90µ ± 23%     26.80µ ±  4%         ~ (p=0.209 n=7)
Update/sqlite/128-workers-4                 25.30µ ± 32%     22.20µ ±  6%         ~ (p=0.197 n=7)
Update/dqlite/1-workers-4                   15.20µ ± 49%     14.00µ ± 16%         ~ (p=0.620 n=7)
Update/dqlite/4-workers-4                   11.30µ ± 26%     11.10µ ± 63%         ~ (p=0.644 n=7)
Update/dqlite/16-workers-4                 12.800µ ± 17%     5.100µ ± 24%   -60.16% (p=0.001 n=7)
Update/dqlite/64-workers-4                 10.900µ ± 38%     3.500µ ± 23%   -67.89% (p=0.001 n=7)
Update/dqlite/128-workers-4                10.800µ ± 38%     2.300µ ± 26%   -78.70% (p=0.001 n=7)
geomean                                     16.69µ           14.86µ         -10.95%

                                        │      Before       │                  After                  │
                                        │  sec-writing/op   │ sec-writing/op  vs base                 │
Compaction/sqlite-4                          9.400µ ±  4%       9.400µ ±  6%        ~ (p=0.965 n=7)
Compaction/dqlite-4                          7.200µ ±  7%       6.900µ ±  4%        ~ (p=0.090 n=7)
Create/sqlite/1-workers-4                    181.8µ ±  3%       178.4µ ±  2%        ~ (p=0.176 n=7)
Create/sqlite/4-workers-4                  1164.00µ ±  6%       62.50µ ± 12%  -94.63% (p=0.001 n=7)
Create/sqlite/16-workers-4                 4441.00µ ±  7%       22.40µ ±  8%  -99.50% (p=0.001 n=7)
Create/sqlite/64-workers-4                15520.00µ ±  3%       15.50µ ±  6%  -99.90% (p=0.001 n=7)
Create/sqlite/128-workers-4               39240.00µ ± 29%       13.90µ ±  9%  -99.96% (p=0.001 n=7)
Create/dqlite/1-workers-4                    35.10µ ± 29%       36.50µ ± 14%        ~ (p=0.686 n=7)
Create/dqlite/4-workers-4                    40.10µ ± 20%       30.20µ ± 16%  -24.69% (p=0.004 n=7)
Create/dqlite/16-workers-4                   38.40µ ± 21%       23.60µ ± 19%  -38.54% (p=0.001 n=7)
Create/dqlite/64-workers-4                   34.90µ ± 30%       21.30µ ±  4%  -38.97% (p=0.001 n=7)
Create/dqlite/128-workers-4                  40.30µ ± 17%       21.80µ ± 15%  -45.91% (p=0.001 n=7)
Delete/sqlite/1-workers-4                    178.0µ ±  3%       180.9µ ±  4%        ~ (p=0.209 n=7)
Delete/sqlite/4-workers-4                  1191.00µ ±  8%       64.10µ ±  7%  -94.62% (p=0.001 n=7)
Delete/sqlite/16-workers-4                 4612.00µ ±  6%       24.60µ ±  8%  -99.47% (p=0.001 n=7)
Delete/sqlite/64-workers-4                15590.00µ ±  3%       16.70µ ±  8%  -99.89% (p=0.001 n=7)
Delete/sqlite/128-workers-4               28940.00µ ±  5%       16.20µ ± 12%  -99.94% (p=0.001 n=7)
Delete/dqlite/1-workers-4                    41.30µ ± 34%       39.10µ ± 21%        ~ (p=0.456 n=7)
Delete/dqlite/4-workers-4                    46.00µ ± 18%       33.70µ ± 26%  -26.74% (p=0.004 n=7)
Delete/dqlite/16-workers-4                   40.80µ ± 20%       27.10µ ± 11%  -33.58% (p=0.001 n=7)
Delete/dqlite/64-workers-4                   44.20µ ± 19%       24.20µ ± 10%  -45.25% (p=0.001 n=7)
Delete/dqlite/128-workers-4                  43.20µ ± 23%       23.90µ ± 13%  -44.68% (p=0.001 n=7)
Get/sqlite-4                                  0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
Get/dqlite-4                                  0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                        0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-tiny/pagination-4                 0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/all-4                0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-fits-in-page/pagination-4         0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/all-4              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/pagination-4       0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-tiny/all-4                        0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-tiny/pagination-4                 0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/all-4                0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/pagination-4         0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/all-4              0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
List/dqlite-overflows-page/pagination-4       0.000 ±  0%        0.000 ±  0%        ~ (p=1.000 n=7) ¹
Update/sqlite/1-workers-4                    181.5µ ±  2%       178.2µ ±  2%        ~ (p=0.097 n=7)
Update/sqlite/4-workers-4                  1193.00µ ±  7%       57.40µ ± 14%  -95.19% (p=0.001 n=7)
Update/sqlite/16-workers-4                 4566.00µ ±  7%       22.80µ ± 11%  -99.50% (p=0.001 n=7)
Update/sqlite/64-workers-4                15580.00µ ± 16%       14.90µ ±  7%  -99.90% (p=0.001 n=7)
Update/sqlite/128-workers-4               51530.00µ ± 43%       14.20µ ±  6%  -99.97% (p=0.001 n=7)
Update/dqlite/1-workers-4                    35.60µ ± 22%       37.90µ ± 12%        ~ (p=0.402 n=7)
Update/dqlite/4-workers-4                    43.40µ ± 28%       31.90µ ± 19%  -26.50% (p=0.026 n=7)
Update/dqlite/16-workers-4                   39.50µ ± 15%       24.60µ ± 18%  -37.72% (p=0.001 n=7)
Update/dqlite/64-workers-4                   38.50µ ± 21%       23.40µ ± 12%  -39.22% (p=0.001 n=7)
Update/dqlite/128-workers-4                  40.20µ ± 18%       24.60µ ±  9%  -38.81% (p=0.001 n=7)
geomean                                                   ²                   -80.25%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │    Before     │                After                 │
                                        │     B/op      │     B/op       vs base               │
Compaction/sqlite-4                       2.677Ki ± 29%   1.976Ki ± 47%        ~ (p=0.259 n=7)
Compaction/dqlite-4                       4.660Ki ± 66%   5.489Ki ± 29%        ~ (p=0.318 n=7)
Create/sqlite/1-workers-4                 20.21Ki ±  0%   20.34Ki ±  0%   +0.61% (p=0.001 n=7)
Create/sqlite/4-workers-4                 20.21Ki ±  0%   19.04Ki ±  0%   -5.79% (p=0.001 n=7)
Create/sqlite/16-workers-4                20.19Ki ±  0%   17.54Ki ±  0%  -13.11% (p=0.001 n=7)
Create/sqlite/64-workers-4                20.23Ki ±  0%   17.14Ki ±  0%  -15.29% (p=0.001 n=7)
Create/sqlite/128-workers-4               20.59Ki ±  2%   17.06Ki ±  0%  -17.14% (p=0.001 n=7)
Create/dqlite/1-workers-4                 19.47Ki ±  1%   19.60Ki ±  0%   +0.64% (p=0.016 n=7)
Create/dqlite/4-workers-4                 19.50Ki ±  0%   18.14Ki ±  0%   -6.97% (p=0.001 n=7)
Create/dqlite/16-workers-4                19.50Ki ±  0%   16.93Ki ±  0%  -13.20% (p=0.001 n=7)
Create/dqlite/64-workers-4                19.51Ki ±  0%   16.63Ki ±  0%  -14.78% (p=0.001 n=7)
Create/dqlite/128-workers-4               19.52Ki ±  0%   16.59Ki ±  0%  -15.02% (p=0.001 n=7)
Delete/sqlite/1-workers-4                 22.64Ki ±  0%   22.76Ki ±  0%   +0.54% (p=0.001 n=7)
Delete/sqlite/4-workers-4                 22.62Ki ±  0%   21.47Ki ±  0%   -5.07% (p=0.001 n=7)
Delete/sqlite/16-workers-4                22.60Ki ±  0%   19.97Ki ±  0%  -11.64% (p=0.001 n=7)
Delete/sqlite/64-workers-4                22.63Ki ±  0%   19.60Ki ±  0%  -13.36% (p=0.001 n=7)
Delete/sqlite/128-workers-4               22.69Ki ±  0%   19.54Ki ±  0%  -13.86% (p=0.001 n=7)
Delete/dqlite/1-workers-4                 21.72Ki ±  0%   21.86Ki ±  0%   +0.62% (p=0.001 n=7)
Delete/dqlite/4-workers-4                 21.76Ki ±  0%   20.47Ki ±  0%   -5.93% (p=0.001 n=7)
Delete/dqlite/16-workers-4                21.75Ki ±  3%   19.20Ki ±  0%  -11.72% (p=0.001 n=7)
Delete/dqlite/64-workers-4                21.76Ki ±  5%   18.91Ki ±  0%  -13.12% (p=0.001 n=7)
Delete/dqlite/128-workers-4               21.78Ki ±  0%   18.88Ki ±  0%  -13.32% (p=0.001 n=7)
Get/sqlite-4                              22.86Ki ±  0%   22.86Ki ±  0%        ~ (p=0.514 n=7)
Get/dqlite-4                              21.79Ki ±  0%   21.79Ki ±  0%        ~ (p=0.589 n=7)
List/sqlite-tiny/all-4                    1.079Ki ±  9%   1.047Ki ± 10%        ~ (p=0.902 n=7)
List/sqlite-tiny/pagination-4              1022.0 ±  5%    1067.0 ±  8%        ~ (p=0.209 n=7)
List/sqlite-fits-in-page/all-4            6.842Ki ± 10%   7.354Ki ±  2%        ~ (p=0.259 n=7)
List/sqlite-fits-in-page/pagination-4     10.41Ki ±  4%   10.31Ki ± 30%        ~ (p=0.620 n=7)
List/sqlite-overflows-page/all-4          20.49Ki ± 12%   20.49Ki ± 12%        ~ (p=0.781 n=7)
List/sqlite-overflows-page/pagination-4   19.01Ki ±  8%   18.51Ki ± 11%   -2.63% (p=0.025 n=7)
List/dqlite-tiny/all-4                      952.0 ±  6%     949.0 ±  4%        ~ (p=0.874 n=7)
List/dqlite-tiny/pagination-4               845.0 ±  6%     800.0 ± 12%        ~ (p=0.259 n=7)
List/dqlite-fits-in-page/all-4            5.969Ki ±  1%   5.957Ki ±  1%        ~ (p=0.176 n=7)
List/dqlite-fits-in-page/pagination-4     6.029Ki ±  7%   5.661Ki ± 10%        ~ (p=0.435 n=7)
List/dqlite-overflows-page/all-4          28.71Ki ±  8%   30.96Ki ±  2%   +7.85% (p=0.038 n=7)
List/dqlite-overflows-page/pagination-4   31.86Ki ±  3%   31.30Ki ±  5%        ~ (p=0.318 n=7)
Update/sqlite/1-workers-4                 21.37Ki ±  0%   21.50Ki ±  0%   +0.61% (p=0.001 n=7)
Update/sqlite/4-workers-4                 21.36Ki ±  0%   20.18Ki ±  0%   -5.54% (p=0.001 n=7)
Update/sqlite/16-workers-4                21.34Ki ±  0%   18.64Ki ±  0%  -12.69% (p=0.001 n=7)
Update/sqlite/64-workers-4                21.38Ki ±  1%   18.25Ki ±  0%  -14.66% (p=0.001 n=7)
Update/sqlite/128-workers-4               21.73Ki ±  1%   18.17Ki ±  0%  -16.37% (p=0.001 n=7)
Update/dqlite/1-workers-4                 20.58Ki ±  0%   20.71Ki ±  0%   +0.63% (p=0.001 n=7)
Update/dqlite/4-workers-4                 20.60Ki ±  0%   19.27Ki ±  0%   -6.44% (p=0.001 n=7)
Update/dqlite/16-workers-4                20.61Ki ±  0%   18.04Ki ±  0%  -12.48% (p=0.001 n=7)
Update/dqlite/64-workers-4                20.63Ki ±  5%   17.75Ki ±  0%  -14.00% (p=0.001 n=7)
Update/dqlite/128-workers-4               20.60Ki ±  7%   17.70Ki ±  0%  -14.08% (p=0.001 n=7)
geomean                                   13.74Ki         12.82Ki         -6.68%

                                        │   Before    │                After                 │
                                        │  allocs/op  │  allocs/op   vs base                 │
Compaction/sqlite-4                       57.00 ± 28%   42.00 ± 50%        ~ (p=0.241 n=7)
Compaction/dqlite-4                       112.0 ± 67%   132.0 ± 29%        ~ (p=0.246 n=7)
Create/sqlite/1-workers-4                 393.0 ±  0%   396.0 ±  0%   +0.76% (p=0.001 n=7)
Create/sqlite/4-workers-4                 393.0 ±  0%   362.0 ±  0%   -7.89% (p=0.001 n=7)
Create/sqlite/16-workers-4                392.0 ±  0%   319.0 ±  0%  -18.62% (p=0.001 n=7)
Create/sqlite/64-workers-4                393.0 ±  1%   305.0 ±  0%  -22.39% (p=0.001 n=7)
Create/sqlite/128-workers-4               397.0 ±  2%   303.0 ±  0%  -23.68% (p=0.001 n=7)
Create/dqlite/1-workers-4                 363.0 ±  0%   366.0 ±  0%   +0.83% (p=0.001 n=7)
Create/dqlite/4-workers-4                 363.0 ±  0%   333.0 ±  1%   -8.26% (p=0.001 n=7)
Create/dqlite/16-workers-4                363.0 ±  0%   303.0 ±  0%  -16.53% (p=0.001 n=7)
Create/dqlite/64-workers-4                363.0 ±  0%   294.0 ±  0%  -19.01% (p=0.001 n=7)
Create/dqlite/128-workers-4               363.0 ±  0%   293.0 ±  0%  -19.28% (p=0.001 n=7)
Delete/sqlite/1-workers-4                 424.0 ±  0%   427.0 ±  0%   +0.71% (p=0.001 n=7)
Delete/sqlite/4-workers-4                 424.0 ±  0%   393.0 ±  0%   -7.31% (p=0.001 n=7)
Delete/sqlite/16-workers-4                423.0 ±  0%   349.0 ±  0%  -17.49% (p=0.001 n=7)
Delete/sqlite/64-workers-4                423.0 ±  0%   337.0 ±  0%  -20.33% (p=0.001 n=7)
Delete/sqlite/128-workers-4               424.0 ±  0%   335.0 ±  0%  -20.99% (p=0.001 n=7)
Delete/dqlite/1-workers-4                 393.0 ±  0%   396.0 ±  0%   +0.76% (p=0.001 n=7)
Delete/dqlite/4-workers-4                 393.0 ±  0%   365.0 ±  1%   -7.12% (p=0.001 n=7)
Delete/dqlite/16-workers-4                393.0 ±  4%   333.0 ±  0%  -15.27% (p=0.001 n=7)
Delete/dqlite/64-workers-4                392.0 ±  6%   325.0 ±  0%  -17.09% (p=0.001 n=7)
Delete/dqlite/128-workers-4               392.0 ±  0%   323.0 ±  0%  -17.60% (p=0.001 n=7)
Get/sqlite-4                              410.0 ±  0%   410.0 ±  0%        ~ (p=1.000 n=7) ¹
Get/dqlite-4                              388.0 ±  0%   388.0 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                    14.00 ± 14%   14.00 ± 14%        ~ (p=0.913 n=7)
List/sqlite-tiny/pagination-4             12.00 ±  8%   13.00 ± 15%        ~ (p=0.239 n=7)
List/sqlite-fits-in-page/all-4            19.00 ± 16%   20.00 ±  5%        ~ (p=0.103 n=7)
List/sqlite-fits-in-page/pagination-4     36.00 ±  8%   34.00 ± 38%        ~ (p=0.235 n=7)
List/sqlite-overflows-page/all-4          8.000 ±  0%   8.000 ±  0%        ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/pagination-4   8.000 ± 12%   7.000 ± 14%        ~ (p=0.266 n=7)
List/dqlite-tiny/all-4                    12.00 ±  8%   12.00 ±  8%        ~ (p=0.559 n=7)
List/dqlite-tiny/pagination-4             9.000 ± 11%   9.000 ± 22%        ~ (p=0.522 n=7)
List/dqlite-fits-in-page/all-4            18.00 ±  0%   18.00 ±  6%        ~ (p=1.000 n=7)
List/dqlite-fits-in-page/pagination-4     19.00 ± 16%   18.00 ± 22%        ~ (p=0.172 n=7)
List/dqlite-overflows-page/all-4          32.00 ±  3%   32.00 ±  3%        ~ (p=0.617 n=7)
List/dqlite-overflows-page/pagination-4   34.00 ±  3%   34.00 ±  3%        ~ (p=0.298 n=7)
Update/sqlite/1-workers-4                 400.0 ±  0%   403.0 ±  0%   +0.75% (p=0.001 n=7)
Update/sqlite/4-workers-4                 400.0 ±  0%   369.0 ±  0%   -7.75% (p=0.001 n=7)
Update/sqlite/16-workers-4                399.0 ±  0%   325.0 ±  0%  -18.55% (p=0.001 n=7)
Update/sqlite/64-workers-4                400.0 ±  1%   312.0 ±  0%  -22.00% (p=0.001 n=7)
Update/sqlite/128-workers-4               404.0 ±  1%   310.0 ±  0%  -23.27% (p=0.001 n=7)
Update/dqlite/1-workers-4                 370.0 ±  0%   373.0 ±  0%   +0.81% (p=0.001 n=7)
Update/dqlite/4-workers-4                 370.0 ±  0%   340.0 ±  1%   -8.11% (p=0.001 n=7)
Update/dqlite/16-workers-4                370.0 ±  0%   309.0 ±  0%  -16.49% (p=0.001 n=7)
Update/dqlite/64-workers-4                369.0 ±  7%   301.0 ±  0%  -18.43% (p=0.001 n=7)
Update/dqlite/128-workers-4               368.0 ±  9%   300.0 ±  0%  -18.48% (p=0.001 n=7)
geomean                                   158.6         143.7         -9.39%
¹ all samples are equal

                                        │        Before         │                    After                     │
                                        │ network-bytes-read/op │ network-bytes-read/op  vs base               │
Compaction/dqlite-4                               1.684Ki ± 68%           1.990Ki ± 29%        ~ (p=0.318 n=7)
Create/dqlite/1-workers-4                           242.3 ±  0%             242.4 ±  0%        ~ (p=0.393 n=7)
Create/dqlite/4-workers-4                           243.1 ±  0%             197.0 ±  6%  -18.96% (p=0.001 n=7)
Create/dqlite/16-workers-4                          243.0 ±  0%             147.6 ±  1%  -39.26% (p=0.001 n=7)
Create/dqlite/64-workers-4                          243.2 ±  0%             134.2 ±  1%  -44.82% (p=0.001 n=7)
Create/dqlite/128-workers-4                         243.2 ±  0%             132.5 ±  1%  -45.52% (p=0.001 n=7)
Delete/dqlite/1-workers-4                           720.4 ±  0%             720.0 ±  0%        ~ (p=0.058 n=7)
Delete/dqlite/4-workers-4                           721.5 ±  0%             685.7 ±  1%   -4.96% (p=0.001 n=7)
Delete/dqlite/16-workers-4                          721.4 ±  4%             629.3 ±  1%  -12.77% (p=0.001 n=7)
Delete/dqlite/64-workers-4                          721.6 ±  6%             618.5 ±  0%  -14.29% (p=0.001 n=7)
Delete/dqlite/128-workers-4                         721.7 ±  0%             617.9 ±  0%  -14.38% (p=0.001 n=7)
Get/dqlite-4                                        996.2 ±  0%             996.2 ±  0%        ~ (p=0.462 n=7)
List/dqlite-tiny/all-4                              167.7 ±  3%             166.1 ± 10%        ~ (p=0.090 n=7)
List/dqlite-tiny/pagination-4                       133.3 ± 18%             119.3 ± 28%        ~ (p=0.535 n=7)
List/dqlite-fits-in-page/all-4                    1.317Ki ±  2%           1.312Ki ±  2%        ~ (p=0.137 n=7)
List/dqlite-fits-in-page/pagination-4             1.395Ki ± 16%           1.303Ki ± 23%        ~ (p=0.154 n=7)
List/dqlite-overflows-page/all-4                  7.237Ki ±  3%           7.341Ki ±  4%        ~ (p=0.685 n=7)
List/dqlite-overflows-page/pagination-4           7.896Ki ±  4%           7.724Ki ±  6%        ~ (p=0.383 n=7)
Update/dqlite/1-workers-4                           263.1 ±  0%             263.2 ±  0%        ~ (p=0.694 n=7)
Update/dqlite/4-workers-4                           263.3 ±  0%             215.6 ±  6%  -18.12% (p=0.001 n=7)
Update/dqlite/16-workers-4                          263.2 ±  0%             162.9 ±  1%  -38.11% (p=0.001 n=7)
Update/dqlite/64-workers-4                          262.8 ± 16%             150.8 ±  1%  -42.62% (p=0.001 n=7)
Update/dqlite/128-workers-4                         262.2 ± 23%             149.1 ±  1%  -43.14% (p=0.001 n=7)
geomean                                             546.5                   454.5        -16.84%

                                        │          Before          │                       After                       │
                                        │ network-bytes-written/op │ network-bytes-written/op  vs base                 │
Compaction/dqlite-4                                    4.574 ±  8%                4.572 ±  5%        ~ (p=0.593 n=7)
Create/dqlite/1-workers-4                              117.7 ±  1%                117.8 ±  0%        ~ (p=0.369 n=7)
Create/dqlite/4-workers-4                              119.2 ±  0%                114.5 ± 10%        ~ (p=0.200 n=7)
Create/dqlite/16-workers-4                            118.90 ±  0%                96.32 ±  1%  -18.99% (p=0.001 n=7)
Create/dqlite/64-workers-4                            119.10 ±  1%                89.04 ±  0%  -25.24% (p=0.001 n=7)
Create/dqlite/128-workers-4                           119.30 ±  0%                87.98 ±  0%  -26.25% (p=0.001 n=7)
Delete/dqlite/1-workers-4                              83.48 ±  0%                83.30 ±  0%        ~ (p=0.068 n=7)
Delete/dqlite/4-workers-4                              83.94 ±  0%                85.77 ± 10%        ~ (p=0.689 n=7)
Delete/dqlite/16-workers-4                             83.92 ± 11%                57.78 ±  5%  -31.15% (p=0.001 n=7)
Delete/dqlite/64-workers-4                             84.02 ± 17%                50.07 ±  0%  -40.41% (p=0.001 n=7)
Delete/dqlite/128-workers-4                            84.01 ±  0%                49.09 ±  1%  -41.57% (p=0.001 n=7)
Get/dqlite-4                                           88.55 ±  0%                88.53 ±  0%   -0.02% (p=0.041 n=7)
List/dqlite-tiny/all-4                               0.03591 ±  5%              0.03492 ± 18%        ~ (p=0.073 n=7)
List/dqlite-tiny/pagination-4                        0.02535 ± 39%              0.02218 ± 49%        ~ (p=0.535 n=7)
List/dqlite-fits-in-page/all-4                       0.06097 ±  3%              0.06038 ±  4%        ~ (p=0.383 n=7)
List/dqlite-fits-in-page/pagination-4                0.07614 ± 16%              0.07193 ± 32%        ~ (p=0.383 n=7)
List/dqlite-overflows-page/all-4                     0.08288 ±  8%              0.08282 ±  5%        ~ (p=0.435 n=7)
List/dqlite-overflows-page/pagination-4               0.1065 ±  5%               0.1062 ±  6%        ~ (p=0.736 n=7)
Update/dqlite/1-workers-4                              136.7 ±  0%                136.7 ±  0%        ~ (p=1.000 n=7) ¹
Update/dqlite/4-workers-4                              136.6 ±  0%                128.3 ± 10%        ~ (p=0.202 n=7)
Update/dqlite/16-workers-4                             136.8 ±  0%                105.2 ±  2%  -23.10% (p=0.001 n=7)
Update/dqlite/64-workers-4                            137.00 ± 10%                98.77 ±  0%  -27.91% (p=0.001 n=7)
Update/dqlite/128-workers-4                           136.30 ± 15%                97.38 ±  0%  -28.55% (p=0.001 n=7)
geomean                                                13.30                      11.44        -14.02%
¹ all samples are equal
Current status
goos: linux
goarch: amd64
pkg: github.com/canonical/k8s-dqlite/test
cpu: AMD EPYC 7763 64-Core Processor                
                                        │    After     │
                                        │    sec/op    │
Compaction/sqlite-4                       16.58µ ± 46%
Compaction/dqlite-4                       41.69µ ± 11%
Create/sqlite/1-workers-4                 414.4µ ±  1%
Create/sqlite/4-workers-4                 152.5µ ±  1%
Create/sqlite/16-workers-4                67.45µ ±  2%
Create/sqlite/64-workers-4                42.89µ ±  5%
Create/sqlite/128-workers-4               36.66µ ±  5%
Create/dqlite/1-workers-4                 837.1µ ±  3%
Create/dqlite/4-workers-4                 445.2µ ±  7%
Create/dqlite/16-workers-4                198.3µ ±  2%
Create/dqlite/64-workers-4                125.2µ ±  1%
Create/dqlite/128-workers-4               110.4µ ±  2%
Delete/sqlite/1-workers-4                 409.0µ ±  2%
Delete/sqlite/4-workers-4                 154.2µ ±  2%
Delete/sqlite/16-workers-4                72.81µ ±  5%
Delete/sqlite/64-workers-4                46.86µ ±  3%
Delete/sqlite/128-workers-4               43.18µ ±  5%
Delete/dqlite/1-workers-4                 840.6µ ±  1%
Delete/dqlite/4-workers-4                 486.7µ ±  7%
Delete/dqlite/16-workers-4                204.7µ ±  6%
Delete/dqlite/64-workers-4                129.2µ ±  1%
Delete/dqlite/128-workers-4               116.1µ ±  3%
Get/sqlite-4                              213.9µ ±  2%
Get/dqlite-4                              327.7µ ±  1%
List/sqlite-tiny/all-4                    3.082µ ±  5%
List/sqlite-tiny/pagination-4             4.566µ ±  4%
List/sqlite-fits-in-page/all-4            6.280µ ±  4%
List/sqlite-fits-in-page/pagination-4     16.37µ ± 12%
List/sqlite-overflows-page/all-4          14.69µ ±  4%
List/sqlite-overflows-page/pagination-4   18.24µ ±  2%
List/dqlite-tiny/all-4                    1.988µ ±  4%
List/dqlite-tiny/pagination-4             3.065µ ±  7%
List/dqlite-fits-in-page/all-4            5.291µ ±  4%
List/dqlite-fits-in-page/pagination-4     11.60µ ±  5%
List/dqlite-overflows-page/all-4          18.38µ ±  2%
List/dqlite-overflows-page/pagination-4   22.67µ ±  4%
Update/sqlite/1-workers-4                 413.2µ ±  0%
Update/sqlite/4-workers-4                 156.2µ ±  1%
Update/sqlite/16-workers-4                74.94µ ±  1%
Update/sqlite/64-workers-4                49.66µ ±  0%
Update/sqlite/128-workers-4               44.35µ ±  3%
Update/dqlite/1-workers-4                 828.9µ ±  2%
Update/dqlite/4-workers-4                 459.7µ ±  9%
Update/dqlite/16-workers-4                208.0µ ± 12%
Update/dqlite/64-workers-4                138.9µ ±  4%
Update/dqlite/128-workers-4               120.5µ ±  1%
geomean                                   68.77µ

                                        │        After         │
                                        │ page-cache-misses/op │
Compaction/sqlite-4                               0.000 ± 0%
Compaction/dqlite-4                               0.000 ± 0%
Create/sqlite/1-workers-4                         0.000 ± 0%
Create/sqlite/4-workers-4                         0.000 ± 0%
Create/sqlite/16-workers-4                        0.000 ± 0%
Create/sqlite/64-workers-4                        0.000 ± 0%
Create/sqlite/128-workers-4                       0.000 ± 0%
Create/dqlite/1-workers-4                         0.000 ± 0%
Create/dqlite/4-workers-4                         0.000 ± 0%
Create/dqlite/16-workers-4                        0.000 ± 0%
Create/dqlite/64-workers-4                        0.000 ± 0%
Create/dqlite/128-workers-4                       0.000 ± 0%
Delete/sqlite/1-workers-4                         0.000 ± 0%
Delete/sqlite/4-workers-4                         0.000 ± 0%
Delete/sqlite/16-workers-4                        0.000 ± 0%
Delete/sqlite/64-workers-4                        0.000 ± 0%
Delete/sqlite/128-workers-4                       0.000 ± 0%
Delete/dqlite/1-workers-4                         0.000 ± 0%
Delete/dqlite/4-workers-4                         0.000 ± 0%
Delete/dqlite/16-workers-4                        0.000 ± 0%
Delete/dqlite/64-workers-4                        0.000 ± 0%
Delete/dqlite/128-workers-4                       0.000 ± 0%
Get/sqlite-4                                      0.000 ± 0%
Get/dqlite-4                                      0.000 ± 0%
List/sqlite-tiny/all-4                            0.000 ± 0%
List/sqlite-tiny/pagination-4                     0.000 ± 0%
List/sqlite-fits-in-page/all-4                    0.000 ± 0%
List/sqlite-fits-in-page/pagination-4             0.000 ± 0%
List/sqlite-overflows-page/all-4                  0.000 ± 0%
List/sqlite-overflows-page/pagination-4           0.000 ± 0%
List/dqlite-tiny/all-4                            0.000 ± 0%
List/dqlite-tiny/pagination-4                     0.000 ± 0%
List/dqlite-fits-in-page/all-4                    0.000 ± 0%
List/dqlite-fits-in-page/pagination-4             0.000 ± 0%
List/dqlite-overflows-page/all-4                  0.000 ± 0%
List/dqlite-overflows-page/pagination-4           0.000 ± 0%
Update/sqlite/1-workers-4                         0.000 ± 0%
Update/sqlite/4-workers-4                         0.000 ± 0%
Update/sqlite/16-workers-4                        0.000 ± 0%
Update/sqlite/64-workers-4                        0.000 ± 0%
Update/sqlite/128-workers-4                       0.000 ± 0%
Update/dqlite/1-workers-4                         0.000 ± 0%
Update/dqlite/4-workers-4                         0.000 ± 0%
Update/dqlite/16-workers-4                        0.000 ± 0%
Update/dqlite/64-workers-4                        0.000 ± 0%
Update/dqlite/128-workers-4                       0.000 ± 0%
geomean                                                      ¹
¹ summaries must be >0 to compute geomean

                                        │        After         │
                                        │ page-cache-spills/op │
Compaction/sqlite-4                               0.000 ± 0%
Compaction/dqlite-4                               0.000 ± 0%
Create/sqlite/1-workers-4                         0.000 ± 0%
Create/sqlite/4-workers-4                         0.000 ± 0%
Create/sqlite/16-workers-4                        0.000 ± 0%
Create/sqlite/64-workers-4                        0.000 ± 0%
Create/sqlite/128-workers-4                       0.000 ± 0%
Create/dqlite/1-workers-4                         0.000 ± 0%
Create/dqlite/4-workers-4                         0.000 ± 0%
Create/dqlite/16-workers-4                        0.000 ± 0%
Create/dqlite/64-workers-4                        0.000 ± 0%
Create/dqlite/128-workers-4                       0.000 ± 0%
Delete/sqlite/1-workers-4                         0.000 ± 0%
Delete/sqlite/4-workers-4                         0.000 ± 0%
Delete/sqlite/16-workers-4                        0.000 ± 0%
Delete/sqlite/64-workers-4                        0.000 ± 0%
Delete/sqlite/128-workers-4                       0.000 ± 0%
Delete/dqlite/1-workers-4                         0.000 ± 0%
Delete/dqlite/4-workers-4                         0.000 ± 0%
Delete/dqlite/16-workers-4                        0.000 ± 0%
Delete/dqlite/64-workers-4                        0.000 ± 0%
Delete/dqlite/128-workers-4                       0.000 ± 0%
Get/sqlite-4                                      0.000 ± 0%
Get/dqlite-4                                      0.000 ± 0%
List/sqlite-tiny/all-4                            0.000 ± 0%
List/sqlite-tiny/pagination-4                     0.000 ± 0%
List/sqlite-fits-in-page/all-4                    0.000 ± 0%
List/sqlite-fits-in-page/pagination-4             0.000 ± 0%
List/sqlite-overflows-page/all-4                  0.000 ± 0%
List/sqlite-overflows-page/pagination-4           0.000 ± 0%
List/dqlite-tiny/all-4                            0.000 ± 0%
List/dqlite-tiny/pagination-4                     0.000 ± 0%
List/dqlite-fits-in-page/all-4                    0.000 ± 0%
List/dqlite-fits-in-page/pagination-4             0.000 ± 0%
List/dqlite-overflows-page/all-4                  0.000 ± 0%
List/dqlite-overflows-page/pagination-4           0.000 ± 0%
Update/sqlite/1-workers-4                         0.000 ± 0%
Update/sqlite/4-workers-4                         0.000 ± 0%
Update/sqlite/16-workers-4                        0.000 ± 0%
Update/sqlite/64-workers-4                        0.000 ± 0%
Update/sqlite/128-workers-4                       0.000 ± 0%
Update/dqlite/1-workers-4                         0.000 ± 0%
Update/dqlite/4-workers-4                         0.000 ± 0%
Update/dqlite/16-workers-4                        0.000 ± 0%
Update/dqlite/64-workers-4                        0.000 ± 0%
Update/dqlite/128-workers-4                       0.000 ± 0%
geomean                                                      ¹
¹ summaries must be >0 to compute geomean

                                        │     After     │
                                        │ page-reads/op │
Compaction/sqlite-4                         12.24 ±  2%
Compaction/dqlite-4                         12.15 ±  1%
Create/sqlite/1-workers-4                   13.98 ±  0%
Create/sqlite/4-workers-4                   10.54 ±  0%
Create/sqlite/16-workers-4                  10.42 ±  0%
Create/sqlite/64-workers-4                  10.35 ±  0%
Create/sqlite/128-workers-4                 10.33 ±  0%
Create/dqlite/1-workers-4                   13.96 ±  2%
Create/dqlite/4-workers-4                   10.98 ±  0%
Create/dqlite/16-workers-4                  10.48 ±  0%
Create/dqlite/64-workers-4                  10.33 ±  0%
Create/dqlite/128-workers-4                 10.31 ±  0%
Delete/sqlite/1-workers-4                   16.21 ±  0%
Delete/sqlite/4-workers-4                   14.19 ±  1%
Delete/sqlite/16-workers-4                  16.92 ±  2%
Delete/sqlite/64-workers-4                  17.21 ±  0%
Delete/sqlite/128-workers-4                 17.21 ±  0%
Delete/dqlite/1-workers-4                   16.37 ±  1%
Delete/dqlite/4-workers-4                   13.22 ±  0%
Delete/dqlite/16-workers-4                  12.92 ±  3%
Delete/dqlite/64-workers-4                  14.28 ±  1%
Delete/dqlite/128-workers-4                 14.29 ±  0%
Get/sqlite-4                                14.96 ±  0%
Get/dqlite-4                                11.98 ±  0%
List/sqlite-tiny/all-4                     191.0m ±  1%
List/sqlite-tiny/pagination-4               1.125 ±  3%
List/sqlite-fits-in-page/all-4             260.0m ± 37%
List/sqlite-fits-in-page/pagination-4      962.5m ±  3%
List/sqlite-overflows-page/all-4           177.5m ±  0%
List/sqlite-overflows-page/pagination-4     1.065 ±  0%
List/dqlite-tiny/all-4                     190.3m ±  0%
List/dqlite-tiny/pagination-4               1.123 ±  0%
List/dqlite-fits-in-page/all-4             260.2m ± 37%
List/dqlite-fits-in-page/pagination-4      955.1m ±  4%
List/dqlite-overflows-page/all-4           184.9m ±  0%
List/dqlite-overflows-page/pagination-4     1.073 ±  3%
Update/sqlite/1-workers-4                   15.90 ±  0%
Update/sqlite/4-workers-4                   12.38 ±  0%
Update/sqlite/16-workers-4                  12.27 ±  0%
Update/sqlite/64-workers-4                  12.26 ±  0%
Update/sqlite/128-workers-4                 12.61 ±  1%
Update/dqlite/1-workers-4                   15.85 ±  0%
Update/dqlite/4-workers-4                   12.93 ±  0%
Update/dqlite/16-workers-4                  12.34 ±  0%
Update/dqlite/64-workers-4                  12.23 ±  0%
Update/dqlite/128-workers-4                 12.21 ±  0%
geomean                                     5.449

                                        │     After      │
                                        │ page-writes/op │
Compaction/sqlite-4                       190.8m ±  0%
Compaction/dqlite-4                       187.7m ±  1%
Create/sqlite/1-workers-4                  4.377 ±  0%
Create/sqlite/4-workers-4                  2.685 ±  1%
Create/sqlite/16-workers-4                999.3m ±  1%
Create/sqlite/64-workers-4                439.4m ±  4%
Create/sqlite/128-workers-4               307.5m ±  9%
Create/dqlite/1-workers-4                  4.312 ±  0%
Create/dqlite/4-workers-4                  2.344 ±  1%
Create/dqlite/16-workers-4                794.5m ±  4%
Create/dqlite/64-workers-4                305.2m ±  7%
Create/dqlite/128-workers-4               180.7m ±  8%
Delete/sqlite/1-workers-4                  4.376 ±  0%
Delete/sqlite/4-workers-4                  2.702 ±  1%
Delete/sqlite/16-workers-4                 1.139 ±  4%
Delete/sqlite/64-workers-4                683.9m ±  8%
Delete/sqlite/128-workers-4               513.2m ± 11%
Delete/dqlite/1-workers-4                  4.385 ±  1%
Delete/dqlite/4-workers-4                  2.403 ±  1%
Delete/dqlite/16-workers-4                808.3m ±  5%
Delete/dqlite/64-workers-4                340.2m ± 10%
Delete/dqlite/128-workers-4               235.7m ± 10%
Get/sqlite-4                               0.000 ±  0%
Get/dqlite-4                               0.000 ±  0%
List/sqlite-tiny/all-4                     0.000 ±  0%
List/sqlite-tiny/pagination-4              0.000 ±  0%
List/sqlite-fits-in-page/all-4             0.000 ±  0%
List/sqlite-fits-in-page/pagination-4      0.000 ±  0%
List/sqlite-overflows-page/all-4           0.000 ±  0%
List/sqlite-overflows-page/pagination-4    0.000 ±  0%
List/dqlite-tiny/all-4                     0.000 ±  0%
List/dqlite-tiny/pagination-4              0.000 ±  0%
List/dqlite-fits-in-page/all-4             0.000 ±  0%
List/dqlite-fits-in-page/pagination-4      0.000 ±  0%
List/dqlite-overflows-page/all-4           0.000 ±  0%
List/dqlite-overflows-page/pagination-4    0.000 ±  0%
Update/sqlite/1-workers-4                  4.244 ±  0%
Update/sqlite/4-workers-4                  2.979 ±  0%
Update/sqlite/16-workers-4                 1.691 ±  1%
Update/sqlite/64-workers-4                 1.185 ±  1%
Update/sqlite/128-workers-4               963.8m ±  1%
Update/dqlite/1-workers-4                  4.217 ±  0%
Update/dqlite/4-workers-4                  2.736 ±  1%
Update/dqlite/16-workers-4                 1.390 ±  2%
Update/dqlite/64-workers-4                778.1m ± 13%
Update/dqlite/128-workers-4               538.4m ± 19%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                        │     After      │
                                        │ sec-reading/op │
Compaction/sqlite-4                         20.70µ ± 69%
Compaction/dqlite-4                         18.30µ ± 31%
Create/sqlite/1-workers-4                   20.10µ ± 26%
Create/sqlite/4-workers-4                   71.00µ ± 11%
Create/sqlite/16-workers-4                  37.10µ ±  8%
Create/sqlite/64-workers-4                  20.20µ ±  6%
Create/sqlite/128-workers-4                 16.70µ ± 11%
Create/dqlite/1-workers-4                   15.00µ ± 43%
Create/dqlite/4-workers-4                   12.50µ ± 35%
Create/dqlite/16-workers-4                  5.400µ ± 44%
Create/dqlite/64-workers-4                  2.900µ ± 41%
Create/dqlite/128-workers-4                 2.300µ ± 35%
Delete/sqlite/1-workers-4                   31.50µ ± 14%
Delete/sqlite/4-workers-4                   85.00µ ±  5%
Delete/sqlite/16-workers-4                  50.60µ ±  7%
Delete/sqlite/64-workers-4                  36.10µ ±  7%
Delete/sqlite/128-workers-4                 34.00µ ±  7%
Delete/dqlite/1-workers-4                   15.90µ ± 43%
Delete/dqlite/4-workers-4                   17.30µ ± 22%
Delete/dqlite/16-workers-4                  8.100µ ± 25%
Delete/dqlite/64-workers-4                  6.300µ ± 21%
Delete/dqlite/128-workers-4                 5.400µ ± 22%
Get/sqlite-4                                57.00µ ±  6%
Get/dqlite-4                                39.80µ ±  8%
List/sqlite-tiny/all-4                      5.400µ ± 15%
List/sqlite-tiny/pagination-4               6.400µ ± 12%
List/sqlite-fits-in-page/all-4              11.30µ ±  4%
List/sqlite-fits-in-page/pagination-4       29.30µ ± 30%
List/sqlite-overflows-page/all-4            11.10µ ±  4%
List/sqlite-overflows-page/pagination-4     14.40µ ±  2%
List/dqlite-tiny/all-4                      2.500µ ± 24%
List/dqlite-tiny/pagination-4               3.200µ ± 16%
List/dqlite-fits-in-page/all-4              8.300µ ± 13%
List/dqlite-fits-in-page/pagination-4       16.80µ ± 27%
List/dqlite-overflows-page/all-4            29.80µ ±  1%
List/dqlite-overflows-page/pagination-4     35.90µ ±  8%
Update/sqlite/1-workers-4                   21.10µ ± 15%
Update/sqlite/4-workers-4                   83.60µ ±  9%
Update/sqlite/16-workers-4                  42.70µ ±  3%
Update/sqlite/64-workers-4                  26.80µ ±  4%
Update/sqlite/128-workers-4                 22.20µ ±  6%
Update/dqlite/1-workers-4                   14.00µ ± 16%
Update/dqlite/4-workers-4                   11.10µ ± 63%
Update/dqlite/16-workers-4                  5.100µ ± 24%
Update/dqlite/64-workers-4                  3.500µ ± 23%
Update/dqlite/128-workers-4                 2.300µ ± 26%
geomean                                     14.86µ

                                        │     After      │
                                        │ sec-writing/op │
Compaction/sqlite-4                       9.400µ ±  6%
Compaction/dqlite-4                       6.900µ ±  4%
Create/sqlite/1-workers-4                 178.4µ ±  2%
Create/sqlite/4-workers-4                 62.50µ ± 12%
Create/sqlite/16-workers-4                22.40µ ±  8%
Create/sqlite/64-workers-4                15.50µ ±  6%
Create/sqlite/128-workers-4               13.90µ ±  9%
Create/dqlite/1-workers-4                 36.50µ ± 14%
Create/dqlite/4-workers-4                 30.20µ ± 16%
Create/dqlite/16-workers-4                23.60µ ± 19%
Create/dqlite/64-workers-4                21.30µ ±  4%
Create/dqlite/128-workers-4               21.80µ ± 15%
Delete/sqlite/1-workers-4                 180.9µ ±  4%
Delete/sqlite/4-workers-4                 64.10µ ±  7%
Delete/sqlite/16-workers-4                24.60µ ±  8%
Delete/sqlite/64-workers-4                16.70µ ±  8%
Delete/sqlite/128-workers-4               16.20µ ± 12%
Delete/dqlite/1-workers-4                 39.10µ ± 21%
Delete/dqlite/4-workers-4                 33.70µ ± 26%
Delete/dqlite/16-workers-4                27.10µ ± 11%
Delete/dqlite/64-workers-4                24.20µ ± 10%
Delete/dqlite/128-workers-4               23.90µ ± 13%
Get/sqlite-4                               0.000 ±  0%
Get/dqlite-4                               0.000 ±  0%
List/sqlite-tiny/all-4                     0.000 ±  0%
List/sqlite-tiny/pagination-4              0.000 ±  0%
List/sqlite-fits-in-page/all-4             0.000 ±  0%
List/sqlite-fits-in-page/pagination-4      0.000 ±  0%
List/sqlite-overflows-page/all-4           0.000 ±  0%
List/sqlite-overflows-page/pagination-4    0.000 ±  0%
List/dqlite-tiny/all-4                     0.000 ±  0%
List/dqlite-tiny/pagination-4              0.000 ±  0%
List/dqlite-fits-in-page/all-4             0.000 ±  0%
List/dqlite-fits-in-page/pagination-4      0.000 ±  0%
List/dqlite-overflows-page/all-4           0.000 ±  0%
List/dqlite-overflows-page/pagination-4    0.000 ±  0%
Update/sqlite/1-workers-4                 178.2µ ±  2%
Update/sqlite/4-workers-4                 57.40µ ± 14%
Update/sqlite/16-workers-4                22.80µ ± 11%
Update/sqlite/64-workers-4                14.90µ ±  7%
Update/sqlite/128-workers-4               14.20µ ±  6%
Update/dqlite/1-workers-4                 37.90µ ± 12%
Update/dqlite/4-workers-4                 31.90µ ± 19%
Update/dqlite/16-workers-4                24.60µ ± 18%
Update/dqlite/64-workers-4                23.40µ ± 12%
Update/dqlite/128-workers-4               24.60µ ±  9%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                        │     After     │
                                        │     B/op      │
Compaction/sqlite-4                       1.976Ki ± 47%
Compaction/dqlite-4                       5.489Ki ± 29%
Create/sqlite/1-workers-4                 20.34Ki ±  0%
Create/sqlite/4-workers-4                 19.04Ki ±  0%
Create/sqlite/16-workers-4                17.54Ki ±  0%
Create/sqlite/64-workers-4                17.14Ki ±  0%
Create/sqlite/128-workers-4               17.06Ki ±  0%
Create/dqlite/1-workers-4                 19.60Ki ±  0%
Create/dqlite/4-workers-4                 18.14Ki ±  0%
Create/dqlite/16-workers-4                16.93Ki ±  0%
Create/dqlite/64-workers-4                16.63Ki ±  0%
Create/dqlite/128-workers-4               16.59Ki ±  0%
Delete/sqlite/1-workers-4                 22.76Ki ±  0%
Delete/sqlite/4-workers-4                 21.47Ki ±  0%
Delete/sqlite/16-workers-4                19.97Ki ±  0%
Delete/sqlite/64-workers-4                19.60Ki ±  0%
Delete/sqlite/128-workers-4               19.54Ki ±  0%
Delete/dqlite/1-workers-4                 21.86Ki ±  0%
Delete/dqlite/4-workers-4                 20.47Ki ±  0%
Delete/dqlite/16-workers-4                19.20Ki ±  0%
Delete/dqlite/64-workers-4                18.91Ki ±  0%
Delete/dqlite/128-workers-4               18.88Ki ±  0%
Get/sqlite-4                              22.86Ki ±  0%
Get/dqlite-4                              21.79Ki ±  0%
List/sqlite-tiny/all-4                    1.047Ki ± 10%
List/sqlite-tiny/pagination-4             1.042Ki ±  8%
List/sqlite-fits-in-page/all-4            7.354Ki ±  2%
List/sqlite-fits-in-page/pagination-4     10.31Ki ± 30%
List/sqlite-overflows-page/all-4          20.49Ki ± 12%
List/sqlite-overflows-page/pagination-4   18.51Ki ± 11%
List/dqlite-tiny/all-4                      949.0 ±  4%
List/dqlite-tiny/pagination-4               800.0 ± 12%
List/dqlite-fits-in-page/all-4            5.957Ki ±  1%
List/dqlite-fits-in-page/pagination-4     5.661Ki ± 10%
List/dqlite-overflows-page/all-4          30.96Ki ±  2%
List/dqlite-overflows-page/pagination-4   31.30Ki ±  5%
Update/sqlite/1-workers-4                 21.50Ki ±  0%
Update/sqlite/4-workers-4                 20.18Ki ±  0%
Update/sqlite/16-workers-4                18.64Ki ±  0%
Update/sqlite/64-workers-4                18.25Ki ±  0%
Update/sqlite/128-workers-4               18.17Ki ±  0%
Update/dqlite/1-workers-4                 20.71Ki ±  0%
Update/dqlite/4-workers-4                 19.27Ki ±  0%
Update/dqlite/16-workers-4                18.04Ki ±  0%
Update/dqlite/64-workers-4                17.75Ki ±  0%
Update/dqlite/128-workers-4               17.70Ki ±  0%
geomean                                   12.82Ki

                                        │    After    │
                                        │  allocs/op  │
Compaction/sqlite-4                       42.00 ± 50%
Compaction/dqlite-4                       132.0 ± 29%
Create/sqlite/1-workers-4                 396.0 ±  0%
Create/sqlite/4-workers-4                 362.0 ±  0%
Create/sqlite/16-workers-4                319.0 ±  0%
Create/sqlite/64-workers-4                305.0 ±  0%
Create/sqlite/128-workers-4               303.0 ±  0%
Create/dqlite/1-workers-4                 366.0 ±  0%
Create/dqlite/4-workers-4                 333.0 ±  1%
Create/dqlite/16-workers-4                303.0 ±  0%
Create/dqlite/64-workers-4                294.0 ±  0%
Create/dqlite/128-workers-4               293.0 ±  0%
Delete/sqlite/1-workers-4                 427.0 ±  0%
Delete/sqlite/4-workers-4                 393.0 ±  0%
Delete/sqlite/16-workers-4                349.0 ±  0%
Delete/sqlite/64-workers-4                337.0 ±  0%
Delete/sqlite/128-workers-4               335.0 ±  0%
Delete/dqlite/1-workers-4                 396.0 ±  0%
Delete/dqlite/4-workers-4                 365.0 ±  1%
Delete/dqlite/16-workers-4                333.0 ±  0%
Delete/dqlite/64-workers-4                325.0 ±  0%
Delete/dqlite/128-workers-4               323.0 ±  0%
Get/sqlite-4                              410.0 ±  0%
Get/dqlite-4                              388.0 ±  0%
List/sqlite-tiny/all-4                    14.00 ± 14%
List/sqlite-tiny/pagination-4             13.00 ± 15%
List/sqlite-fits-in-page/all-4            20.00 ±  5%
List/sqlite-fits-in-page/pagination-4     34.00 ± 38%
List/sqlite-overflows-page/all-4          8.000 ±  0%
List/sqlite-overflows-page/pagination-4   7.000 ± 14%
List/dqlite-tiny/all-4                    12.00 ±  8%
List/dqlite-tiny/pagination-4             9.000 ± 22%
List/dqlite-fits-in-page/all-4            18.00 ±  6%
List/dqlite-fits-in-page/pagination-4     18.00 ± 22%
List/dqlite-overflows-page/all-4          32.00 ±  3%
List/dqlite-overflows-page/pagination-4   34.00 ±  3%
Update/sqlite/1-workers-4                 403.0 ±  0%
Update/sqlite/4-workers-4                 369.0 ±  0%
Update/sqlite/16-workers-4                325.0 ±  0%
Update/sqlite/64-workers-4                312.0 ±  0%
Update/sqlite/128-workers-4               310.0 ±  0%
Update/dqlite/1-workers-4                 373.0 ±  0%
Update/dqlite/4-workers-4                 340.0 ±  1%
Update/dqlite/16-workers-4                309.0 ±  0%
Update/dqlite/64-workers-4                301.0 ±  0%
Update/dqlite/128-workers-4               300.0 ±  0%
geomean                                   143.7

                                        │         After         │
                                        │ network-bytes-read/op │
Compaction/dqlite-4                               1.990Ki ± 29%
Create/dqlite/1-workers-4                           242.4 ±  0%
Create/dqlite/4-workers-4                           197.0 ±  6%
Create/dqlite/16-workers-4                          147.6 ±  1%
Create/dqlite/64-workers-4                          134.2 ±  1%
Create/dqlite/128-workers-4                         132.5 ±  1%
Delete/dqlite/1-workers-4                           720.0 ±  0%
Delete/dqlite/4-workers-4                           685.7 ±  1%
Delete/dqlite/16-workers-4                          629.3 ±  1%
Delete/dqlite/64-workers-4                          618.5 ±  0%
Delete/dqlite/128-workers-4                         617.9 ±  0%
Get/dqlite-4                                        996.2 ±  0%
List/dqlite-tiny/all-4                              166.1 ± 10%
List/dqlite-tiny/pagination-4                       119.3 ± 28%
List/dqlite-fits-in-page/all-4                    1.312Ki ±  2%
List/dqlite-fits-in-page/pagination-4             1.303Ki ± 23%
List/dqlite-overflows-page/all-4                  7.341Ki ±  4%
List/dqlite-overflows-page/pagination-4           7.724Ki ±  6%
Update/dqlite/1-workers-4                           263.2 ±  0%
Update/dqlite/4-workers-4                           215.6 ±  6%
Update/dqlite/16-workers-4                          162.9 ±  1%
Update/dqlite/64-workers-4                          150.8 ±  1%
Update/dqlite/128-workers-4                         149.1 ±  1%
geomean                                             454.5

                                        │          After           │
                                        │ network-bytes-written/op │
Compaction/dqlite-4                                    4.572 ±  5%
Create/dqlite/1-workers-4                              117.8 ±  0%
Create/dqlite/4-workers-4                              114.5 ± 10%
Create/dqlite/16-workers-4                             96.32 ±  1%
Create/dqlite/64-workers-4                             89.04 ±  0%
Create/dqlite/128-workers-4                            87.98 ±  0%
Delete/dqlite/1-workers-4                              83.30 ±  0%
Delete/dqlite/4-workers-4                              85.77 ± 10%
Delete/dqlite/16-workers-4                             57.78 ±  5%
Delete/dqlite/64-workers-4                             50.07 ±  0%
Delete/dqlite/128-workers-4                            49.09 ±  1%
Get/dqlite-4                                           88.53 ±  0%
List/dqlite-tiny/all-4                               0.03492 ± 18%
List/dqlite-tiny/pagination-4                        0.02218 ± 49%
List/dqlite-fits-in-page/all-4                       0.06038 ±  4%
List/dqlite-fits-in-page/pagination-4                0.07193 ± 32%
List/dqlite-overflows-page/all-4                     0.08282 ±  5%
List/dqlite-overflows-page/pagination-4               0.1062 ±  6%
Update/dqlite/1-workers-4                              136.7 ±  0%
Update/dqlite/4-workers-4                              128.3 ± 10%
Update/dqlite/16-workers-4                             105.2 ±  2%
Update/dqlite/64-workers-4                             98.77 ±  0%
Update/dqlite/128-workers-4                            97.38 ±  0%
geomean                                                11.44

@marco6
Copy link
Collaborator Author

marco6 commented Oct 1, 2024

Depends on #181

@marco6 marco6 force-pushed the KU-1744/batching branch 2 times, most recently from 2d6889f to bd5b970 Compare October 1, 2024 15:21
@marco6 marco6 marked this pull request as ready for review October 1, 2024 15:22
@marco6 marco6 requested a review from a team as a code owner October 1, 2024 15:22
@marco6
Copy link
Collaborator Author

marco6 commented Oct 1, 2024

Ready as #181 was merged.

Copy link
Contributor

@louiseschmidtgen louiseschmidtgen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work @marco6, took a first look.
I would like to understand why we have some outliers in our benchmark test, some being as high as +900% through our change. Overall, the benchmark is looking very promising.

pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/generic.go Outdated Show resolved Hide resolved
@marco6
Copy link
Collaborator Author

marco6 commented Oct 8, 2024

Depends on #186 and #187 .

Copy link
Member

@TheSignPainter98 TheSignPainter98 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall I think this is looking quite nice! Here are a few notes to help polish up the code

pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
pkg/kine/drivers/generic/batch.go Outdated Show resolved Hide resolved
@marco6
Copy link
Collaborator Author

marco6 commented Oct 24, 2024

Heads up for any reviewer: I moved the logic in a separate package, together with the old prepared.DB so that I could write both the interface and the testing facility only once.

@marco6 marco6 force-pushed the KU-1744/batching branch 2 times, most recently from f93f082 to 907ce6c Compare October 28, 2024 09:00
@marco6
Copy link
Collaborator Author

marco6 commented Oct 28, 2024

This PR has been rebased so that the benchmarks results are comparing the current master branch.

@marco6 marco6 mentioned this pull request Oct 30, 2024
Copy link
Contributor

@louiseschmidtgen louiseschmidtgen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few small nits and then I'll re-base your branch on the performance test to ensure improvements are made as expected.

pkg/database/interface.go Outdated Show resolved Hide resolved
pkg/database/batched.go Show resolved Hide resolved
pkg/database/batched.go Show resolved Hide resolved
pkg/database/batched.go Show resolved Hide resolved
pkg/database/batched.go Show resolved Hide resolved
pkg/database/batched.go Show resolved Hide resolved
pkg/database/prepared.go Outdated Show resolved Hide resolved
pkg/database/prepared_test.go Outdated Show resolved Hide resolved
@louiseschmidtgen louiseschmidtgen requested review from a team and removed request for TheSignPainter98 November 14, 2024 15:54
@marco6
Copy link
Collaborator Author

marco6 commented Nov 25, 2024

Given the increased memory requirement from this PR, I think we should wait canonical/dqlite#714.

@marco6 marco6 marked this pull request as draft November 25, 2024 10:49
@marco6 marco6 mentioned this pull request Jan 9, 2025
@marco6
Copy link
Collaborator Author

marco6 commented Jan 9, 2025

This PR now depends also on #216 which factors out all the code which is not related to batching from this PR. Some of the comments here are in fact about the refactor rather than batching itself and should be probably discussed there.

@marco6
Copy link
Collaborator Author

marco6 commented Jan 15, 2025

I have rebased this on top of master as #216 was merged. The patch now is way smaller.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants