Skip to content

Conversation

@marco6
Copy link
Collaborator

@marco6 marco6 commented Aug 22, 2025

This PR enables autovacuum for small databases (which includes also new ones). This allows the database to also shrink other than grow. It depends on dqlite v1.8.2.

The vacuum operation is performed after every write transaction and is controlled by two parameters (tunable through pkg/backend/sqlite/extensions.go):

  • max_pages which is the maximum number of pages to remove per write transaction. This is useful to avoid creating very big transactions. I set the default to 16 (= 16 * 4KiB = 64 KiB freed per transaction);
  • percent which is the percentage (from 0 to 100) of the database to keep.

The second parameter is useful to make sure that the database doesn't do unnecessary work: it is expected that the database will continuously grow and shrink, so it is best to keep some free pages for SQLite to use. I set 10% as the default. (Which means for example that is a database grows to 200 MiB and then shrinks to 100 MiB we will keep the size of the storage to 110 MiB).

These defaults haven't been "computed" or "measured" but are what I though it would be a good default and can certainly be changed/tuned.

@marco6 marco6 requested a review from a team as a code owner August 22, 2025 15:07
@github-actions
Copy link

github-actions bot commented Aug 22, 2025

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                       32.93µ ±  4%   33.50µ ±  5%       ~ (p=0.209 n=7)
Compaction/dqlite-4                       103.9µ ±  2%   104.2µ ±  2%       ~ (p=0.902 n=7)
Create/sqlite/1-workers-4                 595.9µ ±  7%   550.3µ ± 10%       ~ (p=0.053 n=7)
Create/sqlite/4-workers-4                 206.5µ ±  3%   206.0µ ± 21%       ~ (p=0.710 n=7)
Create/sqlite/16-workers-4                86.00µ ±  6%   81.87µ ± 26%       ~ (p=0.318 n=7)
Create/sqlite/64-workers-4                51.29µ ±  4%   51.92µ ±  8%       ~ (p=0.383 n=7)
Create/sqlite/128-workers-4               44.41µ ±  4%   45.30µ ±  3%       ~ (p=0.079 n=7)
Create/dqlite/1-workers-4                 1.041m ±  6%   1.034m ± 10%       ~ (p=0.456 n=7)
Create/dqlite/4-workers-4                 595.4µ ±  8%   563.0µ ± 18%       ~ (p=0.209 n=7)
Create/dqlite/16-workers-4                236.4µ ±  4%   223.7µ ±  8%  -5.39% (p=0.017 n=7)
Create/dqlite/64-workers-4                140.8µ ±  6%   141.9µ ±  4%       ~ (p=0.620 n=7)
Create/dqlite/128-workers-4               123.3µ ±  3%   123.0µ ±  1%       ~ (p=1.000 n=7)
Delete/sqlite/1-workers-4                 557.8µ ±  4%   589.0µ ± 14%       ~ (p=0.128 n=7)
Delete/sqlite/4-workers-4                 197.2µ ±  2%   182.1µ ± 11%  -7.62% (p=0.026 n=7)
Delete/sqlite/16-workers-4                85.62µ ±  8%   87.16µ ±  5%       ~ (p=0.259 n=7)
Delete/sqlite/64-workers-4                57.92µ ±  5%   56.38µ ±  7%       ~ (p=0.620 n=7)
Delete/sqlite/128-workers-4               50.75µ ±  3%   51.91µ ±  2%       ~ (p=0.073 n=7)
Delete/dqlite/1-workers-4                 1.044m ±  3%   1.145m ±  6%  +9.69% (p=0.001 n=7)
Delete/dqlite/4-workers-4                 579.4µ ±  6%   603.9µ ±  4%       ~ (p=0.165 n=7)
Delete/dqlite/16-workers-4                250.2µ ±  4%   255.4µ ±  5%       ~ (p=0.318 n=7)
Delete/dqlite/64-workers-4                153.3µ ±  4%   155.0µ ±  5%       ~ (p=0.535 n=7)
Delete/dqlite/128-workers-4               135.4µ ±  3%   136.0µ ±  2%       ~ (p=0.383 n=7)
Get/sqlite-4                              346.5µ ±  2%   346.3µ ±  2%       ~ (p=0.456 n=7)
Get/dqlite-4                              454.8µ ±  2%   459.7µ ±  2%       ~ (p=0.456 n=7)
List/sqlite-tiny/all-4                    5.021µ ±  3%   4.861µ ±  2%  -3.19% (p=0.012 n=7)
List/sqlite-tiny/pagination-4             9.559µ ±  2%   9.386µ ±  2%       ~ (p=0.073 n=7)
List/sqlite-fits-in-page/all-4            7.758µ ±  3%   7.533µ ±  3%  -2.90% (p=0.017 n=7)
List/sqlite-fits-in-page/pagination-4     21.62µ ±  4%   20.67µ ±  2%  -4.40% (p=0.001 n=7)
List/sqlite-overflows-page/all-4          18.66µ ±  4%   18.12µ ±  3%  -2.90% (p=0.026 n=7)
List/sqlite-overflows-page/pagination-4   31.22µ ±  4%   30.18µ ±  3%       ~ (p=0.128 n=7)
List/dqlite-tiny/all-4                    4.639µ ±  2%   4.575µ ±  2%  -1.38% (p=0.025 n=7)
List/dqlite-tiny/pagination-4             8.360µ ±  1%   8.297µ ±  1%  -0.75% (p=0.001 n=7)
List/dqlite-fits-in-page/all-4            8.812µ ±  1%   8.624µ ±  2%  -2.13% (p=0.024 n=7)
List/dqlite-fits-in-page/pagination-4     19.38µ ±  2%   18.98µ ±  1%  -2.05% (p=0.001 n=7)
List/dqlite-overflows-page/all-4          23.04µ ±  4%   22.62µ ±  4%  -1.85% (p=0.026 n=7)
List/dqlite-overflows-page/pagination-4   30.46µ ±  4%   31.16µ ±  2%       ~ (p=0.053 n=7)
Update/sqlite/1-workers-4                 608.0µ ±  5%   581.4µ ± 10%       ~ (p=0.073 n=7)
Update/sqlite/4-workers-4                 209.0µ ± 11%   201.5µ ±  9%       ~ (p=0.535 n=7)
Update/sqlite/16-workers-4                93.57µ ±  3%   89.69µ ±  7%  -4.15% (p=0.026 n=7)
Update/sqlite/64-workers-4                59.39µ ±  4%   58.03µ ±  6%       ~ (p=0.128 n=7)
Update/sqlite/128-workers-4               51.33µ ±  3%   50.52µ ±  4%       ~ (p=0.165 n=7)
Update/dqlite/1-workers-4                 1.115m ±  4%   1.098m ±  3%       ~ (p=0.318 n=7)
Update/dqlite/4-workers-4                 607.6µ ±  4%   597.3µ ±  9%       ~ (p=0.318 n=7)
Update/dqlite/16-workers-4                257.0µ ±  4%   252.1µ ±  1%       ~ (p=0.710 n=7)
Update/dqlite/64-workers-4                157.8µ ±  4%   156.7µ ±  2%       ~ (p=0.097 n=7)
Update/dqlite/128-workers-4               132.8µ ±  3%   135.0µ ±  3%       ~ (p=0.259 n=7)
geomean                                   94.73µ         93.75µ        -1.03%

                                        │        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                          15.12 ± 1%      15.34 ± 1%  +1.46% (p=0.004 n=7)
