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

Delete Query #175

Merged
merged 8 commits into from
Sep 25, 2024
Merged

Delete Query #175

merged 8 commits into from
Sep 25, 2024

Conversation

louiseschmidtgen
Copy link
Contributor

@louiseschmidtgen louiseschmidtgen commented Sep 23, 2024

Description

This PR moves the logic for deletion into its own query in generic.

Query logic for deletion

Happy path:

  • The specified revision exists in the database and is not already deleted.
  • We insert a row with the revision and mark it as deleted via the column deleted=1.
  • the prev value is the last revision's value

Edge cases:

  1. The specified revision does not exist in the database.

    • We return success=true, empty KV
  2. The specified revision is the latest and is already deleted.

    • We want to return the id of this revision.
    • Return success= false and latest rev
  3. The specified revision is not the latest revision.

    • We return the latest rev and kvs, success = false

Query

This is the delete query:

INSERT INTO kine(name, created, deleted, create_revision, prev_revision, lease, value, old_value)
    SELECT 
            ? AS name,
            0 AS created,
            1 AS deleted,
            CASE 
	          WHEN kine.created THEN id
	          ELSE create_revision
	    END AS create_revision,
            id AS prev_revision,
            lease,
            NULL AS value,
            value AS old_value
    FROM kine WHERE id = (SELECT MAX(id) FROM kine WHERE name = ?)
    AND deleted = 0
    AND id = ?;

Optimization for deletion

EXPLAIN QUERY PLAN:

QUERY PLAN
|--SEARCH kine USING INTEGER PRIMARY KEY (rowid=?)
`--SCALAR SUBQUERY 1
   `--SEARCH kine USING COVERING INDEX kine_name_index (name=?)

Potential optimization with an additional index on deleted.

Removing unconditional delete

As of Kubernetes v1.15 we do conditional deletes instead of unconditional deletes. A conditional delete requires the revision of the key to be deleted to match the revision provided in the delete request whereas an unconditional delete does not check for the revision and just deletes what it finds. K8s-dqlite is not used by deployments on v1.14 Kubernetes and can therefore be removed safely.

@louiseschmidtgen louiseschmidtgen changed the title [WIP] Delete Query Delete Query Sep 23, 2024
@louiseschmidtgen louiseschmidtgen marked this pull request as ready for review September 23, 2024 16:14
@louiseschmidtgen louiseschmidtgen requested a review from a team as a code owner September 23, 2024 16:14
Copy link

github-actions bot commented Sep 23, 2024

Benchmark Result

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                        42.66µ ±  9%    41.13µ ±   3%        ~ (p=0.165 n=7)
Compaction/dqlite-4                        42.69µ ± 16%    44.82µ ±  15%        ~ (p=0.535 n=7)
Create/sqlite/1-workers-4                  1.346m ±  5%    1.406m ±  13%   +4.51% (p=0.001 n=7)
Create/sqlite/2-workers-4                  1.383m ±  6%    1.386m ±  16%        ~ (p=0.710 n=7)
Create/sqlite/4-workers-4                  1.392m ± 17%    1.460m ±  11%        ~ (p=0.456 n=7)
Create/sqlite/8-workers-4                  1.475m ± 10%    1.475m ±  12%        ~ (p=0.383 n=7)
Create/sqlite/16-workers-4                 1.976m ± 16%    1.912m ±  26%        ~ (p=0.620 n=7)
Create/dqlite/1-workers-4                  1.132m ±  2%    1.142m ±   7%        ~ (p=0.097 n=7)
Create/dqlite/2-workers-4                  985.1µ ±  3%   1011.3µ ±   4%        ~ (p=0.073 n=7)
Create/dqlite/4-workers-4                  1.001m ±  3%    1.000m ±   2%        ~ (p=0.620 n=7)
Create/dqlite/8-workers-4                 1015.2µ ±  4%    997.6µ ±   2%        ~ (p=0.259 n=7)
Create/dqlite/16-workers-4                 996.9µ ±  2%   1042.4µ ±  25%   +4.57% (p=0.011 n=7)
Delete/sqlite/1-workers-4                  1.548m ± 14%    1.434m ±   8%   -7.35% (p=0.004 n=7)
Delete/sqlite/2-workers-4                  1.647m ±  6%    1.511m ±   7%   -8.22% (p=0.007 n=7)
Delete/sqlite/4-workers-4                  1.766m ± 27%    1.525m ±  10%  -13.63% (p=0.001 n=7)
Delete/sqlite/8-workers-4                  1.943m ± 19%    1.622m ±  11%  -16.53% (p=0.001 n=7)
Delete/sqlite/16-workers-4                 2.766m ± 17%    2.312m ±  32%  -16.39% (p=0.026 n=7)
Delete/dqlite/1-workers-4                  1.391m ±  5%    1.150m ±   5%  -17.30% (p=0.001 n=7)
Delete/dqlite/2-workers-4                  1.244m ±  2%    1.027m ±   3%  -17.45% (p=0.001 n=7)
Delete/dqlite/4-workers-4                  1.241m ±  4%    1.042m ±   7%  -16.04% (p=0.001 n=7)
Delete/dqlite/8-workers-4                  1.211m ± 16%    1.015m ±  11%  -16.22% (p=0.001 n=7)
Delete/dqlite/16-workers-4                 1.235m ±  5%    1.082m ±   7%  -12.34% (p=0.001 n=7)
Get/sqlite-4                               269.1µ ±  0%    261.6µ ±   0%   -2.77% (p=0.001 n=7)
Get/dqlite-4                               361.5µ ±  1%    355.3µ ±   2%   -1.70% (p=0.001 n=7)
List/sqlite-tiny/all-4                     4.443µ ±  4%    4.432µ ±   3%        ~ (p=0.209 n=7)
List/sqlite-tiny/pagination-4              8.822µ ±  3%    8.793µ ±   1%        ~ (p=0.902 n=7)
List/sqlite-fits-in-page/all-4             7.292µ ±  4%    7.240µ ±   4%        ~ (p=0.097 n=7)
List/sqlite-fits-in-page/pagination-4      21.31µ ±  8%    21.22µ ±   6%        ~ (p=0.535 n=7)
List/sqlite-overflows-page/all-4           16.90µ ±  5%    16.81µ ±  10%        ~ (p=0.902 n=7)
List/sqlite-overflows-page/pagination-4    45.05µ ±  3%    44.28µ ±   4%        ~ (p=0.318 n=7)
List/dqlite-tiny/all-4                     2.804µ ±  7%    2.769µ ±   6%        ~ (p=0.128 n=7)
List/dqlite-tiny/pagination-4              5.894µ ±  3%    5.830µ ±   2%        ~ (p=0.301 n=7)
List/dqlite-fits-in-page/all-4             5.874µ ±  2%    5.908µ ±   6%        ~ (p=0.456 n=7)
List/dqlite-fits-in-page/pagination-4      15.91µ ±  5%    15.75µ ±   2%        ~ (p=0.383 n=7)
List/dqlite-overflows-page/all-4           17.36µ ±  7%    17.38µ ±   2%        ~ (p=1.000 n=7)
List/dqlite-overflows-page/pagination-4    39.79µ ±  4%    38.78µ ±   3%        ~ (p=0.209 n=7)
Update/sqlite/1-workers-4                  1.355m ±  5%    1.316m ±   5%        ~ (p=0.318 n=7)
Update/sqlite/2-workers-4                  1.335m ±  6%    1.417m ±   5%        ~ (p=0.053 n=7)
Update/sqlite/4-workers-4                  1.475m ±  9%    1.485m ±  11%        ~ (p=0.902 n=7)
Update/sqlite/8-workers-4                  1.529m ±  9%    1.614m ±  11%        ~ (p=0.318 n=7)
Update/sqlite/16-workers-4                 1.902m ± 17%    2.353m ± 718%        ~ (p=0.073 n=7)
Update/dqlite/1-workers-4                  1.166m ± 10%    1.139m ±   3%        ~ (p=0.053 n=7)
Update/dqlite/2-workers-4                 1020.2µ ±  2%    997.1µ ±   2%   -2.26% (p=0.007 n=7)
Update/dqlite/4-workers-4                 1030.1µ ±  4%    991.3µ ±  13%        ~ (p=0.073 n=7)
Update/dqlite/8-workers-4                  1.015m ±  5%    1.003m ±   3%   -1.19% (p=0.038 n=7)
Update/dqlite/16-workers-4                 1.003m ±  5%    1.019m ±   5%        ~ (p=0.902 n=7)
geomean                                    312.3µ          303.5µ          -2.81%

                                        │        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/2-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/8-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/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/2-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/8-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) ¹