Compaction/dqlite-4                          15.24 ± 1%      15.41 ± 1%       ~ (p=0.054 n=7)
Create/sqlite/1-workers-4                    11.79 ± 0%      11.83 ± 0%  +0.34% (p=0.013 n=7)
Create/sqlite/4-workers-4                    8.488 ± 0%      8.492 ± 0%       ~ (p=0.830 n=7)
Create/sqlite/16-workers-4                   8.272 ± 0%      8.285 ± 0%  +0.16% (p=0.001 n=7)
Create/sqlite/64-workers-4                   8.193 ± 0%      8.203 ± 0%  +0.12% (p=0.001 n=7)
Create/sqlite/128-workers-4                  8.180 ± 0%      8.190 ± 0%  +0.12% (p=0.006 n=7)
Create/dqlite/1-workers-4                    7.076 ± 3%      7.322 ± 2%  +3.48% (p=0.001 n=7)
Create/dqlite/4-workers-4                    8.400 ± 0%      8.403 ± 1%       ~ (p=0.805 n=7)
Create/dqlite/16-workers-4                   8.208 ± 0%      8.229 ± 0%  +0.26% (p=0.016 n=7)
Create/dqlite/64-workers-4                   8.163 ± 0%      8.171 ± 0%  +0.10% (p=0.001 n=7)
Create/dqlite/128-workers-4                  8.154 ± 0%      8.170 ± 0%  +0.20% (p=0.048 n=7)
Delete/sqlite/1-workers-4                    14.52 ± 0%      14.56 ± 0%  +0.28% (p=0.002 n=7)
Delete/sqlite/4-workers-4                    11.05 ± 2%      11.67 ± 2%  +5.61% (p=0.001 n=7)
Delete/sqlite/16-workers-4                   14.47 ± 4%      14.61 ± 2%       ~ (p=0.245 n=7)
Delete/sqlite/64-workers-4                   14.91 ± 0%      15.00 ± 0%  +0.60% (p=0.001 n=7)
Delete/sqlite/128-workers-4                  14.89 ± 0%      15.00 ± 0%  +0.74% (p=0.001 n=7)
Delete/dqlite/1-workers-4                    8.941 ± 2%      9.199 ± 1%  +2.89% (p=0.001 n=7)
Delete/dqlite/4-workers-4                    11.06 ± 0%      11.09 ± 1%  +0.27% (p=0.001 n=7)
Delete/dqlite/16-workers-4                   10.65 ± 0%      10.69 ± 0%  +0.38% (p=0.001 n=7)
Delete/dqlite/64-workers-4                   12.08 ± 7%      12.35 ± 5%       ~ (p=0.157 n=7)
Delete/dqlite/128-workers-4                  12.91 ± 5%      12.95 ± 4%       ~ (p=0.247 n=7)
Get/sqlite-4                                 12.25 ± 0%      12.25 ± 0%       ~ (p=0.577 n=7)
Get/dqlite-4                                 12.29 ± 1%      12.24 ± 1%       ~ (p=0.367 n=7)
List/sqlite-tiny/all-4                      379.7m ± 0%     380.2m ± 0%  +0.13% (p=0.009 n=7)
List/sqlite-tiny/pagination-4                1.319 ± 3%      1.320 ± 0%  +0.08% (p=0.021 n=7)
List/sqlite-fits-in-page/all-4              323.1m ± 0%     323.6m ± 0%  +0.15% (p=0.003 n=7)
List/sqlite-fits-in-page/pagination-4        1.125 ± 0%      1.125 ± 3%       ~ (p=0.462 n=7)
List/sqlite-overflows-page/all-4            364.6m ± 0%     365.1m ± 0%  +0.14% (p=0.006 n=7)
List/sqlite-overflows-page/pagination-4      1.260 ± 3%      1.260 ± 0%       ~ (p=1.000 n=7)
List/dqlite-tiny/all-4                      378.2m ± 0%     378.0m ± 0%       ~ (p=0.264 n=7)
List/dqlite-tiny/pagination-4                1.314 ± 1%      1.314 ± 0%       ~ (p=0.364 n=7)
List/dqlite-fits-in-page/all-4              322.9m ± 0%     322.7m ± 0%       ~ (p=0.140 n=7)
List/dqlite-fits-in-page/pagination-4        1.116 ± 0%      1.116 ± 0%       ~ (p=0.122 n=7)
List/dqlite-overflows-page/all-4            362.5m ± 0%     362.3m ± 0%       ~ (p=0.100 n=7)
List/dqlite-overflows-page/pagination-4      1.252 ± 0%      1.252 ± 0%       ~ (p=0.494 n=7)
Update/sqlite/1-workers-4                    14.00 ± 0%      14.02 ± 0%  +0.14% (p=0.048 n=7)
Update/sqlite/4-workers-4                    10.45 ± 1%      10.48 ± 1%       ~ (p=0.335 n=7)
Update/sqlite/16-workers-4                   10.25 ± 0%      10.25 ± 0%       ~ (p=0.765 n=7)
Update/sqlite/64-workers-4                   10.15 ± 0%      10.17 ± 0%  +0.20% (p=0.047 n=7)
Update/sqlite/128-workers-4                  10.16 ± 0%      10.17 ± 0%       ~ (p=0.195 n=7)
Update/dqlite/1-workers-4                    9.454 ± 3%      9.291 ± 2%  -1.72% (p=0.017 n=7)
Update/dqlite/4-workers-4                    10.37 ± 0%      10.39 ± 0%       ~ (p=0.302 n=7)
Update/dqlite/16-workers-4                   10.17 ± 0%      10.18 ± 0%       ~ (p=0.339 n=7)
Update/dqlite/64-workers-4                   10.12 ± 0%      10.13 ± 0%       ~ (p=0.242 n=7)
Update/dqlite/128-workers-4                  10.13 ± 0%      10.14 ± 0%       ~ (p=0.202 n=7)
geomean                                      5.153           5.176       +0.45%

                                        │     Before     │                  After                  │
                                        │ page-writes/op │ page-writes/op  vs base                 │