Delete/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/2-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/8-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/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/2-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/8-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) ¹
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/2-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/8-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/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/2-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/8-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) ¹
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/2-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/8-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/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Create/dqlite/2-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/8-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) ¹
Delete/sqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/sqlite/2-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/8-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/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Delete/dqlite/2-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/8-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) ¹
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/2-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/8-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/dqlite/1-workers-4                         0.000 ± 0%               0.000 ± 0%       ~ (p=1.000 n=7) ¹
Update/dqlite/2-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/8-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) ¹
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.22 ±  1%     12.23 ±  2%        ~ (p=1.000 n=7)
Compaction/dqlite-4                         12.23 ±  1%     12.34 ±  2%        ~ (p=0.707 n=7)
Create/sqlite/1-workers-4                   14.07 ±  1%     13.90 ±  4%   -1.21% (p=0.004 n=7)
Create/sqlite/2-workers-4                   13.83 ±  1%     13.86 ±  2%        ~ (p=0.834 n=7)
Create/sqlite/4-workers-4                   13.50 ±  2%     13.48 ±  3%        ~ (p=0.884 n=7)
Create/sqlite/8-workers-4                   13.04 ±  4%     12.93 ±  3%        ~ (p=0.828 n=7)
Create/sqlite/16-workers-4                  12.32 ±  9%     12.20 ± 14%        ~ (p=0.620 n=7)
Create/dqlite/1-workers-4                   12.98 ±  1%     12.96 ±  1%        ~ (p=0.302 n=7)
Create/dqlite/2-workers-4                   10.89 ±  2%     10.73 ±  2%   -1.47% (p=0.005 n=7)
Create/dqlite/4-workers-4                   10.87 ±  1%     10.75 ±  2%        ~ (p=0.066 n=7)
Create/dqlite/8-workers-4                   10.87 ±  1%     10.79 ±  1%        ~ (p=0.154 n=7)
Create/dqlite/16-workers-4                  10.91 ±  1%     10.72 ±  1%   -1.74% (p=0.002 n=7)
Delete/sqlite/1-workers-4                   25.08 ±  5%     16.42 ± 14%  -34.53% (p=0.001 n=7)
Delete/sqlite/2-workers-4                   23.56 ±  4%     16.45 ±  5%  -30.18% (p=0.001 n=7)
Delete/sqlite/4-workers-4                   23.08 ±  9%     15.78 ± 12%  -31.63% (p=0.001 n=7)
Delete/sqlite/8-workers-4                   22.75 ±  3%     15.59 ±  9%  -31.47% (p=0.001 n=7)
Delete/sqlite/16-workers-4                  21.37 ±  6%     14.61 ± 13%  -31.63% (p=0.001 n=7)
Delete/dqlite/1-workers-4                   24.00 ±  1%     15.31 ±  1%  -36.21% (p=0.001 n=7)
Delete/dqlite/2-workers-4                   12.83 ±  4%     13.25 ±  0%   +3.27% (p=0.001 n=7)
Delete/dqlite/4-workers-4                   10.62 ±  1%     13.22 ±  1%  +24.48% (p=0.001 n=7)
Delete/dqlite/8-workers-4                   10.96 ±  1%     13.21 ±  1%  +20.53% (p=0.001 n=7)
Delete/dqlite/16-workers-4                  11.02 ±  1%     13.23 ±  1%  +20.05% (p=0.001 n=7)
Get/sqlite-4                                14.96 ± 20%     14.95 ±  0%        ~ (p=0.883 n=7)
Get/dqlite-4                                11.95 ±  0%     11.96 ±  0%        ~ (p=0.103 n=7)
List/sqlite-tiny/all-4                     192.3m ±  0%    192.2m ±  0%        ~ (p=0.383 n=7)
List/sqlite-tiny/pagination-4               1.132 ±  0%     1.132 ±  0%        ~ (p=0.633 n=7)
List/sqlite-fits-in-page/all-4             165.0m ±  0%    164.7m ±  0%        ~ (p=0.097 n=7)
List/sqlite-fits-in-page/pagination-4      965.6m ±  3%    965.4m ±  3%        ~ (p=0.214 n=7)
List/sqlite-overflows-page/all-4           286.3m ± 20%    290.7m ± 37%        ~ (p=0.902 n=7)
List/sqlite-overflows-page/pagination-4     2.080 ±  2%     2.080 ±  0%        ~ (p=0.237 n=7)
List/dqlite-tiny/all-4                     191.2m ±  1%    191.1m ±  0%        ~ (p=0.369 n=7)
List/dqlite-tiny/pagination-4               1.126 ±  3%     1.126 ±  0%        ~ (p=0.462 n=7)
List/dqlite-fits-in-page/all-4             163.1m ±  0%    163.2m ±  0%        ~ (p=0.343 n=7)
List/dqlite-fits-in-page/pagination-4      954.7m ±  3%    954.3m ±  3%        ~ (p=0.593 n=7)
List/dqlite-overflows-page/all-4           182.7m ±  0%    182.8m ±  0%        ~ (p=0.203 n=7)
List/dqlite-overflows-page/pagination-4     1.071 ±  3%     1.070 ±  3%   -0.09% (p=0.029 n=7)
Update/sqlite/1-workers-4                   16.18 ±  4%     16.17 ±  1%        ~ (p=0.686 n=7)
Update/sqlite/2-workers-4                   15.99 ±  2%     15.89 ±  2%        ~ (p=0.596 n=7)
Update/sqlite/4-workers-4                   15.41 ±  5%     15.59 ±  3%        ~ (p=0.383 n=7)
Update/sqlite/8-workers-4                   15.38 ±  3%     15.54 ±  4%        ~ (p=0.176 n=7)
Update/sqlite/16-workers-4                  14.72 ± 17%     14.37 ± 28%        ~ (p=0.104 n=7)
Update/dqlite/1-workers-4                   15.28 ±  2%     15.13 ±  1%   -0.98% (p=0.049 n=7)
Update/dqlite/2-workers-4                   12.84 ±  1%     12.75 ±  1%   -0.70% (p=0.029 n=7)
Update/dqlite/4-workers-4                   12.77 ±  1%     12.69 ±  1%   -0.63% (p=0.016 n=7)
Update/dqlite/8-workers-4                   12.84 ±  1%     12.55 ±  0%   -2.26% (p=0.001 n=7)
Update/dqlite/16-workers-4                  12.78 ±  1%     12.63 ±  1%   -1.17% (p=0.008 n=7)
geomean                                     5.892           5.656         -4.00%

                                        │     Before     │                 After                  │
                                        │ page-writes/op │ page-writes/op  vs base                │