Compaction/sqlite-4                       95.02m ± 37%       98.89m ± 31%        ~ (p=0.902 n=7)
Compaction/dqlite-4                       101.0m ± 34%       108.6m ± 28%        ~ (p=0.709 n=7)
Create/sqlite/1-workers-4                  3.198 ±  0%        3.213 ±  0%   +0.47% (p=0.001 n=7)
Create/sqlite/4-workers-4                  1.851 ±  1%        1.869 ±  2%   +0.97% (p=0.011 n=7)
Create/sqlite/16-workers-4                631.0m ±  3%       671.2m ±  9%   +6.37% (p=0.026 n=7)
Create/sqlite/64-workers-4                268.8m ±  6%       273.7m ±  2%        ~ (p=0.209 n=7)
Create/sqlite/128-workers-4               174.1m ± 11%       195.8m ±  6%  +12.46% (p=0.002 n=7)
Create/dqlite/1-workers-4                  3.122 ±  1%        3.161 ±  1%   +1.25% (p=0.017 n=7)
Create/dqlite/4-workers-4                  1.690 ±  1%        1.700 ±  1%   +0.59% (p=0.002 n=7)
Create/dqlite/16-workers-4                546.3m ±  2%       551.9m ±  3%   +1.03% (p=0.016 n=7)
Create/dqlite/64-workers-4                196.8m ±  7%       205.4m ±  7%        ~ (p=0.259 n=7)
Create/dqlite/128-workers-4               121.1m ±  5%       130.2m ±  7%   +7.51% (p=0.007 n=7)
Delete/sqlite/1-workers-4                  3.279 ±  0%        3.312 ±  1%   +1.01% (p=0.001 n=7)
Delete/sqlite/4-workers-4                  1.940 ±  3%        2.035 ±  4%   +4.90% (p=0.002 n=7)
Delete/sqlite/16-workers-4                843.5m ±  5%       915.6m ±  5%   +8.55% (p=0.004 n=7)
Delete/sqlite/64-workers-4                510.6m ±  6%       542.3m ±  4%   +6.21% (p=0.007 n=7)
Delete/sqlite/128-workers-4               399.9m ± 10%       416.1m ±  7%        ~ (p=0.165 n=7)
Delete/dqlite/1-workers-4                  3.269 ±  1%        3.290 ±  1%        ~ (p=0.245 n=7)
Delete/dqlite/4-workers-4                  1.790 ±  1%        1.821 ±  0%   +1.73% (p=0.001 n=7)
Delete/dqlite/16-workers-4                616.4m ±  2%       641.0m ±  6%   +3.99% (p=0.001 n=7)
Delete/dqlite/64-workers-4                262.2m ± 12%       288.0m ± 11%        ~ (p=0.053 n=7)
Delete/dqlite/128-workers-4               195.8m ± 11%       205.9m ±  3%   +5.16% (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                  3.385 ±  0%        3.407 ±  0%   +0.65% (p=0.001 n=7)
Update/sqlite/4-workers-4                  2.356 ±  2%        2.377 ±  1%        ~ (p=0.154 n=7)
Update/sqlite/16-workers-4                 1.451 ±  1%        1.478 ±  2%   +1.86% (p=0.005 n=7)
Update/sqlite/64-workers-4                 1.018 ±  1%        1.048 ±  2%   +2.95% (p=0.001 n=7)
Update/sqlite/128-workers-4               830.9m ±  1%       853.6m ±  1%   +2.73% (p=0.001 n=7)
Update/dqlite/1-workers-4                  3.311 ±  0%        3.324 ±  1%   +0.39% (p=0.024 n=7)
Update/dqlite/4-workers-4                  2.090 ±  2%        2.105 ±  2%        ~ (p=0.474 n=7)
Update/dqlite/16-workers-4                 1.116 ±  9%        1.133 ±  5%        ~ (p=0.710 n=7)
Update/dqlite/64-workers-4                604.3m ± 18%       643.2m ±  7%        ~ (p=0.456 n=7)
Update/dqlite/128-workers-4               386.5m ± 15%       451.7m ± 24%        ~ (p=0.073 n=7)
geomean                                                ²                    +2.75%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │     Before     │                 After                 │
                                        │ sec-reading/op │ sec-reading/op  vs base               │
Compaction/sqlite-4                         72.10µ ±  2%     73.10µ ±  4%        ~ (p=0.091 n=7)
Compaction/dqlite-4                         84.00µ ± 25%     82.80µ ± 20%        ~ (p=0.300 n=7)
Create/sqlite/1-workers-4                   33.40µ ± 19%     37.50µ ± 13%  +12.28% (p=0.048 n=7)
Create/sqlite/4-workers-4                   105.6µ ± 11%     113.9µ ± 34%   +7.86% (p=0.026 n=7)
Create/sqlite/16-workers-4                  47.30µ ± 15%     48.50µ ± 57%        ~ (p=0.833 n=7)
Create/sqlite/64-workers-4                  24.10µ ± 10%     25.10µ ±  9%        ~ (p=0.516 n=7)
Create/sqlite/128-workers-4                 19.60µ ± 11%     20.40µ ± 11%        ~ (p=0.401 n=7)
Create/dqlite/1-workers-4                   8.700µ ± 41%    14.000µ ± 60%        ~ (p=0.244 n=7)
Create/dqlite/4-workers-4                   11.90µ ± 71%     11.80µ ± 97%        ~ (p=0.476 n=7)
Create/dqlite/16-workers-4                  5.800µ ± 29%     6.400µ ± 25%        ~ (p=0.439 n=7)
Create/dqlite/64-workers-4                  3.600µ ± 22%     3.900µ ± 28%        ~ (p=0.513 n=7)
Create/dqlite/128-workers-4                 3.100µ ± 29%     2.700µ ± 33%        ~ (p=0.688 n=7)
Delete/sqlite/1-workers-4                   50.50µ ± 19%     49.50µ ± 17%        ~ (p=0.902 n=7)
Delete/sqlite/4-workers-4                   123.2µ ±  9%     114.9µ ± 11%   -6.74% (p=0.038 n=7)
Delete/sqlite/16-workers-4                  63.60µ ± 15%     65.20µ ±  5%        ~ (p=0.596 n=7)
Delete/sqlite/64-workers-4                  45.00µ ±  9%     42.40µ ± 10%        ~ (p=0.515 n=7)
Delete/sqlite/128-workers-4                 39.80µ ±  4%     39.90µ ±  7%        ~ (p=0.830 n=7)
Delete/dqlite/1-workers-4                   16.30µ ± 29%     21.40µ ± 32%        ~ (p=0.138 n=7)
Delete/dqlite/4-workers-4                   19.00µ ± 49%     19.20µ ± 29%        ~ (p=0.516 n=7)
Delete/dqlite/16-workers-4                  13.60µ ± 26%     13.80µ ± 22%        ~ (p=0.535 n=7)
Delete/dqlite/64-workers-4                  11.20µ ± 18%     12.10µ ± 18%        ~ (p=0.642 n=7)
Delete/dqlite/128-workers-4                 11.20µ ± 27%     11.20µ ± 19%        ~ (p=0.780 n=7)
Get/sqlite-4                                89.50µ ±  7%     85.30µ ± 10%        ~ (p=0.259 n=7)
Get/dqlite-4                                50.60µ ± 14%     49.60µ ± 15%        ~ (p=0.119 n=7)
List/sqlite-tiny/all-4                      11.10µ ±  2%     10.90µ ±  2%   -1.80% (p=0.047 n=7)
List/sqlite-tiny/pagination-4               20.00µ ±  2%     19.60µ ±  3%        ~ (p=0.134 n=7)
List/sqlite-fits-in-page/all-4              16.20µ ±  2%     15.60µ ±  2%   -3.70% (p=0.003 n=7)
List/sqlite-fits-in-page/pagination-4       40.80µ ±  3%     38.00µ ±  2%   -6.86% (p=0.001 n=7)
List/sqlite-overflows-page/all-4            34.70µ ±  4%     33.70µ ±  2%   -2.88% (p=0.016 n=7)
List/sqlite-overflows-page/pagination-4     54.70µ ±  3%     51.70µ ±  2%   -5.48% (p=0.001 n=7)
List/dqlite-tiny/all-4                      7.300µ ± 23%     8.300µ ± 19%        ~ (p=0.477 n=7)
List/dqlite-tiny/pagination-4               12.20µ ± 14%     11.60µ ± 16%        ~ (p=0.271 n=7)
List/dqlite-fits-in-page/all-4              15.30µ ± 15%     15.10µ ± 12%        ~ (p=0.978 n=7)
List/dqlite-fits-in-page/pagination-4       34.20µ ± 21%     33.40µ ±  7%        ~ (p=0.364 n=7)
List/dqlite-overflows-page/all-4            39.00µ ±  4%     38.50µ ±  3%        ~ (p=0.065 n=7)
List/dqlite-overflows-page/pagination-4     53.10µ ±  1%     54.10µ ±  6%        ~ (p=0.139 n=7)
Update/sqlite/1-workers-4                   40.40µ ± 28%     39.50µ ± 24%        ~ (p=1.000 n=7)
Update/sqlite/4-workers-4                   116.8µ ± 17%     114.1µ ± 17%        ~ (p=0.902 n=7)
Update/sqlite/16-workers-4                  56.40µ ±  7%     53.60µ ± 10%        ~ (p=0.097 n=7)
Update/sqlite/64-workers-4                  30.40µ ±  5%     28.20µ ±  8%   -7.24% (p=0.006 n=7)
Update/sqlite/128-workers-4                 23.30µ ±  4%     22.80µ ±  8%        ~ (p=0.193 n=7)
Update/dqlite/1-workers-4                  11.100µ ± 61%     8.700µ ± 54%        ~ (p=0.259 n=7)
Update/dqlite/4-workers-4                   13.30µ ± 74%     12.40µ ± 57%        ~ (p=1.000 n=7)
Update/dqlite/16-workers-4                  6.400µ ± 42%     7.500µ ± 25%        ~ (p=0.097 n=7)
Update/dqlite/64-workers-4                  5.000µ ± 20%     4.600µ ± 35%        ~ (p=0.156 n=7)
Update/dqlite/128-workers-4                 3.500µ ± 31%     4.000µ ± 42%        ~ (p=0.972 n=7)
geomean                                     23.02µ           23.27µ         +1.10%

                                        │     Before     │                  After                  │
                                        │ sec-writing/op │ sec-writing/op  vs base                 │
Compaction/sqlite-4                       16.90µ ±  7%      17.00µ ±   5%        ~ (p=0.935 n=7)
Compaction/dqlite-4                       13.70µ ±  7%      13.80µ ±  15%        ~ (p=0.925 n=7)
Create/sqlite/1-workers-4                 354.3µ ± 11%      280.8µ ±  21%  -20.75% (p=0.002 n=7)
Create/sqlite/4-workers-4                 90.90µ ± 16%      90.50µ ±  24%        ~ (p=0.318 n=7)
Create/sqlite/16-workers-4                27.80µ ± 16%      25.60µ ±  12%        ~ (p=0.128 n=7)
Create/sqlite/64-workers-4                20.40µ ±  2%      19.40µ ±   7%   -4.90% (p=0.017 n=7)
Create/sqlite/128-workers-4               17.80µ ±  4%      18.60µ ±   7%        ~ (p=0.688 n=7)
Create/dqlite/1-workers-4                 51.60µ ± 41%      71.20µ ±  33%        ~ (p=0.097 n=7)
Create/dqlite/4-workers-4                 32.60µ ± 37%      33.00µ ±  25%        ~ (p=0.773 n=7)
Create/dqlite/16-workers-4                22.50µ ± 15%      22.90µ ±  15%        ~ (p=0.558 n=7)
Create/dqlite/64-workers-4                21.50µ ± 17%      20.90µ ±  10%        ~ (p=0.804 n=7)
Create/dqlite/128-workers-4               19.80µ ± 14%      19.50µ ±  14%        ~ (p=0.971 n=7)
Delete/sqlite/1-workers-4                 325.1µ ±  7%      322.6µ ±  20%        ~ (p=0.710 n=7)
Delete/sqlite/4-workers-4                 81.80µ ± 14%      80.20µ ±   8%        ~ (p=0.456 n=7)
Delete/sqlite/16-workers-4                31.50µ ±  5%      31.60µ ±   6%        ~ (p=0.974 n=7)
Delete/sqlite/64-workers-4                23.50µ ±  7%      23.20µ ±   2%        ~ (p=0.782 n=7)
Delete/sqlite/128-workers-4               21.90µ ±  2%      22.30µ ±   4%        ~ (p=0.379 n=7)
Delete/dqlite/1-workers-4                 55.40µ ± 31%      70.30µ ±  65%  +26.90% (p=0.007 n=7)
Delete/dqlite/4-workers-4                 32.40µ ± 38%      38.40µ ±  32%        ~ (p=0.596 n=7)
Delete/dqlite/16-workers-4                26.00µ ± 11%      24.60µ ±   7%        ~ (p=0.103 n=7)
Delete/dqlite/64-workers-4                23.20µ ±  7%      22.00µ ±   8%        ~ (p=0.128 n=7)
Delete/dqlite/128-workers-4               22.70µ ±  8%      22.60µ ±   4%        ~ (p=0.742 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                 340.3µ ±  8%      292.2µ ±  20%  -14.13% (p=0.017 n=7)
Update/sqlite/4-workers-4                 82.50µ ± 12%      80.00µ ±  19%        ~ (p=0.383 n=7)
Update/sqlite/16-workers-4                28.40µ ±  9%      27.40µ ±   7%        ~ (p=0.477 n=7)
Update/sqlite/64-workers-4                21.60µ ±  6%      21.80µ ±   7%        ~ (p=0.636 n=7)
Update/sqlite/128-workers-4               20.50µ ±  6%      21.20µ ±   3%        ~ (p=0.058 n=7)
Update/dqlite/1-workers-4                 51.90µ ± 25%      54.80µ ± 115%        ~ (p=0.383 n=7)
Update/dqlite/4-workers-4                 33.30µ ± 28%      31.00µ ±  29%        ~ (p=0.513 n=7)
Update/dqlite/16-workers-4                22.90µ ± 15%      22.90µ ±   7%        ~ (p=0.883 n=7)
Update/dqlite/64-workers-4                22.20µ ± 11%      22.20µ ±  12%        ~ (p=0.555 n=7)
Update/dqlite/128-workers-4               22.30µ ± 19%      22.10µ ±  14%        ~ (p=0.780 n=7)
geomean                                                ²                    +0.15%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │    Before     │                After                │
                                        │     B/op      │     B/op      vs base               │
Compaction/sqlite-4                       3.373Ki ±  5%   3.835Ki ± 8%  +13.69% (p=0.001 n=7)
Compaction/dqlite-4                       13.72Ki ±  1%   13.76Ki ± 1%        ~ (p=0.875 n=7)
Create/sqlite/1-workers-4                 21.68Ki ±  0%   21.68Ki ± 0%   -0.03% (p=0.049 n=7)
Create/sqlite/4-workers-4                 19.78Ki ±  0%   19.79Ki ± 0%        ~ (p=0.364 n=7)
Create/sqlite/16-workers-4                17.90Ki ±  0%   17.92Ki ± 0%        ~ (p=0.072 n=7)
Create/sqlite/64-workers-4                17.41Ki ±  0%   17.41Ki ± 0%        ~ (p=0.301 n=7)
Create/sqlite/128-workers-4               17.32Ki ±  0%   17.32Ki ± 0%        ~ (p=0.450 n=7)
Create/dqlite/1-workers-4                 20.86Ki ±  0%   20.85Ki ± 0%        ~ (p=0.103 n=7)
Create/dqlite/4-workers-4                 18.00Ki ±  6%   18.01Ki ± 5%        ~ (p=0.535 n=7)
Create/dqlite/16-workers-4                17.26Ki ±  0%   17.29Ki ± 0%        ~ (p=0.710 n=7)
Create/dqlite/64-workers-4                16.90Ki ±  0%   16.89Ki ± 0%        ~ (p=0.927 n=7)
Create/dqlite/128-workers-4               16.85Ki ±  0%   16.85Ki ± 0%        ~ (p=0.514 n=7)
Delete/sqlite/1-workers-4                 24.31Ki ±  0%   24.33Ki ± 0%        ~ (p=0.057 n=7)
Delete/sqlite/4-workers-4                 22.43Ki ±  0%   22.47Ki ± 0%        ~ (p=0.138 n=7)
Delete/sqlite/16-workers-4                20.58Ki ±  0%   20.59Ki ± 0%        ~ (p=0.090 n=7)
Delete/sqlite/64-workers-4                20.12Ki ±  0%   20.13Ki ± 0%        ~ (p=0.123 n=7)
Delete/sqlite/128-workers-4               20.06Ki ±  0%   20.06Ki ± 0%        ~ (p=0.093 n=7)
Delete/dqlite/1-workers-4                 23.42Ki ±  1%   23.45Ki ± 1%        ~ (p=0.245 n=7)
Delete/dqlite/4-workers-4                 20.48Ki ±  4%   20.49Ki ± 5%        ~ (p=0.902 n=7)
Delete/dqlite/16-workers-4                19.76Ki ±  1%   19.76Ki ± 1%        ~ (p=1.000 n=7)
Delete/dqlite/64-workers-4                19.39Ki ±  0%   19.40Ki ± 0%        ~ (p=0.402 n=7)
Delete/dqlite/128-workers-4               19.36Ki ±  0%   19.36Ki ± 0%        ~ (p=0.830 n=7)
Get/sqlite-4                              22.89Ki ±  0%   22.89Ki ± 0%        ~ (p=0.783 n=7)
Get/dqlite-4                              21.79Ki ±  0%   21.76Ki ± 0%        ~ (p=0.831 n=7)
List/sqlite-tiny/all-4                    1.357Ki ±  7%   1.406Ki ± 7%   +3.60% (p=0.038 n=7)
List/sqlite-tiny/pagination-4             1.767Ki ±  2%   1.845Ki ± 2%   +4.42% (p=0.001 n=7)
List/sqlite-fits-in-page/all-4            6.451Ki ±  6%   6.622Ki ± 8%   +2.65% (p=0.017 n=7)
List/sqlite-fits-in-page/pagination-4     8.396Ki ±  1%   8.308Ki ± 2%        ~ (p=1.000 n=7)
List/sqlite-overflows-page/all-4          33.84Ki ±  1%   34.29Ki ± 7%        ~ (p=0.073 n=7)
List/sqlite-overflows-page/pagination-4   36.44Ki ±  3%   36.93Ki ± 5%        ~ (p=0.245 n=7)
List/dqlite-tiny/all-4                    1.045Ki ±  6%   1.047Ki ± 6%        ~ (p=0.515 n=7)
List/dqlite-tiny/pagination-4             1.051Ki ±  2%   1.045Ki ± 2%        ~ (p=0.401 n=7)
List/dqlite-fits-in-page/all-4            6.217Ki ±  1%   6.183Ki ± 9%        ~ (p=0.097 n=7)
List/dqlite-fits-in-page/pagination-4     6.187Ki ±  3%   6.216Ki ± 2%        ~ (p=0.383 n=7)
List/dqlite-overflows-page/all-4          31.33Ki ± 10%   31.12Ki ± 9%        ~ (p=0.209 n=7)
List/dqlite-overflows-page/pagination-4   32.11Ki ±  2%   31.71Ki ± 4%        ~ (p=0.535 n=7)
Update/sqlite/1-workers-4                 22.83Ki ±  0%   22.83Ki ± 0%        ~ (p=0.595 n=7)
Update/sqlite/4-workers-4                 20.93Ki ±  0%   20.93Ki ± 0%        ~ (p=0.902 n=7)
Update/sqlite/16-workers-4                19.01Ki ±  0%   19.01Ki ± 0%        ~ (p=0.096 n=7)
Update/sqlite/64-workers-4                18.52Ki ±  0%   18.52Ki ± 0%        ~ (p=0.245 n=7)
Update/sqlite/128-workers-4               18.43Ki ±  0%   18.43Ki ± 0%        ~ (p=0.976 n=7)
Update/dqlite/1-workers-4                 21.98Ki ±  0%   21.98Ki ± 0%        ~ (p=0.710 n=7)
Update/dqlite/4-workers-4                 19.12Ki ±  5%   19.15Ki ± 5%        ~ (p=0.805 n=7)
Update/dqlite/16-workers-4                18.41Ki ±  1%   18.35Ki ± 1%        ~ (p=1.000 n=7)
Update/dqlite/64-workers-4                18.03Ki ±  0%   18.03Ki ± 0%        ~ (p=0.972 n=7)
Update/dqlite/128-workers-4               17.98Ki ±  0%   17.97Ki ± 0%   -0.07% (p=0.036 n=7)
geomean                                   14.14Ki         14.21Ki        +0.51%

                                        │   Before   │                After                │
                                        │ allocs/op  │ allocs/op   vs base                 │
Compaction/sqlite-4                       49.00 ± 6%   56.00 ± 9%  +14.29% (p=0.002 n=7)
Compaction/dqlite-4                       210.0 ± 1%   211.0 ± 1%        ~ (p=0.939 n=7)
Create/sqlite/1-workers-4                 406.0 ± 0%   406.0 ± 0%        ~ (p=1.000 n=7) ¹
Create/sqlite/4-workers-4                 363.0 ± 0%   363.0 ± 0%        ~ (p=0.633 n=7)
Create/sqlite/16-workers-4                315.0 ± 0%   315.0 ± 0%        ~ (p=1.000 n=7)
Create/sqlite/64-workers-4                301.0 ± 0%   301.0 ± 0%        ~ (p=1.000 n=7) ¹
Create/sqlite/128-workers-4               298.0 ± 0%   298.0 ± 0%        ~ (p=1.000 n=7) ¹
Create/dqlite/1-workers-4                 378.0 ± 0%   378.0 ± 0%        ~ (p=1.000 n=7)
Create/dqlite/4-workers-4                 320.0 ± 6%   320.0 ± 6%        ~ (p=1.000 n=7)
Create/dqlite/16-workers-4                301.0 ± 0%   301.0 ± 0%        ~ (p=0.984 n=7)
Create/dqlite/64-workers-4                292.0 ± 0%   292.0 ± 0%        ~ (p=1.000 n=7) ¹
Create/dqlite/128-workers-4               290.0 ± 0%   290.0 ± 0%        ~ (p=1.000 n=7) ¹
Delete/sqlite/1-workers-4                 433.0 ± 0%   433.0 ± 0%        ~ (p=1.000 n=7) ¹
Delete/sqlite/4-workers-4                 390.0 ± 0%   391.0 ± 0%   +0.26% (p=0.033 n=7)
Delete/sqlite/16-workers-4                341.0 ± 0%   341.0 ± 0%        ~ (p=0.559 n=7)
Delete/sqlite/64-workers-4                328.0 ± 0%   328.0 ± 0%        ~ (p=1.000 n=7) ¹
Delete/sqlite/128-workers-4               326.0 ± 0%   326.0 ± 0%        ~ (p=1.000 n=7) ¹
Delete/dqlite/1-workers-4                 402.0 ± 0%   402.0 ± 0%        ~ (p=1.000 n=7) ¹
Delete/dqlite/4-workers-4                 344.0 ± 5%   344.0 ± 6%        ~ (p=1.000 n=7)
Delete/dqlite/16-workers-4                326.0 ± 1%   326.0 ± 2%        ~ (p=0.837 n=7)
Delete/dqlite/64-workers-4                317.0 ± 0%   317.0 ± 0%        ~ (p=1.000 n=7) ¹
Delete/dqlite/128-workers-4               315.0 ± 0%   315.0 ± 0%        ~ (p=1.000 n=7)
Get/sqlite-4                              398.0 ± 0%   399.0 ± 0%        ~ (p=0.070 n=7)
Get/dqlite-4                              378.0 ± 0%   377.0 ± 0%        ~ (p=1.000 n=7)
List/sqlite-tiny/all-4                    15.00 ± 7%   16.00 ± 6%   +6.67% (p=0.016 n=7)
List/sqlite-tiny/pagination-4             22.00 ± 5%   23.00 ± 4%   +4.55% (p=0.003 n=7)
List/sqlite-fits-in-page/all-4            16.00 ± 6%   17.00 ± 0%        ~ (p=0.070 n=7)
List/sqlite-fits-in-page/pagination-4     34.00 ± 0%   34.00 ± 0%        ~ (p=1.000 n=7) ¹
List/sqlite-overflows-page/all-4          22.00 ± 5%   23.00 ± 4%   +4.55% (p=0.016 n=7)
List/sqlite-overflows-page/pagination-4   34.00 ± 0%   34.00 ± 0%        ~ (p=1.000 n=7) ¹
List/dqlite-tiny/all-4                    11.00 ± 0%   11.00 ± 0%        ~ (p=1.000 n=7) ¹
List/dqlite-tiny/pagination-4             11.00 ± 0%   11.00 ± 0%        ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/all-4            16.00 ± 6%   16.00 ± 0%        ~ (p=0.462 n=7)
List/dqlite-fits-in-page/pagination-4     17.00 ± 6%   17.00 ± 6%        ~ (p=1.000 n=7)
List/dqlite-overflows-page/all-4          30.00 ± 3%   29.00 ± 3%        ~ (p=1.000 n=7)
List/dqlite-overflows-page/pagination-4   31.00 ± 6%   32.00 ± 6%        ~ (p=0.409 n=7)
Update/sqlite/1-workers-4                 413.0 ± 0%   413.0 ± 0%        ~ (p=1.000 n=7) ¹
Update/sqlite/4-workers-4                 370.0 ± 1%   370.0 ± 0%        ~ (p=1.000 n=7)
Update/sqlite/16-workers-4                321.0 ± 0%   321.0 ± 0%        ~ (p=1.000 n=7) ¹
Update/sqlite/64-workers-4                307.0 ± 0%   307.0 ± 0%        ~ (p=1.000 n=7) ¹
Update/sqlite/128-workers-4               305.0 ± 0%   305.0 ± 0%        ~ (p=0.462 n=7)
Update/dqlite/1-workers-4                 384.0 ± 0%   384.0 ± 0%        ~ (p=1.000 n=7) ¹
Update/dqlite/4-workers-4                 327.0 ± 6%   327.0 ± 6%        ~ (p=0.700 n=7)
Update/dqlite/16-workers-4                308.0 ± 2%   307.0 ± 1%        ~ (p=0.983 n=7)
Update/dqlite/64-workers-4                299.0 ± 0%   299.0 ± 0%        ~ (p=1.000 n=7)
Update/dqlite/128-workers-4               297.0 ± 0%   297.0 ± 0%        ~ (p=1.000 n=7) ¹
geomean                                   153.4        154.6        +0.76%
¹ all samples are equal

                                        │        Before         │                    After                    │
                                        │ network-bytes-read/op │ network-bytes-read/op  vs base              │
Compaction/dqlite-4                               4.186Ki ±  1%           4.196Ki ±  2%       ~ (p=0.779 n=7)
Create/dqlite/1-workers-4                           240.9 ±  1%             241.3 ±  0%       ~ (p=0.102 n=7)
Create/dqlite/4-workers-4                           166.4 ± 25%             166.5 ± 25%       ~ (p=0.688 n=7)
Create/dqlite/16-workers-4                          145.4 ±  1%             146.0 ±  2%       ~ (p=0.302 n=7)
Create/dqlite/64-workers-4                          133.8 ±  1%             133.7 ±  0%       ~ (p=0.427 n=7)
Create/dqlite/128-workers-4                         132.3 ±  1%             132.4 ±  1%       ~ (p=0.333 n=7)
Delete/dqlite/1-workers-4                           703.6 ±  1%             704.2 ±  2%       ~ (p=0.334 n=7)
Delete/dqlite/4-workers-4                           636.5 ±  5%             637.5 ±  6%       ~ (p=0.710 n=7)
Delete/dqlite/16-workers-4                          624.3 ±  1%             623.4 ±  2%       ~ (p=0.243 n=7)
Delete/dqlite/64-workers-4                          614.6 ±  0%             615.1 ±  1%       ~ (p=0.555 n=7)
Delete/dqlite/128-workers-4                         615.0 ±  0%             613.8 ±  0%       ~ (p=0.477 n=7)
Get/dqlite-4                                        822.0 ±  1%             823.2 ±  1%       ~ (p=0.535 n=7)
List/dqlite-tiny/all-4                              182.3 ±  2%             180.3 ±  2%       ~ (p=0.246 n=7)
List/dqlite-tiny/pagination-4                       187.6 ±  1%             185.8 ±  2%       ~ (p=0.121 n=7)
List/dqlite-fits-in-page/all-4                    1.380Ki ±  3%           1.367Ki ±  2%       ~ (p=0.167 n=7)
List/dqlite-fits-in-page/pagination-4             1.440Ki ±  4%           1.436Ki ±  3%       ~ (p=0.874 n=7)
List/dqlite-overflows-page/all-4                  7.449Ki ±  3%           7.352Ki ±  3%       ~ (p=0.128 n=7)
List/dqlite-overflows-page/pagination-4           7.806Ki ±  4%           7.845Ki ±  5%       ~ (p=0.259 n=7)
Update/dqlite/1-workers-4                           262.9 ±  0%             262.9 ±  0%       ~ (p=1.000 n=7)
Update/dqlite/4-workers-4                           185.8 ± 22%             185.9 ± 22%       ~ (p=0.138 n=7)
Update/dqlite/16-workers-4                          163.6 ±  6%             161.4 ±  3%       ~ (p=0.902 n=7)
Update/dqlite/64-workers-4                          150.5 ±  0%             150.5 ±  0%       ~ (p=0.779 n=7)
Update/dqlite/128-workers-4                         149.2 ±  1%             148.7 ±  1%       ~ (p=0.270 n=7)
geomean                                             470.9                   469.9        -0.21%

                                        │          Before          │                     After                      │
                                        │ network-bytes-written/op │ network-bytes-written/op  vs base              │
Compaction/dqlite-4                                    5.682 ±  1%                5.689 ±  1%       ~ (p=0.620 n=7)
Create/dqlite/1-workers-4                              129.1 ±  0%                128.9 ±  0%       ~ (p=0.551 n=7)
Create/dqlite/4-workers-4                              110.6 ± 20%                110.7 ± 20%       ~ (p=0.484 n=7)
Create/dqlite/16-workers-4                             98.19 ±  1%                98.51 ±  1%       ~ (p=0.710 n=7)
Create/dqlite/64-workers-4                             90.87 ±  0%                90.86 ±  0%       ~ (p=0.199 n=7)
Create/dqlite/128-workers-4                            89.57 ±  0%                89.66 ±  0%       ~ (p=0.638 n=7)
Delete/dqlite/1-workers-4                              90.83 ±  1%                91.19 ±  1%       ~ (p=0.383 n=7)
Delete/dqlite/4-workers-4                              71.35 ± 27%                71.40 ± 31%       ~ (p=0.646 n=7)
Delete/dqlite/16-workers-4                             58.83 ±  4%                59.01 ±  8%       ~ (p=0.776 n=7)
Delete/dqlite/64-workers-4                             51.21 ±  0%                51.24 ±  0%       ~ (p=0.333 n=7)
Delete/dqlite/128-workers-4                            49.89 ±  1%                49.86 ±  1%       ~ (p=0.781 n=7)
Get/dqlite-4                                           105.4 ±  0%                105.3 ±  0%       ~ (p=0.997 n=7)
List/dqlite-tiny/all-4                               0.04921 ±  7%              0.04890 ±  7%       ~ (p=0.383 n=7)
List/dqlite-tiny/pagination-4                        0.07668 ± 12%              0.07421 ± 10%       ~ (p=0.456 n=7)
List/dqlite-fits-in-page/all-4                       0.07734 ±  6%              0.07592 ±  6%       ~ (p=0.620 n=7)
List/dqlite-fits-in-page/pagination-4                 0.1270 ±  6%               0.1251 ±  6%       ~ (p=0.927 n=7)
List/dqlite-overflows-page/all-4                      0.1134 ±  3%               0.1119 ±  3%       ~ (p=0.073 n=7)
List/dqlite-overflows-page/pagination-4               0.1812 ±  4%               0.1851 ±  3%       ~ (p=0.073 n=7)
Update/dqlite/1-workers-4                              153.3 ±  0%                153.3 ±  0%       ~ (p=0.776 n=7)
Update/dqlite/4-workers-4                              134.8 ± 16%                134.9 ± 16%       ~ (p=0.326 n=7)
Update/dqlite/16-workers-4                             122.7 ±  4%                121.5 ±  2%       ~ (p=0.824 n=7)
Update/dqlite/64-workers-4                             114.8 ±  0%                114.8 ±  0%       ~ (p=0.462 n=7)
Update/dqlite/128-workers-4                            113.7 ±  0%                113.5 ±  0%       ~ (p=0.353 n=7)
geomean                                                13.81                      13.77        -0.28%
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                       33.50µ ±  5%
Compaction/dqlite-4                       104.2µ ±  2%
Create/sqlite/1-workers-4                 550.3µ ± 10%
Create/sqlite/4-workers-4                 206.0µ ± 21%
Create/sqlite/16-workers-4                81.87µ ± 26%
Create/sqlite/64-workers-4                51.92µ ±  8%
Create/sqlite/128-workers-4               45.30µ ±  3%
Create/dqlite/1-workers-4                 1.034m ± 10%
Create/dqlite/4-workers-4                 563.0µ ± 18%
Create/dqlite/16-workers-4                223.7µ ±  8%
Create/dqlite/64-workers-4                141.9µ ±  4%
Create/dqlite/128-workers-4               123.0µ ±  1%
Delete/sqlite/1-workers-4                 589.0µ ± 14%
Delete/sqlite/4-workers-4                 182.1µ ± 11%
Delete/sqlite/16-workers-4                87.16µ ±  5%
Delete/sqlite/64-workers-4                56.38µ ±  7%
Delete/sqlite/128-workers-4               51.91µ ±  2%
Delete/dqlite/1-workers-4                 1.145m ±  6%
Delete/dqlite/4-workers-4                 603.9µ ±  4%
Delete/dqlite/16-workers-4                255.4µ ±  5%
Delete/dqlite/64-workers-4                155.0µ ±  5%
Delete/dqlite/128-workers-4               136.0µ ±  2%
Get/sqlite-4                              346.3µ ±  2%
Get/dqlite-4                              459.7µ ±  2%
List/sqlite-tiny/all-4                    4.861µ ±  2%
List/sqlite-tiny/pagination-4             9.386µ ±  2%
List/sqlite-fits-in-page/all-4            7.533µ ±  3%
List/sqlite-fits-in-page/pagination-4     20.67µ ±  2%
List/sqlite-overflows-page/all-4          18.12µ ±  3%
List/sqlite-overflows-page/pagination-4   30.18µ ±  3%
List/dqlite-tiny/all-4                    4.575µ ±  2%
List/dqlite-tiny/pagination-4             8.297µ ±  1%
List/dqlite-fits-in-page/all-4            8.624µ ±  2%
List/dqlite-fits-in-page/pagination-4     18.98µ ±  1%
List/dqlite-overflows-page/all-4          22.62µ ±  4%
List/dqlite-overflows-page/pagination-4   31.16µ ±  2%
Update/sqlite/1-workers-4                 581.4µ ± 10%
Update/sqlite/4-workers-4                 201.5µ ±  9%
Update/sqlite/16-workers-4                89.69µ ±  7%
Update/sqlite/64-workers-4                58.03µ ±  6%
Update/sqlite/128-workers-4               50.52µ ±  4%
Update/dqlite/1-workers-4                 1.098m ±  3%
Update/dqlite/4-workers-4                 597.3µ ±  9%
Update/dqlite/16-workers-4                252.1µ ±  1%
Update/dqlite/64-workers-4                156.7µ ±  2%
Update/dqlite/128-workers-4               135.0µ ±  3%
geomean                                   93.75µ

                                        │        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                          15.34 ± 1%
Compaction/dqlite-4                          15.41 ± 1%
Create/sqlite/1-workers-4                    11.83 ± 0%
Create/sqlite/4-workers-4                    8.492 ± 0%
Create/sqlite/16-workers-4                   8.285 ± 0%
Create/sqlite/64-workers-4                   8.203 ± 0%
Create/sqlite/128-workers-4                  8.190 ± 0%
Create/dqlite/1-workers-4                    7.322 ± 2%
Create/dqlite/4-workers-4                    8.403 ± 1%
Create/dqlite/16-workers-4                   8.229 ± 0%
Create/dqlite/64-workers-4                   8.171 ± 0%
Create/dqlite/128-workers-4                  8.170 ± 0%
Delete/sqlite/1-workers-4                    14.56 ± 0%
Delete/sqlite/4-workers-4                    11.67 ± 2%
Delete/sqlite/16-workers-4                   14.61 ± 2%
Delete/sqlite/64-workers-4                   15.00 ± 0%
Delete/sqlite/128-workers-4                  15.00 ± 0%
Delete/dqlite/1-workers-4                    9.199 ± 1%
Delete/dqlite/4-workers-4                    11.09 ± 1%
Delete/dqlite/16-workers-4                   10.69 ± 0%
Delete/dqlite/64-workers-4                   12.35 ± 5%
Delete/dqlite/128-workers-4                  12.95 ± 4%
Get/sqlite-4                                 12.25 ± 0%
Get/dqlite-4                                 12.24 ± 1%
List/sqlite-tiny/all-4                      380.2m ± 0%
List/sqlite-tiny/pagination-4                1.320 ± 0%
List/sqlite-fits-in-page/all-4              323.6m ± 0%
List/sqlite-fits-in-page/pagination-4        1.125 ± 3%
List/sqlite-overflows-page/all-4            365.1m ± 0%
List/sqlite-overflows-page/pagination-4      1.260 ± 0%
List/dqlite-tiny/all-4                      378.0m ± 0%
List/dqlite-tiny/pagination-4                1.314 ± 0%
List/dqlite-fits-in-page/all-4              322.7m ± 0%
List/dqlite-fits-in-page/pagination-4        1.116 ± 0%
List/dqlite-overflows-page/all-4            362.3m ± 0%
List/dqlite-overflows-page/pagination-4      1.252 ± 0%
Update/sqlite/1-workers-4                    14.02 ± 0%
Update/sqlite/4-workers-4                    10.48 ± 1%
Update/sqlite/16-workers-4                   10.25 ± 0%
Update/sqlite/64-workers-4                   10.17 ± 0%
Update/sqlite/128-workers-4                  10.17 ± 0%
Update/dqlite/1-workers-4                    9.291 ± 2%
Update/dqlite/4-workers-4                    10.39 ± 0%
Update/dqlite/16-workers-4                   10.18 ± 0%
Update/dqlite/64-workers-4                   10.13 ± 0%
Update/dqlite/128-workers-4                  10.14 ± 0%
geomean                                      5.176

                                        │     After      │
                                        │ page-writes/op │
Compaction/sqlite-4                       98.89m ± 31%
Compaction/dqlite-4                       108.6m ± 28%
Create/sqlite/1-workers-4                  3.213 ±  0%
Create/sqlite/4-workers-4                  1.869 ±  2%
Create/sqlite/16-workers-4                671.2m ±  9%
Create/sqlite/64-workers-4                273.7m ±  2%
Create/sqlite/128-workers-4               195.8m ±  6%
Create/dqlite/1-workers-4                  3.161 ±  1%
Create/dqlite/4-workers-4                  1.700 ±  1%
Create/dqlite/16-workers-4                551.9m ±  3%
Create/dqlite/64-workers-4                205.4m ±  7%
Create/dqlite/128-workers-4               130.2m ±  7%
Delete/sqlite/1-workers-4                  3.312 ±  1%
Delete/sqlite/4-workers-4                  2.035 ±  4%
Delete/sqlite/16-workers-4                915.6m ±  5%
Delete/sqlite/64-workers-4                542.3m ±  4%
Delete/sqlite/128-workers-4               416.1m ±  7%
Delete/dqlite/1-workers-4                  3.290 ±  1%
Delete/dqlite/4-workers-4                  1.821 ±  0%
Delete/dqlite/16-workers-4                641.0m ±  6%
Delete/dqlite/64-workers-4                288.0m ± 11%
Delete/dqlite/128-workers-4               205.9m ±  3%
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                  3.407 ±  0%
Update/sqlite/4-workers-4                  2.377 ±  1%
Update/sqlite/16-workers-4                 1.478 ±  2%
Update/sqlite/64-workers-4                 1.048 ±  2%
Update/sqlite/128-workers-4               853.6m ±  1%
Update/dqlite/1-workers-4                  3.324 ±  1%
Update/dqlite/4-workers-4                  2.105 ±  2%
Update/dqlite/16-workers-4                 1.133 ±  5%
Update/dqlite/64-workers-4                643.2m ±  7%
Update/dqlite/128-workers-4               451.7m ± 24%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                        │     After      │
                                        │ sec-reading/op │
Compaction/sqlite-4                         73.10µ ±  4%
Compaction/dqlite-4                         82.80µ ± 20%
Create/sqlite/1-workers-4                   37.50µ ± 13%
Create/sqlite/4-workers-4                   113.9µ ± 34%
Create/sqlite/16-workers-4                  48.50µ ± 57%
Create/sqlite/64-workers-4                  25.10µ ±  9%
Create/sqlite/128-workers-4                 20.40µ ± 11%
Create/dqlite/1-workers-4                   14.00µ ± 60%
Create/dqlite/4-workers-4                   11.80µ ± 97%
Create/dqlite/16-workers-4                  6.400µ ± 25%
Create/dqlite/64-workers-4                  3.900µ ± 28%
Create/dqlite/128-workers-4                 2.700µ ± 33%
Delete/sqlite/1-workers-4                   49.50µ ± 17%
Delete/sqlite/4-workers-4                   114.9µ ± 11%
Delete/sqlite/16-workers-4                  65.20µ ±  5%
Delete/sqlite/64-workers-4                  42.40µ ± 10%
Delete/sqlite/128-workers-4                 39.90µ ±  7%
Delete/dqlite/1-workers-4                   21.40µ ± 32%
Delete/dqlite/4-workers-4                   19.20µ ± 29%
Delete/dqlite/16-workers-4                  13.80µ ± 22%
Delete/dqlite/64-workers-4                  12.10µ ± 18%
Delete/dqlite/128-workers-4                 11.20µ ± 19%
Get/sqlite-4                                85.30µ ± 10%
Get/dqlite-4                                49.60µ ± 15%
List/sqlite-tiny/all-4                      10.90µ ±  2%
List/sqlite-tiny/pagination-4               19.60µ ±  3%
List/sqlite-fits-in-page/all-4              15.60µ ±  2%
List/sqlite-fits-in-page/pagination-4       38.00µ ±  2%
List/sqlite-overflows-page/all-4            33.70µ ±  2%
List/sqlite-overflows-page/pagination-4     51.70µ ±  2%
List/dqlite-tiny/all-4                      8.300µ ± 19%
List/dqlite-tiny/pagination-4               11.60µ ± 16%
List/dqlite-fits-in-page/all-4              15.10µ ± 12%
List/dqlite-fits-in-page/pagination-4       33.40µ ±  7%
List/dqlite-overflows-page/all-4            38.50µ ±  3%
List/dqlite-overflows-page/pagination-4     54.10µ ±  6%
Update/sqlite/1-workers-4                   39.50µ ± 24%
Update/sqlite/4-workers-4                   114.1µ ± 17%
Update/sqlite/16-workers-4                  53.60µ ± 10%
Update/sqlite/64-workers-4                  28.20µ ±  8%
Update/sqlite/128-workers-4                 22.80µ ±  8%
Update/dqlite/1-workers-4                   8.700µ ± 54%
Update/dqlite/4-workers-4                   12.40µ ± 57%
Update/dqlite/16-workers-4                  7.500µ ± 25%
Update/dqlite/64-workers-4                  4.600µ ± 35%
Update/dqlite/128-workers-4                 4.000µ ± 42%
geomean                                     23.27µ

                                        │      After      │
                                        │ sec-writing/op  │
Compaction/sqlite-4                       17.00µ ±   5%
Compaction/dqlite-4                       13.80µ ±  15%
Create/sqlite/1-workers-4                 280.8µ ±  21%
Create/sqlite/4-workers-4                 90.50µ ±  24%
Create/sqlite/16-workers-4                25.60µ ±  12%
Create/sqlite/64-workers-4                19.40µ ±   7%
Create/sqlite/128-workers-4               18.60µ ±   7%
Create/dqlite/1-workers-4                 71.20µ ±  33%
Create/dqlite/4-workers-4                 33.00µ ±  25%
Create/dqlite/16-workers-4                22.90µ ±  15%
Create/dqlite/64-workers-4                20.90µ ±  10%
Create/dqlite/128-workers-4               19.50µ ±  14%
Delete/sqlite/1-workers-4                 322.6µ ±  20%
Delete/sqlite/4-workers-4                 80.20µ ±   8%
Delete/sqlite/16-workers-4                31.60µ ±   6%
Delete/sqlite/64-workers-4                23.20µ ±   2%
Delete/sqlite/128-workers-4               22.30µ ±   4%
Delete/dqlite/1-workers-4                 70.30µ ±  65%
Delete/dqlite/4-workers-4                 38.40µ ±  32%
Delete/dqlite/16-workers-4                24.60µ ±   7%
Delete/dqlite/64-workers-4                22.00µ ±   8%
Delete/dqlite/128-workers-4               22.60µ ±   4%
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                 292.2µ ±  20%
Update/sqlite/4-workers-4                 80.00µ ±  19%
Update/sqlite/16-workers-4                27.40µ ±   7%
Update/sqlite/64-workers-4                21.80µ ±   7%
Update/sqlite/128-workers-4               21.20µ ±   3%
Update/dqlite/1-workers-4                 54.80µ ± 115%
Update/dqlite/4-workers-4                 31.00µ ±  29%
Update/dqlite/16-workers-4                22.90µ ±   7%
Update/dqlite/64-workers-4                22.20µ ±  12%
Update/dqlite/128-workers-4               22.10µ ±  14%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

                                        │    After     │
                                        │     B/op     │
Compaction/sqlite-4                       3.835Ki ± 8%
Compaction/dqlite-4                       13.76Ki ± 1%
Create/sqlite/1-workers-4                 21.68Ki ± 0%
Create/sqlite/4-workers-4                 19.79Ki ± 0%
Create/sqlite/16-workers-4                17.92Ki ± 0%
Create/sqlite/64-workers-4                17.41Ki ± 0%
Create/sqlite/128-workers-4               17.32Ki ± 0%
Create/dqlite/1-workers-4                 20.85Ki ± 0%
Create/dqlite/4-workers-4                 18.01Ki ± 5%
Create/dqlite/16-workers-4                17.29Ki ± 0%
Create/dqlite/64-workers-4                16.89Ki ± 0%
Create/dqlite/128-workers-4               16.85Ki ± 0%
Delete/sqlite/1-workers-4                 24.33Ki ± 0%
Delete/sqlite/4-workers-4                 22.47Ki ± 0%
Delete/sqlite/16-workers-4                20.59Ki ± 0%
Delete/sqlite/64-workers-4                20.13Ki ± 0%
Delete/sqlite/128-workers-4               20.06Ki ± 0%
Delete/dqlite/1-workers-4                 23.45Ki ± 1%
Delete/dqlite/4-workers-4                 20.49Ki ± 5%
Delete/dqlite/16-workers-4                19.76Ki ± 1%
Delete/dqlite/64-workers-4                19.40Ki ± 0%
Delete/dqlite/128-workers-4               19.36Ki ± 0%
Get/sqlite-4                              22.89Ki ± 0%
Get/dqlite-4                              21.76Ki ± 0%
List/sqlite-tiny/all-4                    1.406Ki ± 7%
List/sqlite-tiny/pagination-4             1.845Ki ± 2%
List/sqlite-fits-in-page/all-4            6.622Ki ± 8%
List/sqlite-fits-in-page/pagination-4     8.308Ki ± 2%
List/sqlite-overflows-page/all-4          34.29Ki ± 7%
List/sqlite-overflows-page/pagination-4   36.93Ki ± 5%
List/dqlite-tiny/all-4                    1.047Ki ± 6%
List/dqlite-tiny/pagination-4             1.045Ki ± 2%
List/dqlite-fits-in-page/all-4            6.183Ki ± 9%
List/dqlite-fits-in-page/pagination-4     6.216Ki ± 2%
List/dqlite-overflows-page/all-4          31.12Ki ± 9%
List/dqlite-overflows-page/pagination-4   31.71Ki ± 4%
Update/sqlite/1-workers-4                 22.83Ki ± 0%
Update/sqlite/4-workers-4                 20.93Ki ± 0%
Update/sqlite/16-workers-4                19.01Ki ± 0%
Update/sqlite/64-workers-4                18.52Ki ± 0%
Update/sqlite/128-workers-4               18.43Ki ± 0%
Update/dqlite/1-workers-4                 21.98Ki ± 0%
Update/dqlite/4-workers-4                 19.15Ki ± 5%
Update/dqlite/16-workers-4                18.35Ki ± 1%
Update/dqlite/64-workers-4                18.03Ki ± 0%
Update/dqlite/128-workers-4               17.97Ki ± 0%
geomean                                   14.21Ki

                                        │   After    │
                                        │ allocs/op  │
Compaction/sqlite-4                       56.00 ± 9%
Compaction/dqlite-4                       211.0 ± 1%
Create/sqlite/1-workers-4                 406.0 ± 0%
Create/sqlite/4-workers-4                 363.0 ± 0%
Create/sqlite/16-workers-4                315.0 ± 0%
Create/sqlite/64-workers-4                301.0 ± 0%
Create/sqlite/128-workers-4               298.0 ± 0%
Create/dqlite/1-workers-4                 378.0 ± 0%
Create/dqlite/4-workers-4                 320.0 ± 6%
Create/dqlite/16-workers-4                301.0 ± 0%
Create/dqlite/64-workers-4                292.0 ± 0%
Create/dqlite/128-workers-4               290.0 ± 0%
Delete/sqlite/1-workers-4                 433.0 ± 0%
Delete/sqlite/4-workers-4                 391.0 ± 0%
Delete/sqlite/16-workers-4                341.0 ± 0%
Delete/sqlite/64-workers-4                328.0 ± 0%
Delete/sqlite/128-workers-4               326.0 ± 0%
Delete/dqlite/1-workers-4                 402.0 ± 0%
Delete/dqlite/4-workers-4                 344.0 ± 6%
Delete/dqlite/16-workers-4                326.0 ± 2%
Delete/dqlite/64-workers-4                317.0 ± 0%
Delete/dqlite/128-workers-4               315.0 ± 0%
Get/sqlite-4                              399.0 ± 0%
Get/dqlite-4                              377.0 ± 0%
List/sqlite-tiny/all-4                    16.00 ± 6%
List/sqlite-tiny/pagination-4             23.00 ± 4%
List/sqlite-fits-in-page/all-4            17.00 ± 0%
List/sqlite-fits-in-page/pagination-4     34.00 ± 0%
List/sqlite-overflows-page/all-4          23.00 ± 4%
List/sqlite-overflows-page/pagination-4   34.00 ± 0%
List/dqlite-tiny/all-4                    11.00 ± 0%
List/dqlite-tiny/pagination-4             11.00 ± 0%
List/dqlite-fits-in-page/all-4            16.00 ± 0%
List/dqlite-fits-in-page/pagination-4     17.00 ± 6%
List/dqlite-overflows-page/all-4          29.00 ± 3%
List/dqlite-overflows-page/pagination-4   32.00 ± 6%
Update/sqlite/1-workers-4                 413.0 ± 0%
Update/sqlite/4-workers-4                 370.0 ± 0%
Update/sqlite/16-workers-4                321.0 ± 0%
Update/sqlite/64-workers-4                307.0 ± 0%
Update/sqlite/128-workers-4               305.0 ± 0%
Update/dqlite/1-workers-4                 384.0 ± 0%
Update/dqlite/4-workers-4                 327.0 ± 6%
Update/dqlite/16-workers-4                307.0 ± 1%
Update/dqlite/64-workers-4                299.0 ± 0%
Update/dqlite/128-workers-4               297.0 ± 0%
geomean                                   154.6

                                        │         After         │
                                        │ network-bytes-read/op │
Compaction/dqlite-4                               4.196Ki ±  2%
Create/dqlite/1-workers-4                           241.3 ±  0%
Create/dqlite/4-workers-4                           166.5 ± 25%
Create/dqlite/16-workers-4                          146.0 ±  2%
Create/dqlite/64-workers-4                          133.7 ±  0%
Create/dqlite/128-workers-4                         132.4 ±  1%
Delete/dqlite/1-workers-4                           704.2 ±  2%
Delete/dqlite/4-workers-4                           637.5 ±  6%
Delete/dqlite/16-workers-4                          623.4 ±  2%
Delete/dqlite/64-workers-4                          615.1 ±  1%
Delete/dqlite/128-workers-4                         613.8 ±  0%
Get/dqlite-4                                        823.2 ±  1%
List/dqlite-tiny/all-4                              180.3 ±  2%
List/dqlite-tiny/pagination-4                       185.8 ±  2%
List/dqlite-fits-in-page/all-4                    1.367Ki ±  2%
List/dqlite-fits-in-page/pagination-4             1.436Ki ±  3%
List/dqlite-overflows-page/all-4                  7.352Ki ±  3%
List/dqlite-overflows-page/pagination-4           7.845Ki ±  5%
Update/dqlite/1-workers-4                           262.9 ±  0%
Update/dqlite/4-workers-4                           185.9 ± 22%
Update/dqlite/16-workers-4                          161.4 ±  3%
Update/dqlite/64-workers-4                          150.5 ±  0%
Update/dqlite/128-workers-4                         148.7 ±  1%
geomean                                             469.9

                                        │          After           │
                                        │ network-bytes-written/op │
Compaction/dqlite-4                                    5.689 ±  1%
Create/dqlite/1-workers-4                              128.9 ±  0%
Create/dqlite/4-workers-4                              110.7 ± 20%
Create/dqlite/16-workers-4                             98.51 ±  1%
Create/dqlite/64-workers-4                             90.86 ±  0%
Create/dqlite/128-workers-4                            89.66 ±  0%
Delete/dqlite/1-workers-4                              91.19 ±  1%
Delete/dqlite/4-workers-4                              71.40 ± 31%
Delete/dqlite/16-workers-4                             59.01 ±  8%
Delete/dqlite/64-workers-4                             51.24 ±  0%
Delete/dqlite/128-workers-4                            49.86 ±  1%
Get/dqlite-4                                           105.3 ±  0%
List/dqlite-tiny/all-4                               0.04890 ±  7%
List/dqlite-tiny/pagination-4                        0.07421 ± 10%
List/dqlite-fits-in-page/all-4                       0.07592 ±  6%
List/dqlite-fits-in-page/pagination-4                 0.1251 ±  6%
List/dqlite-overflows-page/all-4                      0.1119 ±  3%
List/dqlite-overflows-page/pagination-4               0.1851 ±  3%
Update/dqlite/1-workers-4                              153.3 ±  0%
Update/dqlite/4-workers-4                              134.9 ± 16%
Update/dqlite/16-workers-4                             121.5 ±  2%
Update/dqlite/64-workers-4                             114.8 ±  0%
Update/dqlite/128-workers-4                            113.5 ±  0%
geomean                                                13.77

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 Marco! I have some little comments then we are good to go:

import "github.com/mattn/go-sqlite3"

func init() {
if err := C.sqlite3_enable_autovacuum_limit(10, 16); err != C.SQLITE_OK {
Copy link
Contributor

Choose a reason for hiding this comment

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

Are we/users going to need to tune the percentage and max pages used in auto-vacuuming?

g.Expect(err).To(BeNil())

// Expect compaction to reduce the size.
finalSize, err := server.backend.DbSize(ctx)
Copy link
Contributor

Choose a reason for hiding this comment

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

Could we please be more precise here and check whether the size aligns with the percentage we set in qlite3_enable_autovacuum_limit?

Co-authored-by: Louise K. Schmidtgen <[email protected]>
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.

2 participants