Compaction/sqlite-4                        207.8m ± 0%       207.8m ±  0%       ~ (p=0.943 n=7)
Compaction/dqlite-4                        187.9m ± 1%       187.5m ±  1%       ~ (p=0.403 n=7)
Create/sqlite/1-workers-4                   5.120 ± 0%        5.108 ±  0%  -0.23% (p=0.020 n=7)
Create/sqlite/2-workers-4                   5.128 ± 0%        5.124 ±  1%       ~ (p=0.935 n=7)
Create/sqlite/4-workers-4                   5.098 ± 0%        5.098 ±  1%       ~ (p=0.508 n=7)
Create/sqlite/8-workers-4                   5.086 ± 1%        5.098 ±  1%       ~ (p=0.620 n=7)
Create/sqlite/16-workers-4                  5.053 ± 1%        5.047 ±  1%       ~ (p=0.557 n=7)
Create/dqlite/1-workers-4                   4.183 ± 1%        4.179 ±  1%       ~ (p=0.334 n=7)
Create/dqlite/2-workers-4                   4.282 ± 1%        4.243 ±  3%       ~ (p=0.272 n=7)
Create/dqlite/4-workers-4                   4.246 ± 1%        4.251 ±  2%       ~ (p=0.775 n=7)
Create/dqlite/8-workers-4                   4.243 ± 3%        4.268 ±  2%       ~ (p=0.559 n=7)
Create/dqlite/16-workers-4                  4.247 ± 1%        4.243 ±  1%       ~ (p=0.105 n=7)
Delete/sqlite/1-workers-4                   5.335 ± 1%        5.306 ±  1%  -0.54% (p=0.003 n=7)
Delete/sqlite/2-workers-4                   5.312 ± 1%        5.282 ±  1%       ~ (p=0.165 n=7)
Delete/sqlite/4-workers-4                   5.298 ± 1%        5.284 ±  2%       ~ (p=0.931 n=7)
Delete/sqlite/8-workers-4                   5.330 ± 2%        5.221 ±  2%  -2.05% (p=0.011 n=7)
Delete/sqlite/16-workers-4                  5.354 ± 1%        5.327 ±  2%       ~ (p=0.402 n=7)
Delete/dqlite/1-workers-4                   4.400 ± 0%        4.345 ±  1%  -1.25% (p=0.001 n=7)
Delete/dqlite/2-workers-4                   4.379 ± 1%        4.372 ±  1%       ~ (p=0.510 n=7)
Delete/dqlite/4-workers-4                   4.386 ± 1%        4.377 ±  1%       ~ (p=0.244 n=7)
Delete/dqlite/8-workers-4                   4.387 ± 1%        4.361 ±  1%       ~ (p=0.079 n=7)
Delete/dqlite/16-workers-4                  4.370 ± 1%        4.356 ±  0%       ~ (p=0.097 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                   5.175 ± 0%        5.178 ±  0%       ~ (p=0.645 n=7)
Update/sqlite/2-workers-4                   5.186 ± 1%        5.187 ±  1%       ~ (p=0.966 n=7)
Update/sqlite/4-workers-4                   5.195 ± 2%        5.198 ±  2%       ~ (p=0.874 n=7)
Update/sqlite/8-workers-4                   5.207 ± 1%        5.203 ±  2%       ~ (p=0.557 n=7)
Update/sqlite/16-workers-4                  5.236 ± 2%        5.198 ± 14%       ~ (p=0.710 n=7)
Update/dqlite/1-workers-4                   4.203 ± 1%        4.205 ±  0%       ~ (p=0.830 n=7)
Update/dqlite/2-workers-4                   4.238 ± 0%        4.241 ±  0%       ~ (p=0.778 n=7)
Update/dqlite/4-workers-4                   4.199 ± 1%        4.202 ±  1%       ~ (p=0.710 n=7)
Update/dqlite/8-workers-4                   4.213 ± 1%        4.211 ±  1%       ~ (p=0.620 n=7)
Update/dqlite/16-workers-4                  4.239 ± 1%        4.243 ±  1%       ~ (p=0.619 n=7)
geomean                                                ²                   -0.17%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │      Before      │                 After                  │
                                        │  sec-reading/op  │ sec-reading/op  vs base                │
Compaction/sqlite-4                         123.9µ ±   21%    117.7µ ±   7%    -5.00% (p=0.026 n=7)
Compaction/dqlite-4                         17.30µ ±  125%    20.90µ ± 108%         ~ (p=0.435 n=7)
Create/sqlite/1-workers-4                   41.40µ ±  146%    46.70µ ± 444%         ~ (p=0.259 n=7)
Create/sqlite/2-workers-4                   52.20µ ±   90%    34.00µ ±  31%         ~ (p=0.073 n=7)
Create/sqlite/4-workers-4                   40.80µ ±  706%    39.40µ ± 340%         ~ (p=0.902 n=7)
Create/sqlite/8-workers-4                   38.60µ ±   38%   178.30µ ± 434%  +361.92% (p=0.026 n=7)
Create/sqlite/16-workers-4                  41.70µ ± 1681%    42.10µ ± 197%         ~ (p=0.620 n=7)
Create/dqlite/1-workers-4                   11.90µ ±   59%    10.30µ ±  30%         ~ (p=0.710 n=7)
Create/dqlite/2-workers-4                   11.50µ ±   42%    11.60µ ±  34%         ~ (p=0.692 n=7)
Create/dqlite/4-workers-4                   11.80µ ±   36%    11.80µ ±  47%         ~ (p=0.643 n=7)
Create/dqlite/8-workers-4                   8.400µ ±   83%    9.500µ ±  52%         ~ (p=0.259 n=7)
Create/dqlite/16-workers-4                  9.600µ ±   50%   10.800µ ±  35%         ~ (p=0.318 n=7)
Delete/sqlite/1-workers-4                   200.8µ ±  293%    423.3µ ±  98%         ~ (p=0.456 n=7)
Delete/sqlite/2-workers-4                   831.1µ ±   72%    336.8µ ± 153%   -59.48% (p=0.011 n=7)
Delete/sqlite/4-workers-4                  2532.0µ ±   74%    280.4µ ± 223%   -88.93% (p=0.001 n=7)
Delete/sqlite/8-workers-4                  3977.0µ ±   45%    278.7µ ± 235%   -92.99% (p=0.001 n=7)
Delete/sqlite/16-workers-4                10200.0µ ±   30%    506.8µ ± 402%   -95.03% (p=0.001 n=7)
Delete/dqlite/1-workers-4                   53.60µ ±   20%    14.20µ ±  27%   -73.51% (p=0.001 n=7)
Delete/dqlite/2-workers-4                   53.40µ ±   24%    19.20µ ±  16%   -64.04% (p=0.001 n=7)
Delete/dqlite/4-workers-4                   60.00µ ±   23%    16.20µ ±  22%   -73.00% (p=0.001 n=7)
Delete/dqlite/8-workers-4                   53.40µ ±   30%    17.10µ ±  32%   -67.98% (p=0.001 n=7)
Delete/dqlite/16-workers-4                  54.80µ ±   22%    16.80µ ±  24%   -69.34% (p=0.001 n=7)
Get/sqlite-4                                83.90µ ±    6%    80.60µ ±   7%         ~ (p=0.138 n=7)
Get/dqlite-4                                33.20µ ±   11%    31.00µ ±  17%         ~ (p=0.209 n=7)
List/sqlite-tiny/all-4                      14.30µ ±    3%    14.10µ ±   2%    -1.40% (p=0.013 n=7)
List/sqlite-tiny/pagination-4               18.90µ ±    3%    19.30µ ±   4%         ~ (p=0.198 n=7)
List/sqlite-fits-in-page/all-4              17.20µ ±   12%    16.60µ ±  13%         ~ (p=0.684 n=7)
List/sqlite-fits-in-page/pagination-4       58.90µ ±    5%    58.60µ ±   2%         ~ (p=0.833 n=7)
List/sqlite-overflows-page/all-4            54.70µ ±   20%    58.80µ ±  16%         ~ (p=0.902 n=7)
List/sqlite-overflows-page/pagination-4     167.2µ ±    2%    165.9µ ±   3%         ~ (p=0.973 n=7)
List/dqlite-tiny/all-4                      4.000µ ±   17%    4.000µ ±  20%         ~ (p=0.775 n=7)
List/dqlite-tiny/pagination-4               9.400µ ±    4%    9.200µ ±  10%         ~ (p=0.603 n=7)
List/dqlite-fits-in-page/all-4              9.900µ ±   20%   10.100µ ±  17%         ~ (p=0.076 n=7)
List/dqlite-fits-in-page/pagination-4       26.70µ ±   11%    25.50µ ±  12%         ~ (p=0.318 n=7)
List/dqlite-overflows-page/all-4            30.40µ ±    8%    30.20µ ±   2%         ~ (p=0.972 n=7)
List/dqlite-overflows-page/pagination-4     66.70µ ±   14%    58.70µ ±   5%   -11.99% (p=0.015 n=7)
Update/sqlite/1-workers-4                   43.60µ ±  703%    38.00µ ± 269%         ~ (p=0.383 n=7)
Update/sqlite/2-workers-4                   41.30µ ±  186%    33.70µ ± 358%         ~ (p=0.165 n=7)
Update/sqlite/4-workers-4                   37.10µ ±  727%    38.90µ ± 299%         ~ (p=0.435 n=7)
Update/sqlite/8-workers-4                   38.90µ ±  111%    45.80µ ±  50%         ~ (p=1.000 n=7)
Update/sqlite/16-workers-4                  49.10µ ± 3491%    73.10µ ± 152%         ~ (p=0.710 n=7)
Update/dqlite/1-workers-4                   11.30µ ±   43%    11.00µ ±  45%         ~ (p=0.927 n=7)
Update/dqlite/2-workers-4                   9.600µ ±   12%   11.000µ ±  27%         ~ (p=0.079 n=7)
Update/dqlite/4-workers-4                   9.500µ ±   41%   12.900µ ±  23%   +35.79% (p=0.019 n=7)
Update/dqlite/8-workers-4                   9.300µ ±   68%   11.200µ ±  38%         ~ (p=1.000 n=7)
Update/dqlite/16-workers-4                 12.600µ ±   34%    9.200µ ±  54%         ~ (p=0.135 n=7)
geomean                                     42.42µ            32.49µ          -23.41%

                                        │     Before     │                  After                  │
                                        │ sec-writing/op │ sec-writing/op  vs base                 │
Compaction/sqlite-4                       9.800µ ±  9%      9.400µ ±   9%        ~ (p=0.549 n=7)
Compaction/dqlite-4                       7.400µ ± 15%      6.700µ ±  13%        ~ (p=0.219 n=7)
Create/sqlite/1-workers-4                 1.066m ±  6%      1.145m ±  15%   +7.41% (p=0.001 n=7)
Create/sqlite/2-workers-4                 2.008m ± 22%      1.920m ±  26%        ~ (p=0.805 n=7)
Create/sqlite/4-workers-4                 3.846m ± 34%      4.187m ±  19%        ~ (p=1.000 n=7)
Create/sqlite/8-workers-4                 7.214m ± 20%      7.477m ±  17%        ~ (p=0.837 n=7)
Create/sqlite/16-workers-4                15.27m ± 27%      15.31m ±  27%        ~ (p=1.000 n=7)
Create/dqlite/1-workers-4                 38.30µ ± 35%      43.40µ ±  39%        ~ (p=0.383 n=7)
Create/dqlite/2-workers-4                 40.00µ ± 14%      45.80µ ±  26%        ~ (p=0.059 n=7)
Create/dqlite/4-workers-4                 42.20µ ± 31%      37.80µ ±  43%        ~ (p=0.209 n=7)
Create/dqlite/8-workers-4                 39.00µ ± 29%      40.40µ ±  18%        ~ (p=0.512 n=7)
Create/dqlite/16-workers-4                37.60µ ± 31%      41.50µ ±  23%        ~ (p=0.596 n=7)
Delete/sqlite/1-workers-4                 1.146m ± 20%      1.182m ±   9%        ~ (p=0.137 n=7)
Delete/sqlite/2-workers-4                 2.096m ± 24%      2.145m ±  11%        ~ (p=0.710 n=7)
Delete/sqlite/4-workers-4                 3.852m ± 26%      4.172m ±  17%        ~ (p=0.318 n=7)
Delete/sqlite/8-workers-4                 6.173m ± 39%      7.132m ±  37%        ~ (p=0.165 n=7)
Delete/sqlite/16-workers-4                13.34m ± 51%      16.14m ±  23%        ~ (p=0.383 n=7)
Delete/dqlite/1-workers-4                 23.80µ ± 35%      47.30µ ±  15%  +98.74% (p=0.001 n=7)
Delete/dqlite/2-workers-4                 30.80µ ± 11%      53.30µ ±  29%  +73.05% (p=0.001 n=7)
Delete/dqlite/4-workers-4                 29.60µ ± 27%      39.00µ ±  33%  +31.76% (p=0.038 n=7)
Delete/dqlite/8-workers-4                 28.10µ ± 41%      34.30µ ±  40%        ~ (p=0.120 n=7)
Delete/dqlite/16-workers-4                31.00µ ± 17%      42.50µ ±  27%  +37.10% (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                 1.077m ±  5%      1.043m ±   6%        ~ (p=0.165 n=7)
Update/sqlite/2-workers-4                 1.992m ±  8%      1.965m ±  19%        ~ (p=0.535 n=7)
Update/sqlite/4-workers-4                 4.120m ± 27%      3.899m ±  24%        ~ (p=0.710 n=7)
Update/sqlite/8-workers-4                 7.584m ± 15%      7.157m ±  15%        ~ (p=0.710 n=7)
Update/sqlite/16-workers-4                16.61m ± 23%      16.80m ± 572%        ~ (p=0.594 n=7)
Update/dqlite/1-workers-4                 36.70µ ± 31%      40.60µ ±  27%        ~ (p=1.000 n=7)
Update/dqlite/2-workers-4                 43.70µ ± 27%      39.60µ ±  26%        ~ (p=0.710 n=7)
Update/dqlite/4-workers-4                 41.20µ ± 39%      38.90µ ±  23%        ~ (p=0.456 n=7)
Update/dqlite/8-workers-4                 42.20µ ±  5%      38.50µ ±  27%        ~ (p=0.273 n=7)
Update/dqlite/16-workers-4                44.40µ ± 12%      39.50µ ±  20%        ~ (p=0.079 n=7)
geomean                                                ²                    +5.30%               ²
¹ all samples are equal
² summaries must be >0 to compute geomean

                                        │     Before     │                 After                 │
                                        │      B/op      │      B/op       vs base               │
Compaction/sqlite-4                         906.0 ±  33%     567.0 ±  52%  -37.42% (p=0.038 n=7)
Compaction/dqlite-4                       2.536Ki ± 214%   3.330Ki ± 165%        ~ (p=0.535 n=7)
Create/sqlite/1-workers-4                 21.38Ki ±   1%   20.82Ki ±   3%   -2.62% (p=0.001 n=7)
Create/sqlite/2-workers-4                 21.37Ki ±   0%   20.82Ki ±   0%   -2.57% (p=0.001 n=7)
Create/sqlite/4-workers-4                 21.43Ki ±   1%   20.82Ki ±   0%   -2.83% (p=0.001 n=7)
Create/sqlite/8-workers-4                 21.42Ki ±   1%   20.73Ki ±   3%   -3.24% (p=0.001 n=7)
Create/sqlite/16-workers-4                21.46Ki ±   4%   20.88Ki ±  13%   -2.67% (p=0.017 n=7)
Create/dqlite/1-workers-4                 20.08Ki ±   0%   19.52Ki ±   0%   -2.82% (p=0.001 n=7)
Create/dqlite/2-workers-4                 20.05Ki ±   0%   19.49Ki ±   0%   -2.80% (p=0.001 n=7)
Create/dqlite/4-workers-4                 20.06Ki ±   0%   19.49Ki ±   0%   -2.87% (p=0.001 n=7)
Create/dqlite/8-workers-4                 20.06Ki ±   0%   19.49Ki ±   0%   -2.87% (p=0.001 n=7)
Create/dqlite/16-workers-4                20.06Ki ±   0%   19.50Ki ±   0%   -2.80% (p=0.001 n=7)
Delete/sqlite/1-workers-4                 32.85Ki ±   4%   22.61Ki ±  15%  -31.18% (p=0.001 n=7)
Delete/sqlite/2-workers-4                 32.37Ki ±   5%   22.84Ki ±   4%  -29.43% (p=0.001 n=7)
Delete/sqlite/4-workers-4                 32.62Ki ±   8%   22.96Ki ±  20%  -29.60% (p=0.001 n=7)
Delete/sqlite/8-workers-4                 32.89Ki ±   5%   23.05Ki ±   7%  -29.93% (p=0.001 n=7)
Delete/sqlite/16-workers-4                32.98Ki ±   4%   22.43Ki ±   8%  -32.00% (p=0.001 n=7)
Delete/dqlite/1-workers-4                 29.78Ki ±   0%   21.78Ki ±   0%  -26.87% (p=0.001 n=7)
Delete/dqlite/2-workers-4                 64.77Ki ±   2%   21.75Ki ±   0%  -66.42% (p=0.001 n=7)
Delete/dqlite/4-workers-4                 80.63Ki ±   3%   21.75Ki ±   0%  -73.02% (p=0.001 n=7)
Delete/dqlite/8-workers-4                 82.33Ki ±   1%   21.76Ki ±   0%  -73.57% (p=0.001 n=7)
Delete/dqlite/16-workers-4                83.24Ki ±   2%   21.76Ki ±   0%  -73.86% (p=0.001 n=7)
Get/sqlite-4                              25.08Ki ±   0%   25.08Ki ±   0%        ~ (p=0.601 n=7)
Get/dqlite-4                              22.88Ki ±   0%   22.88Ki ±   0%        ~ (p=0.445 n=7)
List/sqlite-tiny/all-4                    1.253Ki ±   3%   1.251Ki ±   2%        ~ (p=0.365 n=7)
List/sqlite-tiny/pagination-4             1.791Ki ±   3%   1.799Ki ±   3%        ~ (p=0.620 n=7)
List/sqlite-fits-in-page/all-4            5.143Ki ±   3%   5.059Ki ±   1%        ~ (p=0.128 n=7)
List/sqlite-fits-in-page/pagination-4     10.21Ki ±   1%   10.24Ki ±   1%        ~ (p=0.073 n=7)
List/sqlite-overflows-page/all-4          26.60Ki ±   4%   26.71Ki ±   8%        ~ (p=0.805 n=7)
List/sqlite-overflows-page/pagination-4   46.10Ki ±   0%   46.17Ki ±   0%        ~ (p=0.076 n=7)
List/dqlite-tiny/all-4                      872.0 ±   8%     869.0 ±   5%        ~ (p=0.456 n=7)
List/dqlite-tiny/pagination-4               848.0 ±   3%     844.0 ±   1%        ~ (p=0.277 n=7)
List/dqlite-fits-in-page/all-4            4.263Ki ±   2%   4.320Ki ±   2%        ~ (p=0.209 n=7)
List/dqlite-fits-in-page/pagination-4     4.437Ki ±   4%   4.300Ki ±   6%        ~ (p=0.478 n=7)
List/dqlite-overflows-page/all-4          21.06Ki ±   2%   21.19Ki ±   1%        ~ (p=0.165 n=7)
List/dqlite-overflows-page/pagination-4   22.67Ki ±   7%   22.13Ki ±   3%        ~ (p=0.165 n=7)
Update/sqlite/1-workers-4                 22.59Ki ±   4%   22.59Ki ±   1%        ~ (p=0.401 n=7)
Update/sqlite/2-workers-4                 22.63Ki ±   1%   22.63Ki ±   0%        ~ (p=0.931 n=7)
Update/sqlite/4-workers-4                 22.62Ki ±   3%   22.66Ki ±   1%        ~ (p=0.874 n=7)
Update/sqlite/8-workers-4                 22.73Ki ±   0%   22.76Ki ±   1%        ~ (p=0.301 n=7)
Update/sqlite/16-workers-4                23.01Ki ±  12%   22.88Ki ±  29%        ~ (p=0.734 n=7)
Update/dqlite/1-workers-4                 21.23Ki ±   0%   21.22Ki ±   0%        ~ (p=0.776 n=7)
Update/dqlite/2-workers-4                 21.20Ki ±   0%   21.20Ki ±   0%        ~ (p=0.782 n=7)
Update/dqlite/4-workers-4                 21.24Ki ±   0%   21.22Ki ±   0%        ~ (p=0.383 n=7)
Update/dqlite/8-workers-4                 21.28Ki ±   0%   21.24Ki ±   0%        ~ (p=0.399 n=7)
Update/dqlite/16-workers-4                21.34Ki ±   1%   21.34Ki ±   1%        ~ (p=0.874 n=7)
geomean                                   15.90Ki          13.44Ki         -15.48%

                                        │    Before    │                 After                 │
                                        │  allocs/op   │  allocs/op    vs base                 │
Compaction/sqlite-4                       35.00 ±  37%   20.00 ±  65%  -42.86% (p=0.027 n=7)
Compaction/dqlite-4                       60.00 ± 222%   80.00 ± 167%        ~ (p=0.477 n=7)
Create/sqlite/1-workers-4                 455.0 ±   1%   446.0 ±   4%   -1.98% (p=0.001 n=7)
Create/sqlite/2-workers-4                 455.0 ±   1%   446.0 ±   0%   -1.98% (p=0.001 n=7)
Create/sqlite/4-workers-4                 455.0 ±   1%   446.0 ±   1%   -1.98% (p=0.001 n=7)
Create/sqlite/8-workers-4                 455.0 ±   1%   443.0 ±   4%   -2.64% (p=0.001 n=7)
Create/sqlite/16-workers-4                455.0 ±   7%   446.0 ±  19%   -1.98% (p=0.040 n=7)
Create/dqlite/1-workers-4                 372.0 ±   0%   363.0 ±   0%   -2.42% (p=0.001 n=7)
Create/dqlite/2-workers-4                 372.0 ±   0%   363.0 ±   0%   -2.42% (p=0.001 n=7)
Create/dqlite/4-workers-4                 372.0 ±   0%   363.0 ±   0%   -2.42% (p=0.001 n=7)
Create/dqlite/8-workers-4                 371.0 ±   0%   363.0 ±   0%   -2.16% (p=0.001 n=7)
Create/dqlite/16-workers-4                372.0 ±   0%   363.0 ±   0%   -2.42% (p=0.001 n=7)
Delete/sqlite/1-workers-4                 735.0 ±   6%   488.0 ±  23%  -33.61% (p=0.001 n=7)
Delete/sqlite/2-workers-4                 719.0 ±   7%   494.0 ±   6%  -31.29% (p=0.001 n=7)
Delete/sqlite/4-workers-4                 726.0 ±  10%   497.0 ±  33%  -31.54% (p=0.001 n=7)
Delete/sqlite/8-workers-4                 732.0 ±   7%   497.0 ±   9%  -32.10% (p=0.001 n=7)
Delete/sqlite/16-workers-4                731.0 ±   5%   476.0 ±  12%  -34.88% (p=0.001 n=7)
Delete/dqlite/1-workers-4                 520.0 ±   0%   393.0 ±   0%  -24.42% (p=0.001 n=7)
Delete/dqlite/2-workers-4                 564.0 ±   0%   393.0 ±   0%  -30.32% (p=0.001 n=7)
Delete/dqlite/4-workers-4                 581.0 ±   1%   393.0 ±   0%  -32.36% (p=0.001 n=7)
Delete/dqlite/8-workers-4                 571.0 ±   1%   393.0 ±   0%  -31.17% (p=0.001 n=7)
Delete/dqlite/16-workers-4                571.0 ±   0%   393.0 ±   0%  -31.17% (p=0.001 n=7)
Get/sqlite-4                              563.0 ±   0%   563.0 ±   0%        ~ (p=1.000 n=7) ¹
Get/dqlite-4                              407.0 ±   0%   407.0 ±   0%        ~ (p=1.000 n=7) ¹
List/sqlite-tiny/all-4                    41.00 ±   2%   41.00 ±   2%        ~ (p=0.396 n=7)
List/sqlite-tiny/pagination-4             62.00 ±   2%   62.00 ±   3%        ~ (p=0.858 n=7)
List/sqlite-fits-in-page/all-4            47.00 ±   4%   46.00 ±   2%        ~ (p=0.061 n=7)
List/sqlite-fits-in-page/pagination-4     93.00 ±   2%   93.00 ±   0%        ~ (p=1.000 n=7)
List/sqlite-overflows-page/all-4          57.00 ±   5%   57.00 ±   7%        ~ (p=1.000 n=7)
List/sqlite-overflows-page/pagination-4   93.00 ±   0%   93.00 ±   0%        ~ (p=1.000 n=7) ¹
List/dqlite-tiny/all-4                    14.00 ±  14%   14.00 ±   7%        ~ (p=1.000 n=7)
List/dqlite-tiny/pagination-4             13.00 ±   0%   13.00 ±   0%        ~ (p=1.000 n=7) ¹
List/dqlite-fits-in-page/all-4            18.00 ±   6%   18.00 ±   6%        ~ (p=0.559 n=7)
List/dqlite-fits-in-page/pagination-4     18.00 ±   6%   17.00 ±  12%        ~ (p=0.650 n=7)
List/dqlite-overflows-page/all-4          29.00 ±   3%   29.00 ±   3%        ~ (p=1.000 n=7)
List/dqlite-overflows-page/pagination-4   32.00 ±   9%   31.00 ±   3%        ~ (p=0.207 n=7)
Update/sqlite/1-workers-4                 462.0 ±   6%   462.0 ±   2%        ~ (p=0.878 n=7)
Update/sqlite/2-workers-4                 462.0 ±   2%   462.0 ±   0%        ~ (p=0.755 n=7)
Update/sqlite/4-workers-4                 462.0 ±   5%   463.0 ±   2%        ~ (p=0.528 n=7)
Update/sqlite/8-workers-4                 463.0 ±   0%   464.0 ±   1%        ~ (p=0.377 n=7)
Update/sqlite/16-workers-4                469.0 ±  19%   463.0 ±  22%        ~ (p=0.642 n=7)
Update/dqlite/1-workers-4                 375.0 ±   0%   375.0 ±   0%        ~ (p=1.000 n=7) ¹
Update/dqlite/2-workers-4                 375.0 ±   0%   375.0 ±   0%        ~ (p=1.000 n=7) ¹
Update/dqlite/4-workers-4                 376.0 ±   0%   376.0 ±   0%        ~ (p=1.000 n=7)
Update/dqlite/8-workers-4                 376.0 ±   0%   376.0 ±   0%        ~ (p=0.767 n=7)
Update/dqlite/16-workers-4                378.0 ±   1%   377.0 ±   1%        ~ (p=0.963 n=7)
geomean                                   218.3          198.5          -9.08%
¹ all samples are equal

                                        │        Before         │                    After                     │
                                        │ network-bytes-read/op │ network-bytes-read/op  vs base               │
Compaction/dqlite-4                                929.0 ± 222%           1226.0 ± 171%        ~ (p=0.535 n=7)
Create/dqlite/1-workers-4                          240.2 ±   0%            240.2 ±   0%        ~ (p=0.617 n=7)
Create/dqlite/2-workers-4                          241.4 ±   0%            241.0 ±   1%        ~ (p=0.472 n=7)
Create/dqlite/4-workers-4                          241.2 ±   0%            241.4 ±   0%        ~ (p=0.463 n=7)
Create/dqlite/8-workers-4                          240.9 ±   1%            241.3 ±   0%        ~ (p=0.219 n=7)
Create/dqlite/16-workers-4                         241.2 ±   0%            240.9 ±   0%        ~ (p=0.102 n=7)
Delete/dqlite/1-workers-4                         1186.0 ±   0%            716.1 ±   0%  -39.62% (p=0.001 n=7)
Delete/dqlite/2-workers-4                         1290.0 ±   0%            717.5 ±   0%  -44.38% (p=0.001 n=7)
Delete/dqlite/4-workers-4                         1328.0 ±   1%            718.3 ±   0%  -45.91% (p=0.001 n=7)
Delete/dqlite/8-workers-4                         1326.0 ±   0%            717.9 ±   0%  -45.86% (p=0.001 n=7)
Delete/dqlite/16-workers-4                        1322.0 ±   1%            717.1 ±   0%  -45.76% (p=0.001 n=7)
Get/dqlite-4                                     1.132Ki ±   0%          1.133Ki ±   0%        ~ (p=0.429 n=7)
List/dqlite-tiny/all-4                             204.0 ±  13%            201.3 ±   8%        ~ (p=0.533 n=7)
List/dqlite-tiny/pagination-4                      192.5 ±   3%            191.2 ±   2%        ~ (p=0.383 n=7)
List/dqlite-fits-in-page/all-4                   1.215Ki ±   4%          1.240Ki ±   2%        ~ (p=0.209 n=7)
List/dqlite-fits-in-page/pagination-4            1.268Ki ±   6%          1.201Ki ±  10%        ~ (p=0.318 n=7)
List/dqlite-overflows-page/all-4                 6.153Ki ±   3%          6.218Ki ±   2%        ~ (p=0.154 n=7)
List/dqlite-overflows-page/pagination-4          6.807Ki ±  11%          6.562Ki ±   4%        ~ (p=0.128 n=7)
Update/dqlite/1-workers-4                          262.8 ±   0%            262.7 ±   0%        ~ (p=0.213 n=7)
Update/dqlite/2-workers-4                          262.8 ±   0%            262.8 ±   0%        ~ (p=0.308 n=7)
Update/dqlite/4-workers-4                          263.1 ±   0%            263.2 ±   0%        ~ (p=0.357 n=7)
Update/dqlite/8-workers-4                          263.6 ±   0%            263.3 ±   0%        ~ (p=0.360 n=7)
Update/dqlite/16-workers-4                         264.4 ±   1%            264.0 ±   1%        ~ (p=0.688 n=7)
geomean                                            608.7                   540.4         -11.21%

                                        │          Before          │                      After                      │
                                        │ network-bytes-written/op │ network-bytes-written/op  vs base               │
Compaction/dqlite-4                                    4.961 ± 18%                4.254 ± 20%        ~ (p=0.805 n=7)
Create/dqlite/1-workers-4                              113.8 ±  1%                113.6 ±  1%        ~ (p=0.513 n=7)
Create/dqlite/2-workers-4                              115.9 ±  1%                115.4 ±  3%        ~ (p=0.439 n=7)
Create/dqlite/4-workers-4                              115.4 ±  1%                115.7 ±  2%        ~ (p=0.476 n=7)
Create/dqlite/8-workers-4                              114.9 ±  2%                115.7 ±  2%        ~ (p=0.172 n=7)
Create/dqlite/16-workers-4                             115.6 ±  1%                115.0 ±  2%        ~ (p=0.104 n=7)
Delete/dqlite/1-workers-4                             423.90 ±  0%                81.68 ±  1%  -80.73% (p=0.001 n=7)
Delete/dqlite/2-workers-4                             806.50 ±  2%                82.14 ±  0%  -89.82% (p=0.001 n=7)
Delete/dqlite/4-workers-4                             957.70 ±  3%                82.44 ±  1%  -91.39% (p=0.001 n=7)
Delete/dqlite/8-workers-4                            1002.00 ±  1%                82.34 ±  1%  -91.78% (p=0.001 n=7)
Delete/dqlite/16-workers-4                            994.70 ±  1%                82.04 ±  1%  -91.75% (p=0.001 n=7)
Get/dqlite-4                                           80.50 ±  0%                80.50 ±  0%        ~ (p=0.290 n=7)
List/dqlite-tiny/all-4                               0.04343 ± 25%              0.04220 ± 16%        ~ (p=0.383 n=7)
List/dqlite-tiny/pagination-4                        0.04625 ±  7%              0.04644 ±  5%        ~ (p=0.710 n=7)
List/dqlite-fits-in-page/all-4                       0.05137 ±  6%              0.05319 ±  4%        ~ (p=0.209 n=7)
List/dqlite-fits-in-page/pagination-4                0.07520 ± 10%              0.07543 ± 11%        ~ (p=1.000 n=7)
List/dqlite-overflows-page/all-4                     0.06274 ±  4%              0.06445 ±  3%        ~ (p=0.097 n=7)
List/dqlite-overflows-page/pagination-4               0.1172 ± 11%               0.1075 ± 19%        ~ (p=0.598 n=7)
Update/dqlite/1-workers-4                              136.7 ±  0%                136.8 ±  0%        ~ (p=0.410 n=7)
Update/dqlite/2-workers-4                              136.6 ±  0%                136.6 ±  0%        ~ (p=0.604 n=7)
Update/dqlite/4-workers-4                              136.8 ±  0%                136.7 ±  0%        ~ (p=0.898 n=7)
Update/dqlite/8-workers-4                              137.0 ±  0%                136.8 ±  0%        ~ (p=0.088 n=7)
Update/dqlite/16-workers-4                             137.4 ±  1%                137.2 ±  1%        ~ (p=0.826 n=7)
geomean                                                21.96                      13.27        -39.56%
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                       41.13µ ±   3%
Compaction/dqlite-4                       44.82µ ±  15%
Create/sqlite/1-workers-4                 1.406m ±  13%
Create/sqlite/2-workers-4                 1.386m ±  16%
Create/sqlite/4-workers-4                 1.460m ±  11%
Create/sqlite/8-workers-4                 1.475m ±  12%
Create/sqlite/16-workers-4                1.912m ±  26%
Create/dqlite/1-workers-4                 1.142m ±   7%
Create/dqlite/2-workers-4                 1.011m ±   4%
Create/dqlite/4-workers-4                 1.000m ±   2%
Create/dqlite/8-workers-4                 997.6µ ±   2%
Create/dqlite/16-workers-4                1.042m ±  25%
Delete/sqlite/1-workers-4                 1.434m ±   8%
Delete/sqlite/2-workers-4                 1.511m ±   7%
Delete/sqlite/4-workers-4                 1.525m ±  10%
Delete/sqlite/8-workers-4                 1.622m ±  11%
Delete/sqlite/16-workers-4                2.312m ±  32%
Delete/dqlite/1-workers-4                 1.150m ±   5%
Delete/dqlite/2-workers-4                 1.027m ±   3%
Delete/dqlite/4-workers-4                 1.042m ±   7%
Delete/dqlite/8-workers-4                 1.015m ±  11%
Delete/dqlite/16-workers-4                1.082m ±   7%
Get/sqlite-4                              261.6µ ±   0%
Get/dqlite-4                              355.3µ ±   2%
List/sqlite-tiny/all-4                    4.432µ ±   3%
List/sqlite-tiny/pagination-4             8.793µ ±   1%
List/sqlite-fits-in-page/all-4            7.240µ ±   4%
List/sqlite-fits-in-page/pagination-4     21.22µ ±   6%
List/sqlite-overflows-page/all-4          16.81µ ±  10%
List/sqlite-overflows-page/pagination-4   44.28µ ±   4%
List/dqlite-tiny/all-4                    2.769µ ±   6%
List/dqlite-tiny/pagination-4             5.830µ ±   2%
List/dqlite-fits-in-page/all-4            5.908µ ±   6%
List/dqlite-fits-in-page/pagination-4     15.75µ ±   2%
List/dqlite-overflows-page/all-4          17.38µ ±   2%
List/dqlite-overflows-page/pagination-4   38.78µ ±   3%
Update/sqlite/1-workers-4                 1.316m ±   5%
Update/sqlite/2-workers-4                 1.417m ±   5%
Update/sqlite/4-workers-4                 1.485m ±  11%
Update/sqlite/8-workers-4                 1.614m ±  11%
Update/sqlite/16-workers-4                2.353m ± 718%
Update/dqlite/1-workers-4                 1.139m ±   3%
Update/dqlite/2-workers-4                 997.1µ ±   2%
Update/dqlite/4-workers-4                 991.3µ ±  13%
Update/dqlite/8-workers-4                 1.003m ±   3%
Update/dqlite/16-workers-4                1.019m ±   5%
geomean                                   303.5µ

                                        │        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/2-workers-4                         0.000 ± 0%
Create/sqlite/4-workers-4                         0.000 ± 0%
Create/sqlite/8-workers-4                         0.000 ± 0%
Create/sqlite/16-workers-4                        0.000 ± 0%
Create/dqlite/1-workers-4                         0.000 ± 0%
Create/dqlite/2-workers-4                         0.000 ± 0%
Create/dqlite/4-workers-4                         0.000 ± 0%
Create/dqlite/8-workers-4                         0.000 ± 0%
Create/dqlite/16-workers-4                        0.000 ± 0%
Delete/sqlite/1-workers-4                         0.000 ± 0%
Delete/sqlite/2-workers-4                         0.000 ± 0%
Delete/sqlite/4-workers-4                         0.000 ± 0%
Delete/sqlite/8-workers-4                         0.000 ± 0%
Delete/sqlite/16-workers-4                        0.000 ± 0%
Delete/dqlite/1-workers-4                         0.000 ± 0%
Delete/dqlite/2-workers-4                         0.000 ± 0%
Delete/dqlite/4-workers-4                         0.000 ± 0%
Delete/dqlite/8-workers-4                         0.000 ± 0%
Delete/dqlite/16-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/2-workers-4                         0.000 ± 0%
Update/sqlite/4-workers-4                         0.000 ± 0%
Update/sqlite/8-workers-4                         0.000 ± 0%
Update/sqlite/16-workers-4                        0.000 ± 0%
Update/dqlite/1-workers-4                         0.000 ± 0%
Update/dqlite/2-workers-4                         0.000 ± 0%
Update/dqlite/4-workers-4                         0.000 ± 0%
Update/dqlite/8-workers-4                         0.000 ± 0%
Update/dqlite/16-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/2-workers-4                         0.000 ± 0%
Create/sqlite/4-workers-4                         0.000 ± 0%
Create/sqlite/8-workers-4                         0.000 ± 0%
Create/sqlite/16-workers-4                        0.000 ± 0%
Create/dqlite/1-workers-4                         0.000 ± 0%
Create/dqlite/2-workers-4                         0.000 ± 0%
Create/dqlite/4-workers-4                         0.000 ± 0%
Create/dqlite/8-workers-4                         0.000 ± 0%
Create/dqlite/16-workers-4                        0.000 ± 0%
Delete/sqlite/1-workers-4                         0.000 ± 0%
Delete/sqlite/2-workers-4                         0.000 ± 0%
Delete/sqlite/4-workers-4                         0.000 ± 0%
Delete/sqlite/8-workers-4                         0.000 ± 0%
Delete/sqlite/16-workers-4                        0.000 ± 0%
Delete/dqlite/1-workers-4                         0.000 ± 0%
Delete/dqlite/2-workers-4                         0.000 ± 0%
Delete/dqlite/4-workers-4                         0.000 ± 0%
Delete/dqlite/8-workers-4                         0.000 ± 0%
Delete/dqlite/16-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/2-workers-4                         0.000 ± 0%
Update/sqlite/4-workers-4                         0.000 ± 0%
Update/sqlite/8-workers-4                         0.000 ± 0%
Update/sqlite/16-workers-4                        0.000 ± 0%
Update/dqlite/1-workers-4                         0.000 ± 0%
Update/dqlite/2-workers-4                         0.000 ± 0%
Update/dqlite/4-workers-4                         0.000 ± 0%
Update/dqlite/8-workers-4                         0.000 ± 0%
Update/dqlite/16-workers-4                        0.000 ± 0%
geomean                                                      ¹
¹ summaries must be >0 to compute geomean

                                        │     After     │
                                        │ page-reads/op │
Compaction/sqlite-4                         12.23 ±  2%
Compaction/dqlite-4                         12.34 ±  2%
Create/sqlite/1-workers-4                   13.90 ±  4%
Create/sqlite/2-workers-4                   13.86 ±  2%
Create/sqlite/4-workers-4                   13.48 ±  3%
Create/sqlite/8-workers-4                   12.93 ±  3%
Create/sqlite/16-workers-4                  12.20 ± 14%
Create/dqlite/1-workers-4                   12.96 ±  1%
Create/dqlite/2-workers-4                   10.73 ±  2%
Create/dqlite/4-workers-4                   10.75 ±  2%
Create/dqlite/8-workers-4                   10.79 ±  1%
Create/dqlite/16-workers-4                  10.72 ±  1%
Delete/sqlite/1-workers-4                   16.42 ± 14%
Delete/sqlite/2-workers-4                   16.45 ±  5%
Delete/sqlite/4-workers-4                   15.78 ± 12%
Delete/sqlite/8-workers-4                   15.59 ±  9%
Delete/sqlite/16-workers-4                  14.61 ± 13%
Delete/dqlite/1-workers-4                   15.31 ±  1%
Delete/dqlite/2-workers-4                   13.25 ±  0%
Delete/dqlite/4-workers-4                   13.22 ±  1%
Delete/dqlite/8-workers-4                   13.21 ±  1%
Delete/dqlite/16-workers-4                  13.23 ±  1%
Get/sqlite-4                                14.95 ±  0%
Get/dqlite-4                                11.96 ±  0%
List/sqlite-tiny/all-4                     192.2m ±  0%
List/sqlite-tiny/pagination-4               1.132 ±  0%
List/sqlite-fits-in-page/all-4             164.7m ±  0%
List/sqlite-fits-in-page/pagination-4      965.4m ±  3%
List/sqlite-overflows-page/all-4           290.7m ± 37%
List/sqlite-overflows-page/pagination-4     2.080 ±  0%
List/dqlite-tiny/all-4                     191.1m ±  0%
List/dqlite-tiny/pagination-4               1.126 ±  0%
List/dqlite-fits-in-page/all-4             163.2m ±  0%
List/dqlite-fits-in-page/pagination-4      954.3m ±  3%
List/dqlite-overflows-page/all-4           182.8m ±  0%
List/dqlite-overflows-page/pagination-4     1.070 ±  3%
Update/sqlite/1-workers-4                   16.17 ±  1%
Update/sqlite/2-workers-4                   15.89 ±  2%
Update/sqlite/4-workers-4                   15.59 ±  3%
Update/sqlite/8-workers-4                   15.54 ±  4%
Update/sqlite/16-workers-4                  14.37 ± 28%
Update/dqlite/1-workers-4                   15.13 ±  1%
Update/dqlite/2-workers-4                   12.75 ±  1%
Update/dqlite/4-workers-4                   12.69 ±  1%
Update/dqlite/8-workers-4                   12.55 ±  0%
Update/dqlite/16-workers-4                  12.63 ±  1%
geomean                                     5.656

                                        │     After      │
                                        │ page-writes/op │
Compaction/sqlite-4                       207.8m ±  0%
Compaction/dqlite-4                       187.5m ±  1%
Create/sqlite/1-workers-4                  5.108 ±  0%
Create/sqlite/2-workers-4                  5.124 ±  1%
Create/sqlite/4-workers-4                  5.098 ±  1%
Create/sqlite/8-workers-4                  5.098 ±  1%
Create/sqlite/16-workers-4                 5.047 ±  1%
Create/dqlite/1-workers-4                  4.179 ±  1%
Create/dqlite/2-workers-4                  4.243 ±  3%
Create/dqlite/4-workers-4                  4.251 ±  2%
Create/dqlite/8-workers-4                  4.268 ±  2%
Create/dqlite/16-workers-4                 4.243 ±  1%
Delete/sqlite/1-workers-4                  5.306 ±  1%
Delete/sqlite/2-workers-4                  5.282 ±  1%
Delete/sqlite/4-workers-4                  5.284 ±  2%
Delete/sqlite/8-workers-4                  5.221 ±  2%
Delete/sqlite/16-workers-4                 5.327 ±  2%
Delete/dqlite/1-workers-4                  4.345 ±  1%
Delete/dqlite/2-workers-4                  4.372 ±  1%
Delete/dqlite/4-workers-4                  4.377 ±  1%
Delete/dqlite/8-workers-4                  4.361 ±  1%
Delete/dqlite/16-workers-4                 4.356 ±  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                  5.178 ±  0%
Update/sqlite/2-workers-4                  5.187 ±  1%
Update/sqlite/4-workers-4                  5.198 ±  2%
Update/sqlite/8-workers-4                  5.203 ±  2%
Update/sqlite/16-workers-4                 5.198 ± 14%
Update/dqlite/1-workers-4                  4.205 ±  0%
Update/dqlite/2-workers-4                  4.241 ±  0%
Update/dqlite/4-workers-4                  4.202 ±  1%
Update/dqlite/8-workers-4                  4.211 ±  1%
Update/dqlite/16-workers-4                 4.243 ±  1%
geomean                                                ¹
¹ summaries must be >0 to compute geomean

                                        │     After      │
                                        │ sec-reading/op │
Compaction/sqlite-4                        117.7µ ±   7%
Compaction/dqlite-4                        20.90µ ± 108%
Create/sqlite/1-workers-4                  46.70µ ± 444%
Create/sqlite/2-workers-4                  34.00µ ±  31%
Create/sqlite/4-workers-4                  39.40µ ± 340%
Create/sqlite/8-workers-4                  178.3µ ± 434%
Create/sqlite/16-workers-4                 42.10µ ± 197%
Create/dqlite/1-workers-4                  10.30µ ±  30%
Create/dqlite/2-workers-4                  11.60µ ±  34%
Create/dqlite/4-workers-4                  11.80µ ±  47%
Create/dqlite/8-workers-4                  9.500µ ±  52%
Create/dqlite/16-workers-4                 10.80µ ±  35%
Delete/sqlite/1-workers-4                  423.3µ ±  98%
Delete/sqlite/2-workers-4                  336.8µ ± 153%
Delete/sqlite/4-workers-4                  280.4µ ± 223%
Delete/sqlite/8-workers-4                  278.7µ ± 235%
Delete/sqlite/16-workers-4                 506.8µ ± 402%
Delete/dqlite/1-workers-4                  14.20µ ±  27%
Delete/dqlite/2-workers-4                  19.20µ ±  16%
Delete/dqlite/4-workers-4                  16.20µ ±  22%
Delete/dqlite/8-workers-4                  17.10µ ±  32%
Delete/dqlite/16-workers-4                 16.80µ ±  24%
Get/sqlite-4                               80.60µ ±   7%
Get/dqlite-4                               31.00µ ±  17%
List/sqlite-tiny/all-4                     14.10µ ±   2%
List/sqlite-tiny/pagination-4              19.30µ ±   4%
List/sqlite-fits-in-page/all-4             16.60µ ±  13%
List/sqlite-fits-in-page/pagination-4      58.60µ ±   2%
List/sqlite-overflows-page/all-4           58.80µ ±  16%
List/sqlite-overflows-page/pagination-4    165.9µ ±   3%
List/dqlite-tiny/all-4                     4.000µ ±  20%
List/dqlite-tiny/pagination-4              9.200µ ±  10%
List/dqlite-fits-in-page/all-4             10.10µ ±  17%
List/dqlite-fits-in-page/pagination-4      25.50µ ±  12%
List/dqlite-overflows-page/all-4           30.20µ ±   2%
List/dqlite-overflows-page/pagination-4    58.70µ ±   5%
Update/sqlite/1-workers-4                  38.00µ ± 269%
Update/sqlite/2-workers-4                  33.70µ ± 358%
Update/sqlite/4-workers-4                  38.90µ ± 299%
Update/sqlite/8-workers-4                  45.80µ ±  50%
Update/sqlite/16-workers-4                 73.10µ ± 152%
Update/dqlite/1-workers-4                  11.00µ ±  45%
Update/dqlite/2-workers-4                  11.00µ ±  27%
Update/dqlite/4-workers-4                  12.90µ ±  23%
Update/dqlite/8-workers-4                  11.20µ ±  38%
Update/dqlite/16-workers-4                 9.200µ ±  54%
geomean                                    32.49µ

                                        │      After      │
                                        │ sec-writing/op  │
Compaction/sqlite-4                       9.400µ ±   9%
Compaction/dqlite-4                       6.700µ ±  13%
Create/sqlite/1-workers-4                 1.145m ±  15%
Create/sqlite/2-workers-4                 1.920m ±  26%
Create/sqlite/4-workers-4                 4.187m ±  19%
Create/sqlite/8-workers-4                 7.477m ±  17%
Create/sqlite/16-workers-4                15.31m ±  27%
Create/dqlite/1-workers-4                 43.40µ ±  39%
Create/dqlite/2-workers-4                 45.80µ ±  26%
Create/dqlite/4-workers-4                 37.80µ ±  43%
Create/dqlite/8-workers-4                 40.40µ ±  18%
Create/dqlite/16-workers-4                41.50µ ±  23%
Delete/sqlite/1-workers-4                 1.182m ±   9%
Delete/sqlite/2-workers-4                 2.145m ±  11%
Delete/sqlite/4-workers-4                 4.172m ±  17%
Delete/sqlite/8-workers-4                 7.132m ±  37%
Delete/sqlite/16-workers-4                16.14m ±  23%
Delete/dqlite/1-workers-4                 47.30µ ±  15%
Delete/dqlite/2-workers-4                 53.30µ ±  29%
Delete/dqlite/4-workers-4                 39.00µ ±  33%
Delete/dqlite/8-workers-4                 34.30µ ±  40%
Delete/dqlite/16-workers-4                42.50µ ±  27%
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                 1.043m ±   6%
Update/sqlite/2-workers-4                 1.965m ±  19%
Update/sqlite/4-workers-4                 3.899m ±  24%
Update/sqlite/8-workers-4                 7.157m ±  15%
Update/sqlite/16-workers-4                16.80m ± 572%
Update/dqlite/1-workers-4                 40.60µ ±  27%
Update/dqlite/2-workers-4                 39.60µ ±  26%
Update/dqlite/4-workers-4                 38.90µ ±  23%
Update/dqlite/8-workers-4                 38.50µ ±  27%
Update/dqlite/16-workers-4                39.50µ ±  20%
geomean                                                 ¹
¹ summaries must be >0 to compute geomean

                                        │     After      │
                                        │      B/op      │
Compaction/sqlite-4                         567.0 ±  52%
Compaction/dqlite-4                       3.330Ki ± 165%
Create/sqlite/1-workers-4                 20.82Ki ±   3%
Create/sqlite/2-workers-4                 20.82Ki ±   0%
Create/sqlite/4-workers-4                 20.82Ki ±   0%
Create/sqlite/8-workers-4                 20.73Ki ±   3%
Create/sqlite/16-workers-4                20.88Ki ±  13%
Create/dqlite/1-workers-4                 19.52Ki ±   0%
Create/dqlite/2-workers-4                 19.49Ki ±   0%
Create/dqlite/4-workers-4                 19.49Ki ±   0%
Create/dqlite/8-workers-4                 19.49Ki ±   0%
Create/dqlite/16-workers-4                19.50Ki ±   0%
Delete/sqlite/1-workers-4                 22.61Ki ±  15%
Delete/sqlite/2-workers-4                 22.84Ki ±   4%
Delete/sqlite/4-workers-4                 22.96Ki ±  20%
Delete/sqlite/8-workers-4                 23.05Ki ±   7%
Delete/sqlite/16-workers-4                22.43Ki ±   8%
Delete/dqlite/1-workers-4                 21.78Ki ±   0%
Delete/dqlite/2-workers-4                 21.75Ki ±   0%
Delete/dqlite/4-workers-4                 21.75Ki ±   0%
Delete/dqlite/8-workers-4                 21.76Ki ±   0%
Delete/dqlite/16-workers-4                21.76Ki ±   0%
Get/sqlite-4                              25.08Ki ±   0%
Get/dqlite-4                              22.88Ki ±   0%
List/sqlite-tiny/all-4                    1.251Ki ±   2%
List/sqlite-tiny/pagination-4             1.799Ki ±   3%
List/sqlite-fits-in-page/all-4            5.059Ki ±   1%
List/sqlite-fits-in-page/pagination-4     10.24Ki ±   1%
List/sqlite-overflows-page/all-4          26.71Ki ±   8%
List/sqlite-overflows-page/pagination-4   46.17Ki ±   0%
List/dqlite-tiny/all-4                      869.0 ±   5%
List/dqlite-tiny/pagination-4               844.0 ±   1%
List/dqlite-fits-in-page/all-4            4.320Ki ±   2%
List/dqlite-fits-in-page/pagination-4     4.300Ki ±   6%
List/dqlite-overflows-page/all-4          21.19Ki ±   1%
List/dqlite-overflows-page/pagination-4   22.13Ki ±   3%
Update/sqlite/1-workers-4                 22.59Ki ±   1%
Update/sqlite/2-workers-4                 22.63Ki ±   0%
Update/sqlite/4-workers-4                 22.66Ki ±   1%
Update/sqlite/8-workers-4                 22.76Ki ±   1%
Update/sqlite/16-workers-4                22.88Ki ±  29%
Update/dqlite/1-workers-4                 21.22Ki ±   0%
Update/dqlite/2-workers-4                 21.20Ki ±   0%
Update/dqlite/4-workers-4                 21.22Ki ±   0%
Update/dqlite/8-workers-4                 21.24Ki ±   0%
Update/dqlite/16-workers-4                21.34Ki ±   1%
geomean                                   13.44Ki

                                        │    After     │
                                        │  allocs/op   │
Compaction/sqlite-4                       20.00 ±  65%
Compaction/dqlite-4                       80.00 ± 167%
Create/sqlite/1-workers-4                 446.0 ±   4%
Create/sqlite/2-workers-4                 446.0 ±   0%
Create/sqlite/4-workers-4                 446.0 ±   1%
Create/sqlite/8-workers-4                 443.0 ±   4%
Create/sqlite/16-workers-4                446.0 ±  19%
Create/dqlite/1-workers-4                 363.0 ±   0%
Create/dqlite/2-workers-4                 363.0 ±   0%
Create/dqlite/4-workers-4                 363.0 ±   0%
Create/dqlite/8-workers-4                 363.0 ±   0%
Create/dqlite/16-workers-4                363.0 ±   0%
Delete/sqlite/1-workers-4                 488.0 ±  23%
Delete/sqlite/2-workers-4                 494.0 ±   6%
Delete/sqlite/4-workers-4                 497.0 ±  33%
Delete/sqlite/8-workers-4                 497.0 ±   9%
Delete/sqlite/16-workers-4                476.0 ±  12%
Delete/dqlite/1-workers-4                 393.0 ±   0%
Delete/dqlite/2-workers-4                 393.0 ±   0%
Delete/dqlite/4-workers-4                 393.0 ±   0%
Delete/dqlite/8-workers-4                 393.0 ±   0%
Delete/dqlite/16-workers-4                393.0 ±   0%
Get/sqlite-4                              563.0 ±   0%
Get/dqlite-4                              407.0 ±   0%
List/sqlite-tiny/all-4                    41.00 ±   2%
List/sqlite-tiny/pagination-4             62.00 ±   3%
List/sqlite-fits-in-page/all-4            46.00 ±   2%
List/sqlite-fits-in-page/pagination-4     93.00 ±   0%
List/sqlite-overflows-page/all-4          57.00 ±   7%
List/sqlite-overflows-page/pagination-4   93.00 ±   0%
List/dqlite-tiny/all-4                    14.00 ±   7%
List/dqlite-tiny/pagination-4             13.00 ±   0%
List/dqlite-fits-in-page/all-4            18.00 ±   6%
List/dqlite-fits-in-page/pagination-4     17.00 ±  12%
List/dqlite-overflows-page/all-4          29.00 ±   3%
List/dqlite-overflows-page/pagination-4   31.00 ±   3%
Update/sqlite/1-workers-4                 462.0 ±   2%
Update/sqlite/2-workers-4                 462.0 ±   0%
Update/sqlite/4-workers-4                 463.0 ±   2%
Update/sqlite/8-workers-4                 464.0 ±   1%
Update/sqlite/16-workers-4                463.0 ±  22%
Update/dqlite/1-workers-4                 375.0 ±   0%
Update/dqlite/2-workers-4                 375.0 ±   0%
Update/dqlite/4-workers-4                 376.0 ±   0%
Update/dqlite/8-workers-4                 376.0 ±   0%
Update/dqlite/16-workers-4                377.0 ±   1%
geomean                                   198.5

                                        │         After         │
                                        │ network-bytes-read/op │
Compaction/dqlite-4                              1.197Ki ± 171%
Create/dqlite/1-workers-4                          240.2 ±   0%
Create/dqlite/2-workers-4                          241.0 ±   1%
Create/dqlite/4-workers-4                          241.4 ±   0%
Create/dqlite/8-workers-4                          241.3 ±   0%
Create/dqlite/16-workers-4                         240.9 ±   0%
Delete/dqlite/1-workers-4                          716.1 ±   0%
Delete/dqlite/2-workers-4                          717.5 ±   0%
Delete/dqlite/4-workers-4                          718.3 ±   0%
Delete/dqlite/8-workers-4                          717.9 ±   0%
Delete/dqlite/16-workers-4                         717.1 ±   0%
Get/dqlite-4                                     1.133Ki ±   0%
List/dqlite-tiny/all-4                             201.3 ±   8%
List/dqlite-tiny/pagination-4                      191.2 ±   2%
List/dqlite-fits-in-page/all-4                   1.240Ki ±   2%
List/dqlite-fits-in-page/pagination-4            1.201Ki ±  10%
List/dqlite-overflows-page/all-4                 6.218Ki ±   2%
List/dqlite-overflows-page/pagination-4          6.562Ki ±   4%
Update/dqlite/1-workers-4                          262.7 ±   0%
Update/dqlite/2-workers-4                          262.8 ±   0%
Update/dqlite/4-workers-4                          263.2 ±   0%
Update/dqlite/8-workers-4                          263.3 ±   0%
Update/dqlite/16-workers-4                         264.0 ±   1%
geomean                                            540.4

                                        │          After           │
                                        │ network-bytes-written/op │
Compaction/dqlite-4                                    4.254 ± 20%
Create/dqlite/1-workers-4                              113.6 ±  1%
Create/dqlite/2-workers-4                              115.4 ±  3%
Create/dqlite/4-workers-4                              115.7 ±  2%
Create/dqlite/8-workers-4                              115.7 ±  2%
Create/dqlite/16-workers-4                             115.0 ±  2%
Delete/dqlite/1-workers-4                              81.68 ±  1%
Delete/dqlite/2-workers-4                              82.14 ±  0%
Delete/dqlite/4-workers-4                              82.44 ±  1%
Delete/dqlite/8-workers-4                              82.34 ±  1%
Delete/dqlite/16-workers-4                             82.04 ±  1%
Get/dqlite-4                                           80.50 ±  0%
List/dqlite-tiny/all-4                               0.04220 ± 16%
List/dqlite-tiny/pagination-4                        0.04644 ±  5%
List/dqlite-fits-in-page/all-4                       0.05319 ±  4%
List/dqlite-fits-in-page/pagination-4                0.07543 ± 11%
List/dqlite-overflows-page/all-4                     0.06445 ±  3%
List/dqlite-overflows-page/pagination-4               0.1075 ± 19%
Update/dqlite/1-workers-4                              136.8 ±  0%
Update/dqlite/2-workers-4                              136.6 ±  0%
Update/dqlite/4-workers-4                              136.7 ±  0%
Update/dqlite/8-workers-4                              136.8 ±  0%
Update/dqlite/16-workers-4                             137.2 ±  1%
geomean                                                13.27

Copy link
Collaborator

@marco6 marco6 left a comment

Choose a reason for hiding this comment

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

From the performance POV, the analysis follows the very same pattern as #170 where we see an increase in write time, but we can keep the pace as shown in sec/op:

Delete/dqlite/1-workers-4                  1.391m ±  5%    1.150m ±   5%  -17.30% (p=0.001 n=7)
Delete/dqlite/2-workers-4                  1.244m ±  2%    1.027m ±   3%  -17.45% (p=0.001 n=7)
Delete/dqlite/4-workers-4                  1.241m ±  4%    1.042m ±   7%  -16.04% (p=0.001 n=7)
Delete/dqlite/8-workers-4                  1.211m ± 16%    1.015m ±  11%  -16.22% (p=0.001 n=7)
Delete/dqlite/16-workers-4                 1.235m ±  5%    1.082m ±   7%  -12.34% (p=0.001 n=7)

There is indeed some increase in pages read, but as it can be seen, it is very stable even with more workers, so I'm really not worried:

Delete/dqlite/1-workers-4                   24.00 ±  1%     15.31 ±  1%  -36.21% (p=0.001 n=7)
Delete/dqlite/2-workers-4                   12.83 ±  4%     13.25 ±  0%   +3.27% (p=0.001 n=7)
Delete/dqlite/4-workers-4                   10.62 ±  1%     13.22 ±  1%  +24.48% (p=0.001 n=7)
Delete/dqlite/8-workers-4                   10.96 ±  1%     13.21 ±  1%  +20.53% (p=0.001 n=7)
Delete/dqlite/16-workers-4                  11.02 ±  1%     13.23 ±  1%  +20.05% (p=0.001 n=7)

Also, this pattern is in common with what we had with the Update query.

Great work Louise!

@louiseschmidtgen louiseschmidtgen merged commit eefb3f7 into master Sep 25, 2024
7 checks passed
@marco6 marco6 deleted the KU-1229/delete-query branch September 26, 2024 06:45
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