Hi Greg,
On Sat, Oct 24, 2026 at 6:33 PM Greg Burd <[email protected]> wrote:
> If you want to compare setups, send your scripts and per-run numbers
> and I'll diff them against mine.
Thanks for re-measuring on bare metal, and for the new 0003 sentence.
Scripts and numbers are attached; first, the 1MB slice.
It is the database encoding. bench.sh runs on a SQL_ASCII database on
purpose. With a multibyte encoding, text_substring() asks detoast for
bytes [0, (start + len - 1) * eml) (varlena.c:666-718), and a request
at least as long as the raw size becomes a full decompression
(detoast.c:529); lines as of master 42e96cf2fe0, and v10 changes
neither. I checked it in the server, with breakpoints at the entry of
zstd_decompress_datum() and zstd_decompress_datum_slice(), on 20
values of 1 MB:
- UTF8: substr(v, 500000, 100) enters zstd_decompress_datum() 20
times and the slice function never.
- SQL_ASCII: the same query enters zstd_decompress_datum_slice() 20
times, with slicelength 500099.
- substr(v, 1, 100) is a slice in both (slicelength 400 and 100).
By the same code, substr(v, 20000, 100) on UTF8 asks for 80,396
bytes, more than a 32 or 46 kB value, so it is a full decompression
too; I did not run that one.
So, if your database is UTF8, your 1MB slice@500k (1.001) is a full
read, like our 1 MB full read (1.000 [0.985, 1.006]); your 32kB
slice@20k (0.953) sits with your full read (0.956); and your 32kB
prefix (0.614) is the one that stays a slice.
The 172 us per value that the reuse saves on our 1 MB slice (from the
median times) track page faults. On SQL_ASCII the backend takes 416
page faults per value on that slice with a fresh context and none with
the reused one, the same in three repetitions, about 0.4 us per fault.
The 1 MB prefix (0 and 0 faults) and full read (631 and 631) show no
fault difference, and their timings barely move (0.980 and 1.000).
These counts come from the builds I still have: v7 plus the reuse,
whose three zstd decode functions are line for line those of v10-0003,
and v7, whose two match v10 with the control diff below.
The 32 kB rows are not the same test: if I read your setup right,
they run on the 80k x 46kB docs, and ours on 32,000-byte docs, json
and random values. Size and content both differ, so I would not
read 0.614 vs our 0.70-0.76 as a disagreement.
Our setup: Ryzen AI 9 HX 370 laptop, 8 CPUs pinned, performance
profile; -O2 without asserts, gcc 16.2.1, zstd 1.5.7, --with-lz4
--with-zstd; shared_buffers 2GB; hot cache; SQL_ASCII, locale C.
Attached:
- bench.sh.txt: the benchmark as used, with only local paths replaced.
- run_v9_cite.sh.txt: the rounds, both builds back to back, order
alternating. Our lab's idle-CPU check is stubbed out; it only
flagged rounds, all 38 were clean, so no number depends on it.
- cite_v9.py.txt, cite_v9_runs.py.txt: the summaries (rename to .py;
the second imports the first).
- per-run-v9.txt: per round and point, the median of 5 reps for each
build and the ratio, runs A, B and C.
- nocfbot-v9n-without-reuse.diff.txt: our v7 control on top of 0003.
It also applies on top of v10-0004.
- branch_faults.sh.txt and branch_faults-out.txt: the breakpoint
and page-fault counts above, and their output.
Regards,
Manu
#!/bin/bash
# As used for the v9 timings (19 Oct 2026); only local paths were replaced.
# Benchmarks TOAST compression methods, master against v4 of "ZSTD TOAST
# compression, and an extensible compression method encoding".
# bench.sh BUILD METHOD [SIZES]
# BUILD base | v4 (see build.sh)
# METHOD pglz | lz4 | zstd (zstd only exists in v4)
# SIZES value sizes in bytes (default: 4000 32000 1000000)
# CORPORA (env) which corpora to run (default: docs json random)
# One fresh cluster per run. Three corpora, the same bytes for every build
# and method:
# docs the PostgreSQL SGML documentation, cut into values of SIZE bytes
# json generated JSON documents with realistic, repetitive keys
# random base64 of random bytes (setseed), nearly incompressible
# Storage is the default (EXTENDED), so small values are compressed inline
# and large ones compressed and moved out of line. Prints one "key=value"
# line per measurement.
set -eu
BUILD=$1 METHOD=$2
SIZES=${3:-4000 32000 1000000}
CORPORA=${CORPORA:-docs json random}
REPS=${REPS:-5}
W=${W:?directory holding the installs i-BUILD}; B=$W/i-$BUILD/bin
# The docs corpus always comes from the same tree, whatever the build.
DOCS=${DOCS:?doc/src/sgml of a PostgreSQL source tree}
D=$(mktemp -d); P=$((56300 + RANDOM % 100))
# SQL_ASCII and C: substr() then works on bytes and fetches only the chunks
# it needs from the 10 MB source; compression sees the same bytes either way.
"$B/initdb" -D $D -A trust --no-sync -U postgres -E SQL_ASCII --locale=C
>/dev/null
cat >> $D/postgresql.conf <<EOF
port = $P
unix_socket_directories = '/tmp'
shared_buffers = 2GB
max_wal_size = 32GB
checkpoint_timeout = 30min
autovacuum = off
jit = off
default_toast_compression = $METHOD
EOF
"$B/pg_ctl" -D $D -l $D/log -w start >/dev/null
q() { "$B/psql" -X -qAt -h /tmp -p $P -U postgres -d postgres -v
ON_ERROR_STOP=1 "$@"; }
ms() { python3 -c "import time; print(int(time.time()*1000))"; }
q -c "CREATE EXTENSION pg_prewarm"
# The documentation as one text, about 10 MB (file order is fixed).
cat $(ls $DOCS/*.sgml $DOCS/ref/*.sgml | sort) > $D/docs.txt
# Stored uncompressed, so substr() fetches only the chunks it needs instead
# of decompressing all 10 MB for every value.
q -c "CREATE TABLE docs_src (t text)"
q -c "ALTER TABLE docs_src ALTER COLUMN t SET STORAGE EXTERNAL"
q -c "INSERT INTO docs_src SELECT pg_read_file('$D/docs.txt')"
DOCS_LEN=$(q -c "SELECT length(t) FROM docs_src")
out() { echo "build=$BUILD method=$METHOD corpus=$CORPUS size=$SIZE $*"; }
for SIZE in $SIZES; do
# About 200 MB of raw data per corpus and size.
N=$(( 200000000 / SIZE )); [ $N -gt 50000 ] && N=50000
for CORPUS in $CORPORA; do
case $CORPUS in
docs) src="SELECT g, substr((SELECT t FROM docs_src), 1 + (g * 7919) %
$((DOCS_LEN - SIZE)), $SIZE)
FROM generate_series(1, $N) g" ;;
json) src="SELECT g, left(string_agg(format(
'{\"id\": %s, \"customer\": {\"name\": \"customer %s\",
\"tier\": \"%s\"}, \"status\": \"%s\", \"items\": [{\"sku\": \"SKU-%s\",
\"qty\": %s, \"price\": %s}], \"tags\": [\"%s\", \"%s\"]}',
g * 1000 + i, (g * 31 + i) % 5000,
(ARRAY['gold','silver','bronze'])[1 + i % 3],
(ARRAY['paid','shipped','pending','refunded'])[1 + (g +
i) % 4],
(g * 17 + i) % 100000, 1 + i % 9, round(((g * 13 + i) %
100000) / 100.0, 2),
(ARRAY['web','store','app'])[1 + g % 3],
(ARRAY['promo','none'])[1 + i % 2]), ','), $SIZE)
FROM generate_series(1, $N) g,
generate_series(1, $SIZE / 150 + 1) i
GROUP BY g" ;;
random) src="SELECT g, left(string_agg(md5(random()::text) ||
encode(sha256(random()::text::bytea), 'base64'), ''), $SIZE)
FROM generate_series(1, $N) g, generate_series(1, $SIZE /
76 + 1) i
GROUP BY g" ;;
esac
q -c "DROP TABLE IF EXISTS t, raw"
q -c "SELECT setseed(0.42)"
q -c "CREATE UNLOGGED TABLE raw (id int, v text)"
q -c "ALTER TABLE raw ALTER COLUMN v SET STORAGE EXTERNAL"
q -c "INSERT INTO raw $src"
q -c "CREATE TABLE t (id int PRIMARY KEY, v text)"
q -c "SELECT pg_prewarm('raw'), pg_prewarm((SELECT reltoastrelid FROM
pg_class WHERE relname = 'raw'))" >/dev/null
q -c "CHECKPOINT"
# 1. Load: compression happens here.
lsn0=$(q -c "SELECT pg_current_wal_insert_lsn()")
t0=$(ms); q -c "INSERT INTO t SELECT id, v FROM raw"; t1=$(ms)
wal=$(q -c "SELECT pg_wal_lsn_diff(pg_current_wal_insert_lsn(), '$lsn0')")
sizes=$(q -c "SELECT format('rows=%s raw_mb=%s heap_kb=%s toast_kb=%s
compressed_pct=%s',
count(*), round(sum(octet_length(v)) / 1e6, 1),
pg_relation_size('t') / 1024,
pg_relation_size((SELECT reltoastrelid FROM pg_class WHERE
relname = 't')) / 1024,
round(100.0 * count(*) FILTER (WHERE
pg_column_compression(v) IS NOT NULL) / count(*), 1))
FROM t")
out "op=load ms=$((t1 - t0)) wal_bytes=$wal $sizes"
q -c "VACUUM ANALYZE t"; q -c "CHECKPOINT"
q -c "SELECT pg_prewarm('t'), pg_prewarm((SELECT reltoastrelid FROM
pg_class WHERE relname = 't'))" >/dev/null
# 2. Full read, decompressing every value (hot).
for rep in $(seq $REPS); do
t0=$(ms); q -c "SELECT sum(length(v || 'x')) FROM t" >/dev/null; t1=$(ms)
out "op=read_all rep=$rep ms=$((t1 - t0))"
done
# 3. A 100-byte slice from the middle of every value (hot).
for rep in $(seq $REPS); do
t0=$(ms); q -c "SELECT sum(length(substr(v, $SIZE / 2, 100))) FROM t"
>/dev/null; t1=$(ms)
out "op=slice rep=$rep ms=$((t1 - t0))"
done
# 4. A 100-byte prefix of every value (hot): pglz can stop early here.
for rep in $(seq $REPS); do
t0=$(ms); q -c "SELECT sum(length(substr(v, 1, 100))) FROM t" >/dev/null;
t1=$(ms)
out "op=prefix rep=$rep ms=$((t1 - t0))"
done
done
done
"$B/pg_ctl" -D $D -m fast -w stop >/dev/null
rm -rf $D
#!/bin/bash
# Citable-grade paired timing of the zstd decompression context reuse in v9:
# v9n zstd master 0f3b42ce806 + v9-0001..0004, reuse undone (control)
# v9 zstd master 0f3b42ce806 + v9-0001..0004, as posted
# One round = both builds back to back (order alternating with the round
number), each
# running bench.sh on 4 kB and 32 kB values of all three corpora and on 1 MB
random values.
# The integrity sentinel (calib) runs before and after every round; a round
where either
# reading is more than TOL% over the lane's idle floor is kept in the file but
marked
# clean=0, and analysis uses clean=1 rounds only. Rounds go in chunks so that
no single
# call runs for more than a few minutes; FIRST is the number of the first round
of the chunk.
# bash run_v9_cite.sh OUT FIRST COUNT (pinned to the measuring CPUs)
# then: python3 cite_v9.py OUT_A [OUT_B]
set -u
A=$(cd "$(dirname "$0")" && pwd)
# Our lab harness supplied the two functions below: integrity_calib_us timed a
# fixed CPU-bound loop on the given CPUs, and integrity_ref_get gave the lane's
# idle floor. They only mark a round clean=0/1; all 38 rounds were clean and
# none was dropped, so stubbing them out changes no number.
integrity_calib_us() { echo 0; }
integrity_ref_get() { echo 0; }
export W=${W:?directory holding the installs i-v9 and i-v9n}
OUT=$1 FIRST=$2 COUNT=$3 TOL=${TOL:-8} LANE=${LANE:-a}
CPUS=$(grep Cpus_allowed_list /proc/self/status | cut -f2)
REF=$(integrity_ref_get "$LANE"); REF=${REF:-0}
echo "# chunk $(date -Is) rounds $FIRST..$((FIRST + COUNT - 1)), cpus $CPUS,
profile $(cat /sys/firmware/acpi/platform_profile 2>/dev/null), idle floor
${REF}us, tol ${TOL}%, zstd $(pkg-config --modversion libzstd)" >> $OUT
RUNS=(v9n v9)
for round in $(seq $FIRST $((FIRST + COUNT - 1))); do
order=("${RUNS[@]}")
(( round % 2 == 0 )) && order=("${RUNS[1]}" "${RUNS[0]}")
pre=$(integrity_calib_us "$CPUS"); load=$(cut -d" " -f1-3 /proc/loadavg)
tmp=$(mktemp)
for b in "${order[@]}"; do
bash $A/bench.sh $b zstd "4000 32000" 2>&1 | grep -E "^build=|ERROR" >> $tmp
CORPORA=random bash $A/bench.sh $b zstd 1000000 2>&1 | grep -E
"^build=|ERROR" >> $tmp
done
post=$(integrity_calib_us "$CPUS")
ref=$REF; [ "$ref" -gt 0 ] || ref=$pre
for v in $pre $post; do [ "$v" -gt 0 ] && [ "$v" -lt "$ref" ] && ref=$v; done
limit=$(( ref + ref * TOL / 100 ))
clean=1; { [ "$pre" -gt "$limit" ] || [ "$post" -gt "$limit" ]; } && clean=0
grep -q ERROR $tmp && clean=0
echo "# round $round order ${order[*]} calib ${pre}/${post}us floor ${ref}us
clean=$clean load $load" >> $OUT
sed "s/\$/ round=$round clean=$clean/" $tmp >> $OUT
rm -f $tmp
echo "round $round clean=$clean calib ${pre}/${post}us"
done
"""Citable-grade summary of run_v9_cite.sh output.
cite_v9.py OUT_A [OUT_B]
Per point (corpus, size, op): the per-round ratio v9/v9n of the medians of the
reps in
that round (both builds back to back, so drift cancels), over clean rounds
only. Reports
the median ratio, a bootstrap 95% CI of the median (percentile, 20000
resamples, fixed
seed), the number of clean rounds, and whether every round was faster. With
OUT_B, a
second independent run: a point is CITABLE when B's median falls inside A's CI
(our lab's
cita rule), UNSTABLE otherwise. Pure stdlib.
"""
import random
import statistics as st
import sys
from collections import defaultdict
def ratios(path):
data = defaultdict(list)
for line in open(path):
if not line.startswith("build="):
continue
f = dict(kv.split("=", 1) for kv in line.split() if "=" in kv)
if f["clean"] != "1":
continue
data[(f["corpus"], int(f["size"]), f["op"], int(f["round"]),
f["build"])].append(float(f["ms"]))
out = defaultdict(list)
for (c, s, op, r, b) in list(data):
if b == "v9" and (c, s, op, r, "v9n") in data:
out[(c, s, op)].append(st.median(data[(c, s, op, r, "v9")]) /
st.median(data[(c, s, op, r, "v9n")]))
return out
def ci(xs, n=20000):
rnd = random.Random(42)
meds = sorted(st.median(rnd.choices(xs, k=len(xs))) for _ in range(n))
return meds[int(0.025 * n)], meds[int(0.975 * n) - 1]
a = ratios(sys.argv[1])
b = ratios(sys.argv[2]) if len(sys.argv) > 2 else None
print("v9 / v9n: median of per-round ratios [bootstrap 95% CI], clean rounds" +
(", then run B" if b else ""))
for k in sorted(a):
xs = a[k]; lo, hi = ci(xs); m = st.median(xs)
flag = " all-faster" if max(xs) < 1 else " all-slower" if min(xs) > 1 else
""
line = f" {k[0]} {k[1]} {k[2]}: {m:.3f} [{lo:.3f}, {hi:.3f}]
n={len(xs)}{flag}"
if b and k in b:
mb = st.median(b[k]); lob, hib = ci(b[k])
flagb = " all-faster" if max(b[k]) < 1 else ""
line += f" | B {mb:.3f} [{lob:.3f}, {hib:.3f}] n={len(b[k])}{flagb} ->
{'CITABLE' if lo <= mb <= hi else 'UNSTABLE'}"
print(line)
"""Three independent clean runs of run_v9_cite.sh, side by side.
cite_v9_runs.py OUT_A OUT_B OUT_C
Per point: each run's median ratio v9/v9n with its bootstrap 95% CI (as
cite_v9.py), the
strict cita verdicts A->B and B->C (second median inside the first's CI), the
envelope
[lowest CI bound, highest CI bound] over the three runs, which also holds the
run-to-run spread, and whether all rounds of all runs were faster.
"""
import statistics as st
import sys
import importlib.util
spec = importlib.util.spec_from_file_location("c",
__file__.replace("cite_v9_runs.py", "cite_v9.py"))
sys_argv = sys.argv
sys.argv = [sys_argv[0], sys_argv[1]]
c = importlib.util.module_from_spec(spec)
import io, contextlib
with contextlib.redirect_stdout(io.StringIO()):
spec.loader.exec_module(c)
runs = [c.ratios(p) for p in sys_argv[1:4]]
print("point: A med [CI] n | B | C | A->B B->C | envelope over 3 runs | every
round of 3 runs faster")
for k in sorted(runs[0]):
meds, cis = [], []
for r in runs:
meds.append(st.median(r[k])); cis.append(c.ci(r[k]))
v = lambda i, j: "ok" if cis[i][0] <= meds[j] <= cis[i][1] else "UNST"
allx = [x for r in runs for x in r[k]]
lo, hi = min(x[0] for x in cis), max(x[1] for x in cis)
cells = " | ".join(f"{m:.3f} [{a:.3f}, {b:.3f}] n={len(r[k])}" for m, (a,
b), r in zip(meds, cis, runs))
flag = "yes" if max(allx) < 1 else "no"
print(f" {k[0]} {k[1]} {k[2]}: {cells} | {v(0,1)} {v(1,2)} | [{lo:.3f},
{hi:.3f}] | {flag} ({len(allx)} rounds)")
Per-round numbers of the three v9 timing runs (A, B, C), 19 Oct 2026.
v9 = master 0f3b42ce806 + v9-0001..0004; v9n = v9 with the reuse undone
(v9n-without-reuse.diff), i.e. the v7 decompression code. -O2, no asserts,
gcc 16.2.1, zstd 1.5.7. Database SQL_ASCII, locale C (see bench.sh).
ms = median of the 5 reps of that op in that round, for each build;
ratio = v9/v9n. Value counts: 50000 x 4000 B, 6250 x 32000 B, 200 x 1 MB.
slice = substr(v, SIZE/2, 100); prefix = substr(v, 1, 100);
read_all = sum(length(v || 'x')); load = INSERT ... SELECT (compression).
Raw output of run_v9_cite.sh (every rep, calibration readings) on request.
run round order corpus size op v9n_ms v9_ms ratio
A 1 v9n-v9 docs 4000 load 827 841 1.017
A 1 v9n-v9 docs 4000 prefix 226 226 1.000
A 1 v9n-v9 docs 4000 read_all 225 221 0.982
A 1 v9n-v9 docs 4000 slice 227 221 0.974
A 1 v9n-v9 docs 32000 load 583 582 0.998
A 1 v9n-v9 docs 32000 prefix 188 127 0.676
A 1 v9n-v9 docs 32000 read_all 160 130 0.812
A 1 v9n-v9 docs 32000 slice 192 129 0.672
A 1 v9n-v9 json 4000 load 444 441 0.993
A 1 v9n-v9 json 4000 prefix 140 134 0.957
A 1 v9n-v9 json 4000 read_all 141 134 0.950
A 1 v9n-v9 json 4000 slice 143 133 0.930
A 1 v9n-v9 json 32000 load 240 240 1.000
A 1 v9n-v9 json 32000 prefix 122 78 0.639
A 1 v9n-v9 json 32000 read_all 80 80 1.000
A 1 v9n-v9 json 32000 slice 137 79 0.577
A 1 v9n-v9 random 4000 load 688 674 0.980
A 1 v9n-v9 random 4000 prefix 220 215 0.977
A 1 v9n-v9 random 4000 read_all 220 213 0.968
A 1 v9n-v9 random 4000 slice 223 216 0.969
A 1 v9n-v9 random 32000 load 377 375 0.995
A 1 v9n-v9 random 32000 prefix 169 122 0.722
A 1 v9n-v9 random 32000 read_all 152 125 0.822
A 1 v9n-v9 random 32000 slice 179 123 0.687
A 1 v9n-v9 random 1000000 load 522 549 1.052
A 1 v9n-v9 random 1000000 prefix 48 48 1.000
A 1 v9n-v9 random 1000000 read_all 168 165 0.982
A 1 v9n-v9 random 1000000 slice 114 78 0.684
A 2 v9-v9n docs 4000 load 845 849 1.005
A 2 v9-v9n docs 4000 prefix 227 222 0.978
A 2 v9-v9n docs 4000 read_all 225 221 0.982
A 2 v9-v9n docs 4000 slice 229 221 0.965
A 2 v9-v9n docs 32000 load 584 578 0.990
A 2 v9-v9n docs 32000 prefix 169 126 0.746
A 2 v9-v9n docs 32000 read_all 145 129 0.890
A 2 v9-v9n docs 32000 slice 175 128 0.731
A 2 v9-v9n json 4000 load 442 443 1.002
A 2 v9-v9n json 4000 prefix 140 133 0.950
A 2 v9-v9n json 4000 read_all 141 134 0.950
A 2 v9-v9n json 4000 slice 141 134 0.950
A 2 v9-v9n json 32000 load 243 239 0.984
A 2 v9-v9n json 32000 prefix 111 78 0.703
A 2 v9-v9n json 32000 read_all 80 79 0.988
A 2 v9-v9n json 32000 slice 123 79 0.642
A 2 v9-v9n random 4000 load 693 694 1.001
A 2 v9-v9n random 4000 prefix 221 215 0.973
A 2 v9-v9n random 4000 read_all 218 219 1.005
A 2 v9-v9n random 4000 slice 222 220 0.991
A 2 v9-v9n random 32000 load 383 363 0.948
A 2 v9-v9n random 32000 prefix 155 122 0.787
A 2 v9-v9n random 32000 read_all 141 123 0.872
A 2 v9-v9n random 32000 slice 165 121 0.733
A 2 v9-v9n random 1000000 load 551 538 0.976
A 2 v9-v9n random 1000000 prefix 49 48 0.980
A 2 v9-v9n random 1000000 read_all 167 166 0.994
A 2 v9-v9n random 1000000 slice 111 78 0.703
A 3 v9n-v9 docs 4000 load 834 851 1.020
A 3 v9n-v9 docs 4000 prefix 230 222 0.965
A 3 v9n-v9 docs 4000 read_all 227 223 0.982
A 3 v9n-v9 docs 4000 slice 229 226 0.987
A 3 v9n-v9 docs 32000 load 574 579 1.009
A 3 v9n-v9 docs 32000 prefix 169 127 0.751
A 3 v9n-v9 docs 32000 read_all 145 129 0.890
A 3 v9n-v9 docs 32000 slice 171 127 0.743
A 3 v9n-v9 json 4000 load 451 437 0.969
A 3 v9n-v9 json 4000 prefix 143 133 0.930
A 3 v9n-v9 json 4000 read_all 142 135 0.951
A 3 v9n-v9 json 4000 slice 147 136 0.925
A 3 v9n-v9 json 32000 load 248 236 0.952
A 3 v9n-v9 json 32000 prefix 111 80 0.721
A 3 v9n-v9 json 32000 read_all 80 81 1.012
A 3 v9n-v9 json 32000 slice 126 79 0.627
A 3 v9n-v9 random 4000 load 688 678 0.985
A 3 v9n-v9 random 4000 prefix 221 218 0.986
A 3 v9n-v9 random 4000 read_all 218 215 0.986
A 3 v9n-v9 random 4000 slice 222 217 0.977
A 3 v9n-v9 random 32000 load 375 363 0.968
A 3 v9n-v9 random 32000 prefix 156 121 0.776
A 3 v9n-v9 random 32000 read_all 142 122 0.859
A 3 v9n-v9 random 32000 slice 176 121 0.688
A 3 v9n-v9 random 1000000 load 540 541 1.002
A 3 v9n-v9 random 1000000 prefix 50 49 0.980
A 3 v9n-v9 random 1000000 read_all 168 165 0.982
A 3 v9n-v9 random 1000000 slice 114 79 0.693
A 4 v9-v9n docs 4000 load 857 848 0.989
A 4 v9-v9n docs 4000 prefix 230 222 0.965
A 4 v9-v9n docs 4000 read_all 228 220 0.965
A 4 v9-v9n docs 4000 slice 230 222 0.965
A 4 v9-v9n docs 32000 load 578 573 0.991
A 4 v9-v9n docs 32000 prefix 182 127 0.698
A 4 v9-v9n docs 32000 read_all 158 128 0.810
A 4 v9-v9n docs 32000 slice 188 129 0.686
A 4 v9-v9n json 4000 load 451 442 0.980
A 4 v9-v9n json 4000 prefix 141 135 0.957
A 4 v9-v9n json 4000 read_all 141 135 0.957
A 4 v9-v9n json 4000 slice 142 137 0.965
A 4 v9-v9n json 32000 load 241 243 1.008
A 4 v9-v9n json 32000 prefix 121 79 0.653
A 4 v9-v9n json 32000 read_all 80 80 1.000
A 4 v9-v9n json 32000 slice 135 79 0.585
A 4 v9-v9n random 4000 load 680 699 1.028
A 4 v9-v9n random 4000 prefix 220 214 0.973
A 4 v9-v9n random 4000 read_all 219 217 0.991
A 4 v9-v9n random 4000 slice 222 218 0.982
A 4 v9-v9n random 32000 load 374 375 1.003
A 4 v9-v9n random 32000 prefix 179 121 0.676
A 4 v9-v9n random 32000 read_all 152 123 0.809
A 4 v9-v9n random 32000 slice 177 123 0.695
A 4 v9-v9n random 1000000 load 544 541 0.994
A 4 v9-v9n random 1000000 prefix 48 48 1.000
A 4 v9-v9n random 1000000 read_all 165 164 0.994
A 4 v9-v9n random 1000000 slice 111 77 0.694
A 5 v9n-v9 docs 4000 load 847 862 1.018
A 5 v9n-v9 docs 4000 prefix 230 221 0.961
A 5 v9n-v9 docs 4000 read_all 228 223 0.978
A 5 v9n-v9 docs 4000 slice 231 223 0.965
A 5 v9n-v9 docs 32000 load 574 571 0.995
A 5 v9n-v9 docs 32000 prefix 172 127 0.738
A 5 v9n-v9 docs 32000 read_all 144 129 0.896
A 5 v9n-v9 docs 32000 slice 172 128 0.744
A 5 v9n-v9 json 4000 load 447 451 1.009
A 5 v9n-v9 json 4000 prefix 141 135 0.957
A 5 v9n-v9 json 4000 read_all 142 137 0.965
A 5 v9n-v9 json 4000 slice 143 137 0.958
A 5 v9n-v9 json 32000 load 241 241 1.000
A 5 v9n-v9 json 32000 prefix 112 78 0.696
A 5 v9n-v9 json 32000 read_all 80 80 1.000
A 5 v9n-v9 json 32000 slice 122 80 0.656
A 5 v9n-v9 random 4000 load 689 691 1.003
A 5 v9n-v9 random 4000 prefix 220 215 0.977
A 5 v9n-v9 random 4000 read_all 219 217 0.991
A 5 v9n-v9 random 4000 slice 222 217 0.977
A 5 v9n-v9 random 32000 load 366 357 0.975
A 5 v9n-v9 random 32000 prefix 155 120 0.774
A 5 v9n-v9 random 32000 read_all 139 123 0.885
A 5 v9n-v9 random 32000 slice 164 120 0.732
A 5 v9n-v9 random 1000000 load 560 545 0.973
A 5 v9n-v9 random 1000000 prefix 50 49 0.980
A 5 v9n-v9 random 1000000 read_all 167 169 1.012
A 5 v9n-v9 random 1000000 slice 113 79 0.699
A 6 v9-v9n docs 4000 load 861 858 0.997
A 6 v9-v9n docs 4000 prefix 231 225 0.974
A 6 v9-v9n docs 4000 read_all 229 222 0.969
A 6 v9-v9n docs 4000 slice 230 224 0.974
A 6 v9-v9n docs 32000 load 586 577 0.985
A 6 v9-v9n docs 32000 prefix 170 127 0.747
A 6 v9-v9n docs 32000 read_all 147 129 0.878
A 6 v9-v9n docs 32000 slice 174 128 0.736
A 6 v9-v9n json 4000 load 446 445 0.998
A 6 v9-v9n json 4000 prefix 145 134 0.924
A 6 v9-v9n json 4000 read_all 141 134 0.950
A 6 v9-v9n json 4000 slice 144 135 0.938
A 6 v9-v9n json 32000 load 241 239 0.992
A 6 v9-v9n json 32000 prefix 112 78 0.696
A 6 v9-v9n json 32000 read_all 80 80 1.000
A 6 v9-v9n json 32000 slice 124 80 0.645
A 6 v9-v9n random 4000 load 691 679 0.983
A 6 v9-v9n random 4000 prefix 221 216 0.977
A 6 v9-v9n random 4000 read_all 218 215 0.986
A 6 v9-v9n random 4000 slice 223 217 0.973
A 6 v9-v9n random 32000 load 368 364 0.989
A 6 v9-v9n random 32000 prefix 160 121 0.756
A 6 v9-v9n random 32000 read_all 140 122 0.871
A 6 v9-v9n random 32000 slice 164 122 0.744
A 6 v9-v9n random 1000000 load 556 552 0.993
A 6 v9-v9n random 1000000 prefix 50 50 1.000
A 6 v9-v9n random 1000000 read_all 167 163 0.976
A 6 v9-v9n random 1000000 slice 114 78 0.684
A 7 v9n-v9 docs 4000 load 860 846 0.984
A 7 v9n-v9 docs 4000 prefix 231 222 0.961
A 7 v9n-v9 docs 4000 read_all 231 222 0.961
A 7 v9n-v9 docs 4000 slice 232 224 0.966
A 7 v9n-v9 docs 32000 load 586 573 0.978
A 7 v9n-v9 docs 32000 prefix 183 128 0.699
A 7 v9n-v9 docs 32000 read_all 159 130 0.818
A 7 v9n-v9 docs 32000 slice 191 128 0.670
A 7 v9n-v9 json 4000 load 450 444 0.987
A 7 v9n-v9 json 4000 prefix 143 134 0.937
A 7 v9n-v9 json 4000 read_all 142 136 0.958
A 7 v9n-v9 json 4000 slice 144 135 0.938
A 7 v9n-v9 json 32000 load 233 240 1.030
A 7 v9n-v9 json 32000 prefix 122 79 0.648
A 7 v9n-v9 json 32000 read_all 80 81 1.012
A 7 v9n-v9 json 32000 slice 134 79 0.590
A 7 v9n-v9 random 4000 load 698 698 1.000
A 7 v9n-v9 random 4000 prefix 221 217 0.982
A 7 v9n-v9 random 4000 read_all 220 216 0.982
A 7 v9n-v9 random 4000 slice 223 217 0.973
A 7 v9n-v9 random 32000 load 373 373 1.000
A 7 v9n-v9 random 32000 prefix 175 122 0.697
A 7 v9n-v9 random 32000 read_all 149 124 0.832
A 7 v9n-v9 random 32000 slice 175 122 0.697
A 7 v9n-v9 random 1000000 load 558 547 0.980
A 7 v9n-v9 random 1000000 prefix 49 49 1.000
A 7 v9n-v9 random 1000000 read_all 167 163 0.976
A 7 v9n-v9 random 1000000 slice 112 77 0.688
A 8 v9-v9n docs 4000 load 848 843 0.994
A 8 v9-v9n docs 4000 prefix 229 226 0.987
A 8 v9-v9n docs 4000 read_all 229 221 0.965
A 8 v9-v9n docs 4000 slice 229 221 0.965
A 8 v9-v9n docs 32000 load 573 583 1.017
A 8 v9-v9n docs 32000 prefix 170 126 0.741
A 8 v9-v9n docs 32000 read_all 147 128 0.871
A 8 v9-v9n docs 32000 slice 174 127 0.730
A 8 v9-v9n json 4000 load 443 437 0.986
A 8 v9-v9n json 4000 prefix 140 136 0.971
A 8 v9-v9n json 4000 read_all 140 135 0.964
A 8 v9-v9n json 4000 slice 141 134 0.950
A 8 v9-v9n json 32000 load 248 239 0.964
A 8 v9-v9n json 32000 prefix 111 79 0.712
A 8 v9-v9n json 32000 read_all 81 79 0.975
A 8 v9-v9n json 32000 slice 122 80 0.656
A 8 v9-v9n random 4000 load 677 684 1.010
A 8 v9-v9n random 4000 prefix 218 214 0.982
A 8 v9-v9n random 4000 read_all 218 214 0.982
A 8 v9-v9n random 4000 slice 221 216 0.977
A 8 v9-v9n random 32000 load 366 361 0.986
A 8 v9-v9n random 32000 prefix 160 120 0.750
A 8 v9-v9n random 32000 read_all 139 122 0.878
A 8 v9-v9n random 32000 slice 163 122 0.748
A 8 v9-v9n random 1000000 load 545 543 0.996
A 8 v9-v9n random 1000000 prefix 49 48 0.980
A 8 v9-v9n random 1000000 read_all 165 164 0.994
A 8 v9-v9n random 1000000 slice 112 77 0.688
A 9 v9n-v9 docs 4000 load 850 844 0.993
A 9 v9n-v9 docs 4000 prefix 229 221 0.965
A 9 v9n-v9 docs 4000 read_all 228 221 0.969
A 9 v9n-v9 docs 4000 slice 231 223 0.965
A 9 v9n-v9 docs 32000 load 577 572 0.991
A 9 v9n-v9 docs 32000 prefix 179 126 0.704
A 9 v9n-v9 docs 32000 read_all 155 128 0.826
A 9 v9n-v9 docs 32000 slice 183 127 0.694
A 9 v9n-v9 json 4000 load 441 443 1.005
A 9 v9n-v9 json 4000 prefix 143 133 0.930
A 9 v9n-v9 json 4000 read_all 140 134 0.957
A 9 v9n-v9 json 4000 slice 142 134 0.944
A 9 v9n-v9 json 32000 load 240 236 0.983
A 9 v9n-v9 json 32000 prefix 119 78 0.655
A 9 v9n-v9 json 32000 read_all 80 80 1.000
A 9 v9n-v9 json 32000 slice 132 79 0.598
A 9 v9n-v9 random 4000 load 686 687 1.001
A 9 v9n-v9 random 4000 prefix 219 215 0.982
A 9 v9n-v9 random 4000 read_all 218 216 0.991
A 9 v9n-v9 random 4000 slice 221 218 0.986
A 9 v9n-v9 random 32000 load 371 362 0.976
A 9 v9n-v9 random 32000 prefix 171 120 0.702
A 9 v9n-v9 random 32000 read_all 151 122 0.808
A 9 v9n-v9 random 32000 slice 174 121 0.695
A 9 v9n-v9 random 1000000 load 544 544 1.000
A 9 v9n-v9 random 1000000 prefix 49 48 0.980
A 9 v9n-v9 random 1000000 read_all 164 166 1.012
A 9 v9n-v9 random 1000000 slice 112 77 0.688
A 10 v9-v9n docs 4000 load 835 851 1.019
A 10 v9-v9n docs 4000 prefix 231 224 0.970
A 10 v9-v9n docs 4000 read_all 226 220 0.973
A 10 v9-v9n docs 4000 slice 229 225 0.983
A 10 v9-v9n docs 32000 load 571 578 1.012
A 10 v9-v9n docs 32000 prefix 169 127 0.751
A 10 v9-v9n docs 32000 read_all 144 129 0.896
A 10 v9-v9n docs 32000 slice 171 130 0.760
A 10 v9-v9n json 4000 load 439 444 1.011
A 10 v9-v9n json 4000 prefix 142 135 0.951
A 10 v9-v9n json 4000 read_all 140 135 0.964
A 10 v9-v9n json 4000 slice 142 134 0.944
A 10 v9-v9n json 32000 load 236 232 0.983
A 10 v9-v9n json 32000 prefix 111 78 0.703
A 10 v9-v9n json 32000 read_all 80 82 1.025
A 10 v9-v9n json 32000 slice 123 80 0.650
A 10 v9-v9n random 4000 load 677 677 1.000
A 10 v9-v9n random 4000 prefix 218 216 0.991
A 10 v9-v9n random 4000 read_all 217 216 0.995
A 10 v9-v9n random 4000 slice 221 219 0.991
A 10 v9-v9n random 32000 load 373 359 0.962
A 10 v9-v9n random 32000 prefix 159 121 0.761
A 10 v9-v9n random 32000 read_all 139 122 0.878
A 10 v9-v9n random 32000 slice 163 123 0.755
A 10 v9-v9n random 1000000 load 542 526 0.970
A 10 v9-v9n random 1000000 prefix 49 47 0.959
A 10 v9-v9n random 1000000 read_all 166 164 0.988
A 10 v9-v9n random 1000000 slice 113 77 0.681
A 11 v9n-v9 docs 4000 load 842 838 0.995
A 11 v9n-v9 docs 4000 prefix 230 219 0.952
A 11 v9n-v9 docs 4000 read_all 226 220 0.973
A 11 v9n-v9 docs 4000 slice 228 221 0.969
A 11 v9n-v9 docs 32000 load 572 572 1.000
A 11 v9n-v9 docs 32000 prefix 181 127 0.702
A 11 v9n-v9 docs 32000 read_all 154 129 0.838
A 11 v9n-v9 docs 32000 slice 183 128 0.699
A 11 v9n-v9 json 4000 load 441 438 0.993
A 11 v9n-v9 json 4000 prefix 143 132 0.923
A 11 v9n-v9 json 4000 read_all 140 133 0.950
A 11 v9n-v9 json 4000 slice 141 133 0.943
A 11 v9n-v9 json 32000 load 235 230 0.979
A 11 v9n-v9 json 32000 prefix 123 78 0.634
A 11 v9n-v9 json 32000 read_all 81 79 0.975
A 11 v9n-v9 json 32000 slice 132 79 0.598
A 11 v9n-v9 random 4000 load 678 681 1.004
A 11 v9n-v9 random 4000 prefix 218 215 0.986
A 11 v9n-v9 random 4000 read_all 218 215 0.986
A 11 v9n-v9 random 4000 slice 222 217 0.977
A 11 v9n-v9 random 32000 load 366 359 0.981
A 11 v9n-v9 random 32000 prefix 168 120 0.714
A 11 v9n-v9 random 32000 read_all 149 121 0.812
A 11 v9n-v9 random 32000 slice 173 121 0.699
A 11 v9n-v9 random 1000000 load 554 540 0.975
A 11 v9n-v9 random 1000000 prefix 48 48 1.000
A 11 v9n-v9 random 1000000 read_all 165 166 1.006
A 11 v9n-v9 random 1000000 slice 111 77 0.694
A 12 v9-v9n docs 4000 load 841 850 1.011
A 12 v9-v9n docs 4000 prefix 226 220 0.973
A 12 v9-v9n docs 4000 read_all 226 219 0.969
A 12 v9-v9n docs 4000 slice 228 222 0.974
A 12 v9-v9n docs 32000 load 580 573 0.988
A 12 v9-v9n docs 32000 prefix 168 125 0.744
A 12 v9-v9n docs 32000 read_all 145 128 0.883
A 12 v9-v9n docs 32000 slice 172 127 0.738
A 12 v9-v9n json 4000 load 440 443 1.007
A 12 v9-v9n json 4000 prefix 139 133 0.957
A 12 v9-v9n json 4000 read_all 141 134 0.950
A 12 v9-v9n json 4000 slice 142 134 0.944
A 12 v9-v9n json 32000 load 241 237 0.983
A 12 v9-v9n json 32000 prefix 111 78 0.703
A 12 v9-v9n json 32000 read_all 80 79 0.988
A 12 v9-v9n json 32000 slice 122 79 0.648
A 12 v9-v9n random 4000 load 686 682 0.994
A 12 v9-v9n random 4000 prefix 219 214 0.977
A 12 v9-v9n random 4000 read_all 217 214 0.986
A 12 v9-v9n random 4000 slice 221 217 0.982
A 12 v9-v9n random 32000 load 369 358 0.970
A 12 v9-v9n random 32000 prefix 160 120 0.750
A 12 v9-v9n random 32000 read_all 139 121 0.871
A 12 v9-v9n random 32000 slice 163 120 0.736
A 12 v9-v9n random 1000000 load 542 542 1.000
A 12 v9-v9n random 1000000 prefix 48 48 1.000
A 12 v9-v9n random 1000000 read_all 164 165 1.006
A 12 v9-v9n random 1000000 slice 111 78 0.703
A 13 v9n-v9 docs 4000 load 842 838 0.995
A 13 v9n-v9 docs 4000 prefix 229 220 0.961
A 13 v9n-v9 docs 4000 read_all 225 219 0.973
A 13 v9n-v9 docs 4000 slice 227 221 0.974
A 13 v9n-v9 docs 32000 load 572 565 0.988
A 13 v9n-v9 docs 32000 prefix 168 127 0.756
A 13 v9n-v9 docs 32000 read_all 144 129 0.896
A 13 v9n-v9 docs 32000 slice 171 128 0.749
A 13 v9n-v9 json 4000 load 437 437 1.000
A 13 v9n-v9 json 4000 prefix 141 133 0.943
A 13 v9n-v9 json 4000 read_all 141 133 0.943
A 13 v9n-v9 json 4000 slice 143 133 0.930
A 13 v9n-v9 json 32000 load 237 238 1.004
A 13 v9n-v9 json 32000 prefix 114 78 0.684
A 13 v9n-v9 json 32000 read_all 79 79 1.000
A 13 v9n-v9 json 32000 slice 121 79 0.653
A 13 v9n-v9 random 4000 load 679 672 0.990
A 13 v9n-v9 random 4000 prefix 218 213 0.977
A 13 v9n-v9 random 4000 read_all 217 214 0.986
A 13 v9n-v9 random 4000 slice 221 216 0.977
A 13 v9n-v9 random 32000 load 363 377 1.039
A 13 v9n-v9 random 32000 prefix 153 120 0.784
A 13 v9n-v9 random 32000 read_all 138 122 0.884
A 13 v9n-v9 random 32000 slice 162 122 0.753
A 13 v9n-v9 random 1000000 load 534 537 1.006
A 13 v9n-v9 random 1000000 prefix 48 49 1.021
A 13 v9n-v9 random 1000000 read_all 165 164 0.994
A 13 v9n-v9 random 1000000 slice 111 78 0.703
A 14 v9-v9n docs 4000 load 865 835 0.965
A 14 v9-v9n docs 4000 prefix 229 222 0.969
A 14 v9-v9n docs 4000 read_all 227 222 0.978
A 14 v9-v9n docs 4000 slice 229 222 0.969
A 14 v9-v9n docs 32000 load 573 571 0.997
A 14 v9-v9n docs 32000 prefix 167 126 0.754
A 14 v9-v9n docs 32000 read_all 145 129 0.890
A 14 v9-v9n docs 32000 slice 171 127 0.743
A 14 v9-v9n json 4000 load 440 440 1.000
A 14 v9-v9n json 4000 prefix 141 131 0.929
A 14 v9-v9n json 4000 read_all 141 134 0.950
A 14 v9-v9n json 4000 slice 142 134 0.944
A 14 v9-v9n json 32000 load 240 234 0.975
A 14 v9-v9n json 32000 prefix 110 78 0.709
A 14 v9-v9n json 32000 read_all 81 80 0.988
A 14 v9-v9n json 32000 slice 120 79 0.658
A 14 v9-v9n random 4000 load 677 667 0.985
A 14 v9-v9n random 4000 prefix 219 213 0.973
A 14 v9-v9n random 4000 read_all 219 214 0.977
A 14 v9-v9n random 4000 slice 220 216 0.982
A 14 v9-v9n random 32000 load 373 365 0.979
A 14 v9-v9n random 32000 prefix 158 120 0.759
A 14 v9-v9n random 32000 read_all 139 121 0.871
A 14 v9-v9n random 32000 slice 162 120 0.741
A 14 v9-v9n random 1000000 load 541 541 1.000
A 14 v9-v9n random 1000000 prefix 48 48 1.000
A 14 v9-v9n random 1000000 read_all 164 166 1.012
A 14 v9-v9n random 1000000 slice 112 78 0.696
B 1 v9n-v9 docs 4000 load 828 828 1.000
B 1 v9n-v9 docs 4000 prefix 230 220 0.957
B 1 v9n-v9 docs 4000 read_all 226 221 0.978
B 1 v9n-v9 docs 4000 slice 226 222 0.982
B 1 v9n-v9 docs 32000 load 569 572 1.005
B 1 v9n-v9 docs 32000 prefix 168 126 0.750
B 1 v9n-v9 docs 32000 read_all 144 128 0.889
B 1 v9n-v9 docs 32000 slice 172 127 0.738
B 1 v9n-v9 json 4000 load 440 436 0.991
B 1 v9n-v9 json 4000 prefix 143 132 0.923
B 1 v9n-v9 json 4000 read_all 139 134 0.964
B 1 v9n-v9 json 4000 slice 141 132 0.936
B 1 v9n-v9 json 32000 load 241 237 0.983
B 1 v9n-v9 json 32000 prefix 109 78 0.716
B 1 v9n-v9 json 32000 read_all 79 80 1.013
B 1 v9n-v9 json 32000 slice 122 79 0.648
B 1 v9n-v9 random 4000 load 688 672 0.977
B 1 v9n-v9 random 4000 prefix 218 213 0.977
B 1 v9n-v9 random 4000 read_all 216 213 0.986
B 1 v9n-v9 random 4000 slice 220 214 0.973
B 1 v9n-v9 random 32000 load 371 375 1.011
B 1 v9n-v9 random 32000 prefix 155 120 0.774
B 1 v9n-v9 random 32000 read_all 139 123 0.885
B 1 v9n-v9 random 32000 slice 163 122 0.748
B 1 v9n-v9 random 1000000 load 508 523 1.030
B 1 v9n-v9 random 1000000 prefix 47 47 1.000
B 1 v9n-v9 random 1000000 read_all 163 165 1.012
B 1 v9n-v9 random 1000000 slice 109 77 0.706
B 2 v9-v9n docs 4000 load 834 832 0.998
B 2 v9-v9n docs 4000 prefix 228 220 0.965
B 2 v9-v9n docs 4000 read_all 227 220 0.969
B 2 v9-v9n docs 4000 slice 228 221 0.969
B 2 v9-v9n docs 32000 load 570 565 0.991
B 2 v9-v9n docs 32000 prefix 173 126 0.728
B 2 v9-v9n docs 32000 read_all 143 128 0.895
B 2 v9-v9n docs 32000 slice 178 127 0.713
B 2 v9-v9n json 4000 load 443 443 1.000
B 2 v9-v9n json 4000 prefix 141 133 0.943
B 2 v9-v9n json 4000 read_all 139 133 0.957
B 2 v9-v9n json 4000 slice 141 133 0.943
B 2 v9-v9n json 32000 load 242 234 0.967
B 2 v9-v9n json 32000 prefix 110 77 0.700
B 2 v9-v9n json 32000 read_all 80 79 0.988
B 2 v9-v9n json 32000 slice 127 79 0.622
B 2 v9-v9n random 4000 load 675 673 0.997
B 2 v9-v9n random 4000 prefix 219 212 0.968
B 2 v9-v9n random 4000 read_all 216 214 0.991
B 2 v9-v9n random 4000 slice 220 215 0.977
B 2 v9-v9n random 32000 load 372 359 0.965
B 2 v9-v9n random 32000 prefix 166 120 0.723
B 2 v9-v9n random 32000 read_all 139 122 0.878
B 2 v9-v9n random 32000 slice 169 121 0.716
B 2 v9-v9n random 1000000 load 530 527 0.994
B 2 v9-v9n random 1000000 prefix 48 48 1.000
B 2 v9-v9n random 1000000 read_all 164 164 1.000
B 2 v9-v9n random 1000000 slice 111 77 0.694
B 3 v9n-v9 docs 4000 load 849 837 0.986
B 3 v9n-v9 docs 4000 prefix 227 220 0.969
B 3 v9n-v9 docs 4000 read_all 224 219 0.978
B 3 v9n-v9 docs 4000 slice 230 219 0.952
B 3 v9n-v9 docs 32000 load 569 572 1.005
B 3 v9n-v9 docs 32000 prefix 168 126 0.750
B 3 v9n-v9 docs 32000 read_all 144 128 0.889
B 3 v9n-v9 docs 32000 slice 171 128 0.749
B 3 v9n-v9 json 4000 load 436 437 1.002
B 3 v9n-v9 json 4000 prefix 140 133 0.950
B 3 v9n-v9 json 4000 read_all 140 134 0.957
B 3 v9n-v9 json 4000 slice 142 133 0.937
B 3 v9n-v9 json 32000 load 238 234 0.983
B 3 v9n-v9 json 32000 prefix 111 78 0.703
B 3 v9n-v9 json 32000 read_all 79 79 1.000
B 3 v9n-v9 json 32000 slice 120 79 0.658
B 3 v9n-v9 random 4000 load 677 682 1.007
B 3 v9n-v9 random 4000 prefix 218 214 0.982
B 3 v9n-v9 random 4000 read_all 216 214 0.991
B 3 v9n-v9 random 4000 slice 220 216 0.982
B 3 v9n-v9 random 32000 load 372 361 0.970
B 3 v9n-v9 random 32000 prefix 152 120 0.789
B 3 v9n-v9 random 32000 read_all 139 121 0.871
B 3 v9n-v9 random 32000 slice 162 122 0.753
B 3 v9n-v9 random 1000000 load 543 534 0.983
B 3 v9n-v9 random 1000000 prefix 49 48 0.980
B 3 v9n-v9 random 1000000 read_all 164 164 1.000
B 3 v9n-v9 random 1000000 slice 111 77 0.694
B 4 v9-v9n docs 4000 load 839 833 0.993
B 4 v9-v9n docs 4000 prefix 227 217 0.956
B 4 v9-v9n docs 4000 read_all 226 219 0.969
B 4 v9-v9n docs 4000 slice 228 221 0.969
B 4 v9-v9n docs 32000 load 578 579 1.002
B 4 v9-v9n docs 32000 prefix 168 126 0.750
B 4 v9-v9n docs 32000 read_all 144 128 0.889
B 4 v9-v9n docs 32000 slice 171 128 0.749
B 4 v9-v9n json 4000 load 444 435 0.980
B 4 v9-v9n json 4000 prefix 140 132 0.943
B 4 v9-v9n json 4000 read_all 140 133 0.950
B 4 v9-v9n json 4000 slice 142 133 0.937
B 4 v9-v9n json 32000 load 238 237 0.996
B 4 v9-v9n json 32000 prefix 111 78 0.703
B 4 v9-v9n json 32000 read_all 80 78 0.975
B 4 v9-v9n json 32000 slice 121 79 0.653
B 4 v9-v9n random 4000 load 699 679 0.971
B 4 v9-v9n random 4000 prefix 220 215 0.977
B 4 v9-v9n random 4000 read_all 218 214 0.982
B 4 v9-v9n random 4000 slice 222 215 0.968
B 4 v9-v9n random 32000 load 358 364 1.017
B 4 v9-v9n random 32000 prefix 153 120 0.784
B 4 v9-v9n random 32000 read_all 139 122 0.878
B 4 v9-v9n random 32000 slice 164 121 0.738
B 4 v9-v9n random 1000000 load 555 548 0.987
B 4 v9-v9n random 1000000 prefix 48 47 0.979
B 4 v9-v9n random 1000000 read_all 165 164 0.994
B 4 v9-v9n random 1000000 slice 111 77 0.694
B 5 v9n-v9 docs 4000 load 833 838 1.006
B 5 v9n-v9 docs 4000 prefix 229 219 0.956
B 5 v9n-v9 docs 4000 read_all 226 220 0.973
B 5 v9n-v9 docs 4000 slice 229 220 0.961
B 5 v9n-v9 docs 32000 load 569 570 1.002
B 5 v9n-v9 docs 32000 prefix 168 126 0.750
B 5 v9n-v9 docs 32000 read_all 144 127 0.882
B 5 v9n-v9 docs 32000 slice 173 128 0.740
B 5 v9n-v9 json 4000 load 447 437 0.978
B 5 v9n-v9 json 4000 prefix 141 134 0.950
B 5 v9n-v9 json 4000 read_all 140 134 0.957
B 5 v9n-v9 json 4000 slice 141 133 0.943
B 5 v9n-v9 json 32000 load 240 238 0.992
B 5 v9n-v9 json 32000 prefix 111 78 0.703
B 5 v9n-v9 json 32000 read_all 80 80 1.000
B 5 v9n-v9 json 32000 slice 122 79 0.648
B 5 v9n-v9 random 4000 load 689 684 0.993
B 5 v9n-v9 random 4000 prefix 219 215 0.982
B 5 v9n-v9 random 4000 read_all 218 214 0.982
B 5 v9n-v9 random 4000 slice 222 217 0.977
B 5 v9n-v9 random 32000 load 363 362 0.997
B 5 v9n-v9 random 32000 prefix 152 120 0.789
B 5 v9n-v9 random 32000 read_all 137 121 0.883
B 5 v9n-v9 random 32000 slice 162 121 0.747
B 5 v9n-v9 random 1000000 load 546 534 0.978
B 5 v9n-v9 random 1000000 prefix 48 47 0.979
B 5 v9n-v9 random 1000000 read_all 164 163 0.994
B 5 v9n-v9 random 1000000 slice 111 77 0.694
B 6 v9-v9n docs 4000 load 841 831 0.988
B 6 v9-v9n docs 4000 prefix 227 219 0.965
B 6 v9-v9n docs 4000 read_all 227 220 0.969
B 6 v9-v9n docs 4000 slice 227 220 0.969
B 6 v9-v9n docs 32000 load 558 575 1.030
B 6 v9-v9n docs 32000 prefix 168 126 0.750
B 6 v9-v9n docs 32000 read_all 144 128 0.889
B 6 v9-v9n docs 32000 slice 172 128 0.744
B 6 v9-v9n json 4000 load 441 444 1.007
B 6 v9-v9n json 4000 prefix 140 131 0.936
B 6 v9-v9n json 4000 read_all 140 133 0.950
B 6 v9-v9n json 4000 slice 142 133 0.937
B 6 v9-v9n json 32000 load 236 235 0.996
B 6 v9-v9n json 32000 prefix 111 77 0.694
B 6 v9-v9n json 32000 read_all 80 79 0.988
B 6 v9-v9n json 32000 slice 122 79 0.648
B 6 v9-v9n random 4000 load 688 676 0.983
B 6 v9-v9n random 4000 prefix 219 214 0.977
B 6 v9-v9n random 4000 read_all 217 213 0.982
B 6 v9-v9n random 4000 slice 221 216 0.977
B 6 v9-v9n random 32000 load 365 366 1.003
B 6 v9-v9n random 32000 prefix 152 120 0.789
B 6 v9-v9n random 32000 read_all 138 122 0.884
B 6 v9-v9n random 32000 slice 161 121 0.752
B 6 v9-v9n random 1000000 load 546 525 0.962
B 6 v9-v9n random 1000000 prefix 49 47 0.959
B 6 v9-v9n random 1000000 read_all 165 165 1.000
B 6 v9-v9n random 1000000 slice 112 77 0.688
B 7 v9n-v9 docs 4000 load 825 845 1.024
B 7 v9n-v9 docs 4000 prefix 234 220 0.940
B 7 v9n-v9 docs 4000 read_all 229 220 0.961
B 7 v9n-v9 docs 4000 slice 236 220 0.932
B 7 v9n-v9 docs 32000 load 578 573 0.991
B 7 v9n-v9 docs 32000 prefix 167 126 0.754
B 7 v9n-v9 docs 32000 read_all 144 127 0.882
B 7 v9n-v9 docs 32000 slice 170 128 0.753
B 7 v9n-v9 json 4000 load 451 441 0.978
B 7 v9n-v9 json 4000 prefix 142 132 0.930
B 7 v9n-v9 json 4000 read_all 140 133 0.950
B 7 v9n-v9 json 4000 slice 142 132 0.930
B 7 v9n-v9 json 32000 load 240 237 0.988
B 7 v9n-v9 json 32000 prefix 111 78 0.703
B 7 v9n-v9 json 32000 read_all 80 80 1.000
B 7 v9n-v9 json 32000 slice 121 79 0.653
B 7 v9n-v9 random 4000 load 710 694 0.977
B 7 v9n-v9 random 4000 prefix 219 213 0.973
B 7 v9n-v9 random 4000 read_all 220 213 0.968
B 7 v9n-v9 random 4000 slice 223 217 0.973
B 7 v9n-v9 random 32000 load 372 361 0.970
B 7 v9n-v9 random 32000 prefix 153 121 0.791
B 7 v9n-v9 random 32000 read_all 140 122 0.871
B 7 v9n-v9 random 32000 slice 163 121 0.742
B 7 v9n-v9 random 1000000 load 527 547 1.038
B 7 v9n-v9 random 1000000 prefix 48 47 0.979
B 7 v9n-v9 random 1000000 read_all 163 165 1.012
B 7 v9n-v9 random 1000000 slice 112 77 0.688
B 8 v9-v9n docs 4000 load 835 835 1.000
B 8 v9-v9n docs 4000 prefix 227 219 0.965
B 8 v9-v9n docs 4000 read_all 226 220 0.973
B 8 v9-v9n docs 4000 slice 227 220 0.969
B 8 v9-v9n docs 32000 load 580 574 0.990
B 8 v9-v9n docs 32000 prefix 168 126 0.750
B 8 v9-v9n docs 32000 read_all 144 128 0.889
B 8 v9-v9n docs 32000 slice 171 129 0.754
B 8 v9-v9n json 4000 load 442 438 0.991
B 8 v9-v9n json 4000 prefix 140 131 0.936
B 8 v9-v9n json 4000 read_all 140 133 0.950
B 8 v9-v9n json 4000 slice 140 132 0.943
B 8 v9-v9n json 32000 load 241 239 0.992
B 8 v9-v9n json 32000 prefix 113 77 0.681
B 8 v9-v9n json 32000 read_all 79 79 1.000
B 8 v9-v9n json 32000 slice 122 80 0.656
B 8 v9-v9n random 4000 load 692 688 0.994
B 8 v9-v9n random 4000 prefix 218 214 0.982
B 8 v9-v9n random 4000 read_all 217 214 0.986
B 8 v9-v9n random 4000 slice 221 217 0.982
B 8 v9-v9n random 32000 load 373 359 0.962
B 8 v9-v9n random 32000 prefix 155 120 0.774
B 8 v9-v9n random 32000 read_all 139 122 0.878
B 8 v9-v9n random 32000 slice 163 120 0.736
B 8 v9-v9n random 1000000 load 545 548 1.006
B 8 v9-v9n random 1000000 prefix 48 48 1.000
B 8 v9-v9n random 1000000 read_all 166 166 1.000
B 8 v9-v9n random 1000000 slice 111 78 0.703
B 9 v9n-v9 docs 4000 load 840 842 1.002
B 9 v9n-v9 docs 4000 prefix 226 220 0.973
B 9 v9n-v9 docs 4000 read_all 230 220 0.957
B 9 v9n-v9 docs 4000 slice 227 221 0.974
B 9 v9n-v9 docs 32000 load 578 569 0.984
B 9 v9n-v9 docs 32000 prefix 169 126 0.746
B 9 v9n-v9 docs 32000 read_all 145 127 0.876
B 9 v9n-v9 docs 32000 slice 172 127 0.738
B 9 v9n-v9 json 4000 load 442 438 0.991
B 9 v9n-v9 json 4000 prefix 140 132 0.943
B 9 v9n-v9 json 4000 read_all 143 133 0.930
B 9 v9n-v9 json 4000 slice 142 133 0.937
B 9 v9n-v9 json 32000 load 237 237 1.000
B 9 v9n-v9 json 32000 prefix 110 78 0.709
B 9 v9n-v9 json 32000 read_all 80 79 0.988
B 9 v9n-v9 json 32000 slice 121 79 0.653
B 9 v9n-v9 random 4000 load 690 700 1.014
B 9 v9n-v9 random 4000 prefix 219 214 0.977
B 9 v9n-v9 random 4000 read_all 217 214 0.986
B 9 v9n-v9 random 4000 slice 221 217 0.982
B 9 v9n-v9 random 32000 load 367 365 0.995
B 9 v9n-v9 random 32000 prefix 154 120 0.779
B 9 v9n-v9 random 32000 read_all 138 121 0.877
B 9 v9n-v9 random 32000 slice 162 121 0.747
B 9 v9n-v9 random 1000000 load 537 528 0.983
B 9 v9n-v9 random 1000000 prefix 48 48 1.000
B 9 v9n-v9 random 1000000 read_all 164 165 1.006
B 9 v9n-v9 random 1000000 slice 111 78 0.703
B 10 v9-v9n docs 4000 load 840 841 1.001
B 10 v9-v9n docs 4000 prefix 227 220 0.969
B 10 v9-v9n docs 4000 read_all 225 219 0.973
B 10 v9-v9n docs 4000 slice 227 220 0.969
B 10 v9-v9n docs 32000 load 574 567 0.988
B 10 v9-v9n docs 32000 prefix 166 126 0.759
B 10 v9-v9n docs 32000 read_all 144 128 0.889
B 10 v9-v9n docs 32000 slice 172 128 0.744
B 10 v9-v9n json 4000 load 444 441 0.993
B 10 v9-v9n json 4000 prefix 140 131 0.936
B 10 v9-v9n json 4000 read_all 140 133 0.950
B 10 v9-v9n json 4000 slice 142 132 0.930
B 10 v9-v9n json 32000 load 237 235 0.992
B 10 v9-v9n json 32000 prefix 110 78 0.709
B 10 v9-v9n json 32000 read_all 80 79 0.988
B 10 v9-v9n json 32000 slice 122 79 0.648
B 10 v9-v9n random 4000 load 686 687 1.001
B 10 v9-v9n random 4000 prefix 218 215 0.986
B 10 v9-v9n random 4000 read_all 217 213 0.982
B 10 v9-v9n random 4000 slice 220 217 0.986
B 10 v9-v9n random 32000 load 362 369 1.019
B 10 v9-v9n random 32000 prefix 158 119 0.753
B 10 v9-v9n random 32000 read_all 138 121 0.877
B 10 v9-v9n random 32000 slice 162 120 0.741
B 10 v9-v9n random 1000000 load 543 541 0.996
B 10 v9-v9n random 1000000 prefix 49 47 0.959
B 10 v9-v9n random 1000000 read_all 164 163 0.994
B 10 v9-v9n random 1000000 slice 110 77 0.700
B 11 v9n-v9 docs 4000 load 846 844 0.998
B 11 v9n-v9 docs 4000 prefix 226 220 0.973
B 11 v9n-v9 docs 4000 read_all 226 220 0.973
B 11 v9n-v9 docs 4000 slice 228 220 0.965
B 11 v9n-v9 docs 32000 load 580 570 0.983
B 11 v9n-v9 docs 32000 prefix 167 126 0.754
B 11 v9n-v9 docs 32000 read_all 144 127 0.882
B 11 v9n-v9 docs 32000 slice 171 127 0.743
B 11 v9n-v9 json 4000 load 445 437 0.982
B 11 v9n-v9 json 4000 prefix 140 131 0.936
B 11 v9n-v9 json 4000 read_all 140 133 0.950
B 11 v9n-v9 json 4000 slice 140 133 0.950
B 11 v9n-v9 json 32000 load 236 236 1.000
B 11 v9n-v9 json 32000 prefix 110 77 0.700
B 11 v9n-v9 json 32000 read_all 79 79 1.000
B 11 v9n-v9 json 32000 slice 122 79 0.648
B 11 v9n-v9 random 4000 load 690 698 1.012
B 11 v9n-v9 random 4000 prefix 218 214 0.982
B 11 v9n-v9 random 4000 read_all 216 214 0.991
B 11 v9n-v9 random 4000 slice 220 217 0.986
B 11 v9n-v9 random 32000 load 389 384 0.987
B 11 v9n-v9 random 32000 prefix 159 121 0.761
B 11 v9n-v9 random 32000 read_all 140 122 0.871
B 11 v9n-v9 random 32000 slice 162 121 0.747
B 11 v9n-v9 random 1000000 load 542 529 0.976
B 11 v9n-v9 random 1000000 prefix 48 48 1.000
B 11 v9n-v9 random 1000000 read_all 164 164 1.000
B 11 v9n-v9 random 1000000 slice 111 78 0.703
B 12 v9-v9n docs 4000 load 839 828 0.987
B 12 v9-v9n docs 4000 prefix 227 221 0.974
B 12 v9-v9n docs 4000 read_all 226 220 0.973
B 12 v9-v9n docs 4000 slice 228 220 0.965
B 12 v9-v9n docs 32000 load 574 571 0.995
B 12 v9-v9n docs 32000 prefix 168 127 0.756
B 12 v9-v9n docs 32000 read_all 144 128 0.889
B 12 v9-v9n docs 32000 slice 171 128 0.749
B 12 v9-v9n json 4000 load 439 436 0.993
B 12 v9-v9n json 4000 prefix 139 132 0.950
B 12 v9-v9n json 4000 read_all 140 133 0.950
B 12 v9-v9n json 4000 slice 140 132 0.943
B 12 v9-v9n json 32000 load 237 237 1.000
B 12 v9-v9n json 32000 prefix 110 78 0.709
B 12 v9-v9n json 32000 read_all 80 79 0.988
B 12 v9-v9n json 32000 slice 122 79 0.648
B 12 v9-v9n random 4000 load 688 684 0.994
B 12 v9-v9n random 4000 prefix 219 214 0.977
B 12 v9-v9n random 4000 read_all 217 215 0.991
B 12 v9-v9n random 4000 slice 220 217 0.986
B 12 v9-v9n random 32000 load 363 360 0.992
B 12 v9-v9n random 32000 prefix 159 120 0.755
B 12 v9-v9n random 32000 read_all 139 121 0.871
B 12 v9-v9n random 32000 slice 162 121 0.747
B 12 v9-v9n random 1000000 load 544 537 0.987
B 12 v9-v9n random 1000000 prefix 48 48 1.000
B 12 v9-v9n random 1000000 read_all 165 165 1.000
B 12 v9-v9n random 1000000 slice 111 77 0.694
C 1 v9n-v9 docs 4000 load 838 835 0.996
C 1 v9n-v9 docs 4000 prefix 227 221 0.974
C 1 v9n-v9 docs 4000 read_all 225 221 0.982
C 1 v9n-v9 docs 4000 slice 229 222 0.969
C 1 v9n-v9 docs 32000 load 571 573 1.004
C 1 v9n-v9 docs 32000 prefix 168 126 0.750
C 1 v9n-v9 docs 32000 read_all 144 128 0.889
C 1 v9n-v9 docs 32000 slice 172 128 0.744
C 1 v9n-v9 json 4000 load 447 443 0.991
C 1 v9n-v9 json 4000 prefix 140 132 0.943
C 1 v9n-v9 json 4000 read_all 139 134 0.964
C 1 v9n-v9 json 4000 slice 141 134 0.950
C 1 v9n-v9 json 32000 load 240 237 0.988
C 1 v9n-v9 json 32000 prefix 110 79 0.718
C 1 v9n-v9 json 32000 read_all 80 80 1.000
C 1 v9n-v9 json 32000 slice 122 79 0.648
C 1 v9n-v9 random 4000 load 691 687 0.994
C 1 v9n-v9 random 4000 prefix 218 216 0.991
C 1 v9n-v9 random 4000 read_all 219 215 0.982
C 1 v9n-v9 random 4000 slice 220 218 0.991
C 1 v9n-v9 random 32000 load 377 361 0.958
C 1 v9n-v9 random 32000 prefix 162 121 0.747
C 1 v9n-v9 random 32000 read_all 140 123 0.879
C 1 v9n-v9 random 32000 slice 164 122 0.744
C 1 v9n-v9 random 1000000 load 543 541 0.996
C 1 v9n-v9 random 1000000 prefix 49 47 0.959
C 1 v9n-v9 random 1000000 read_all 165 164 0.994
C 1 v9n-v9 random 1000000 slice 111 78 0.703
C 2 v9-v9n docs 4000 load 843 848 1.006
C 2 v9-v9n docs 4000 prefix 226 221 0.978
C 2 v9-v9n docs 4000 read_all 225 219 0.973
C 2 v9-v9n docs 4000 slice 228 221 0.969
C 2 v9-v9n docs 32000 load 575 576 1.002
C 2 v9-v9n docs 32000 prefix 168 126 0.750
C 2 v9-v9n docs 32000 read_all 144 128 0.889
C 2 v9-v9n docs 32000 slice 172 128 0.744
C 2 v9-v9n json 4000 load 442 434 0.982
C 2 v9-v9n json 4000 prefix 140 132 0.943
C 2 v9-v9n json 4000 read_all 139 133 0.957
C 2 v9-v9n json 4000 slice 142 133 0.937
C 2 v9-v9n json 32000 load 239 237 0.992
C 2 v9-v9n json 32000 prefix 110 77 0.700
C 2 v9-v9n json 32000 read_all 79 79 1.000
C 2 v9-v9n json 32000 slice 123 79 0.642
C 2 v9-v9n random 4000 load 689 689 1.000
C 2 v9-v9n random 4000 prefix 219 214 0.977
C 2 v9-v9n random 4000 read_all 217 215 0.991
C 2 v9-v9n random 4000 slice 220 217 0.986
C 2 v9-v9n random 32000 load 368 357 0.970
C 2 v9-v9n random 32000 prefix 159 120 0.755
C 2 v9-v9n random 32000 read_all 139 121 0.871
C 2 v9-v9n random 32000 slice 161 121 0.752
C 2 v9-v9n random 1000000 load 537 542 1.009
C 2 v9-v9n random 1000000 prefix 48 47 0.979
C 2 v9-v9n random 1000000 read_all 165 165 1.000
C 2 v9-v9n random 1000000 slice 112 77 0.688
C 3 v9n-v9 docs 4000 load 842 844 1.002
C 3 v9n-v9 docs 4000 prefix 226 222 0.982
C 3 v9n-v9 docs 4000 read_all 227 222 0.978
C 3 v9n-v9 docs 4000 slice 230 224 0.974
C 3 v9n-v9 docs 32000 load 585 557 0.952
C 3 v9n-v9 docs 32000 prefix 198 136 0.687
C 3 v9n-v9 docs 32000 read_all 181 126 0.696
C 3 v9n-v9 docs 32000 slice 193 127 0.658
C 3 v9n-v9 json 4000 load 457 474 1.037
C 3 v9n-v9 json 4000 prefix 175 133 0.760
C 3 v9n-v9 json 4000 read_all 139 137 0.986
C 3 v9n-v9 json 4000 slice 143 135 0.944
C 3 v9n-v9 json 32000 load 262 246 0.939
C 3 v9n-v9 json 32000 prefix 110 79 0.718
C 3 v9n-v9 json 32000 read_all 79 79 1.000
C 3 v9n-v9 json 32000 slice 120 78 0.650
C 3 v9n-v9 random 4000 load 1055 675 0.640
C 3 v9n-v9 random 4000 prefix 230 214 0.930
C 3 v9n-v9 random 4000 read_all 236 216 0.915
C 3 v9n-v9 random 4000 slice 239 221 0.925
C 3 v9n-v9 random 32000 load 516 371 0.719
C 3 v9n-v9 random 32000 prefix 157 121 0.771
C 3 v9n-v9 random 32000 read_all 145 121 0.834
C 3 v9n-v9 random 32000 slice 166 122 0.735
C 3 v9n-v9 random 1000000 load 532 553 1.039
C 3 v9n-v9 random 1000000 prefix 51 47 0.922
C 3 v9n-v9 random 1000000 read_all 182 164 0.901
C 3 v9n-v9 random 1000000 slice 124 77 0.621
C 4 v9-v9n docs 4000 load 835 838 1.004
C 4 v9-v9n docs 4000 prefix 226 219 0.969
C 4 v9-v9n docs 4000 read_all 225 218 0.969
C 4 v9-v9n docs 4000 slice 226 220 0.973
C 4 v9-v9n docs 32000 load 577 565 0.979
C 4 v9-v9n docs 32000 prefix 169 125 0.740
C 4 v9-v9n docs 32000 read_all 145 127 0.876
C 4 v9-v9n docs 32000 slice 173 126 0.728
C 4 v9-v9n json 4000 load 439 439 1.000
C 4 v9-v9n json 4000 prefix 139 131 0.942
C 4 v9-v9n json 4000 read_all 141 133 0.943
C 4 v9-v9n json 4000 slice 141 133 0.943
C 4 v9-v9n json 32000 load 233 237 1.017
C 4 v9-v9n json 32000 prefix 112 77 0.688
C 4 v9-v9n json 32000 read_all 79 78 0.987
C 4 v9-v9n json 32000 slice 122 78 0.639
C 4 v9-v9n random 4000 load 693 687 0.991
C 4 v9-v9n random 4000 prefix 223 212 0.951
C 4 v9-v9n random 4000 read_all 219 214 0.977
C 4 v9-v9n random 4000 slice 222 216 0.973
C 4 v9-v9n random 32000 load 370 370 1.000
C 4 v9-v9n random 32000 prefix 159 120 0.755
C 4 v9-v9n random 32000 read_all 141 121 0.858
C 4 v9-v9n random 32000 slice 164 121 0.738
C 4 v9-v9n random 1000000 load 538 532 0.989
C 4 v9-v9n random 1000000 prefix 49 48 0.980
C 4 v9-v9n random 1000000 read_all 165 163 0.988
C 4 v9-v9n random 1000000 slice 112 77 0.688
C 5 v9n-v9 docs 4000 load 846 856 1.012
C 5 v9n-v9 docs 4000 prefix 230 224 0.974
C 5 v9n-v9 docs 4000 read_all 226 221 0.978
C 5 v9n-v9 docs 4000 slice 230 221 0.961
C 5 v9n-v9 docs 32000 load 571 562 0.984
C 5 v9n-v9 docs 32000 prefix 178 127 0.713
C 5 v9n-v9 docs 32000 read_all 152 129 0.849
C 5 v9n-v9 docs 32000 slice 182 129 0.709
C 5 v9n-v9 json 4000 load 442 445 1.007
C 5 v9n-v9 json 4000 prefix 142 135 0.951
C 5 v9n-v9 json 4000 read_all 141 135 0.957
C 5 v9n-v9 json 4000 slice 142 134 0.944
C 5 v9n-v9 json 32000 load 236 244 1.034
C 5 v9n-v9 json 32000 prefix 119 78 0.655
C 5 v9n-v9 json 32000 read_all 79 81 1.025
C 5 v9n-v9 json 32000 slice 131 79 0.603
C 5 v9n-v9 random 4000 load 678 676 0.997
C 5 v9n-v9 random 4000 prefix 219 214 0.977
C 5 v9n-v9 random 4000 read_all 218 213 0.977
C 5 v9n-v9 random 4000 slice 220 216 0.982
C 5 v9n-v9 random 32000 load 360 364 1.011
C 5 v9n-v9 random 32000 prefix 165 121 0.733
C 5 v9n-v9 random 32000 read_all 147 123 0.837
C 5 v9n-v9 random 32000 slice 170 122 0.718
C 5 v9n-v9 random 1000000 load 531 550 1.036
C 5 v9n-v9 random 1000000 prefix 49 48 0.980
C 5 v9n-v9 random 1000000 read_all 163 167 1.025
C 5 v9n-v9 random 1000000 slice 111 78 0.703
C 6 v9-v9n docs 4000 load 850 841 0.989
C 6 v9-v9n docs 4000 prefix 233 222 0.953
C 6 v9-v9n docs 4000 read_all 228 220 0.965
C 6 v9-v9n docs 4000 slice 231 223 0.965
C 6 v9-v9n docs 32000 load 575 572 0.995
C 6 v9-v9n docs 32000 prefix 170 129 0.759
C 6 v9-v9n docs 32000 read_all 146 131 0.897
C 6 v9-v9n docs 32000 slice 174 129 0.741
C 6 v9-v9n json 4000 load 442 436 0.986
C 6 v9-v9n json 4000 prefix 143 133 0.930
C 6 v9-v9n json 4000 read_all 143 136 0.951
C 6 v9-v9n json 4000 slice 144 135 0.938
C 6 v9-v9n json 32000 load 239 236 0.987
C 6 v9-v9n json 32000 prefix 112 79 0.705
C 6 v9-v9n json 32000 read_all 80 80 1.000
C 6 v9-v9n json 32000 slice 126 80 0.635
C 6 v9-v9n random 4000 load 697 677 0.971
C 6 v9-v9n random 4000 prefix 222 215 0.968
C 6 v9-v9n random 4000 read_all 219 215 0.982
C 6 v9-v9n random 4000 slice 223 219 0.982
C 6 v9-v9n random 32000 load 363 378 1.041
C 6 v9-v9n random 32000 prefix 156 121 0.776
C 6 v9-v9n random 32000 read_all 139 122 0.878
C 6 v9-v9n random 32000 slice 162 123 0.759
C 6 v9-v9n random 1000000 load 548 596 1.088
C 6 v9-v9n random 1000000 prefix 49 48 0.980
C 6 v9-v9n random 1000000 read_all 167 168 1.006
C 6 v9-v9n random 1000000 slice 112 79 0.705
C 7 v9n-v9 docs 4000 load 848 851 1.004
C 7 v9n-v9 docs 4000 prefix 227 221 0.974
C 7 v9n-v9 docs 4000 read_all 227 223 0.982
C 7 v9n-v9 docs 4000 slice 229 225 0.983
C 7 v9n-v9 docs 32000 load 581 584 1.005
C 7 v9n-v9 docs 32000 prefix 170 127 0.747
C 7 v9n-v9 docs 32000 read_all 146 130 0.890
C 7 v9n-v9 docs 32000 slice 174 129 0.741
C 7 v9n-v9 json 4000 load 446 453 1.016
C 7 v9n-v9 json 4000 prefix 142 134 0.944
C 7 v9n-v9 json 4000 read_all 142 136 0.958
C 7 v9n-v9 json 4000 slice 142 134 0.944
C 7 v9n-v9 json 32000 load 241 239 0.992
C 7 v9n-v9 json 32000 prefix 113 78 0.690
C 7 v9n-v9 json 32000 read_all 79 80 1.013
C 7 v9n-v9 json 32000 slice 124 79 0.637
C 7 v9n-v9 random 4000 load 701 697 0.994
C 7 v9n-v9 random 4000 prefix 220 214 0.973
C 7 v9n-v9 random 4000 read_all 220 216 0.982
C 7 v9n-v9 random 4000 slice 223 219 0.982
C 7 v9n-v9 random 32000 load 366 369 1.008
C 7 v9n-v9 random 32000 prefix 162 121 0.747
C 7 v9n-v9 random 32000 read_all 141 123 0.872
C 7 v9n-v9 random 32000 slice 165 122 0.739
C 7 v9n-v9 random 1000000 load 533 550 1.032
C 7 v9n-v9 random 1000000 prefix 49 49 1.000
C 7 v9n-v9 random 1000000 read_all 166 165 0.994
C 7 v9n-v9 random 1000000 slice 113 77 0.681
C 8 v9-v9n docs 4000 load 846 843 0.996
C 8 v9-v9n docs 4000 prefix 227 223 0.982
C 8 v9-v9n docs 4000 read_all 227 226 0.996
C 8 v9-v9n docs 4000 slice 228 227 0.996
C 8 v9-v9n docs 32000 load 596 585 0.982
C 8 v9-v9n docs 32000 prefix 170 127 0.747
C 8 v9-v9n docs 32000 read_all 147 130 0.884
C 8 v9-v9n docs 32000 slice 176 128 0.727
C 8 v9-v9n json 4000 load 438 442 1.009
C 8 v9-v9n json 4000 prefix 142 135 0.951
C 8 v9-v9n json 4000 read_all 145 135 0.931
C 8 v9-v9n json 4000 slice 144 135 0.938
C 8 v9-v9n json 32000 load 244 241 0.988
C 8 v9-v9n json 32000 prefix 113 78 0.690
C 8 v9-v9n json 32000 read_all 81 79 0.975
C 8 v9-v9n json 32000 slice 128 81 0.633
C 8 v9-v9n random 4000 load 695 694 0.999
C 8 v9-v9n random 4000 prefix 223 216 0.969
C 8 v9-v9n random 4000 read_all 218 215 0.986
C 8 v9-v9n random 4000 slice 224 219 0.978
C 8 v9-v9n random 32000 load 378 365 0.966
C 8 v9-v9n random 32000 prefix 159 121 0.761
C 8 v9-v9n random 32000 read_all 144 121 0.840
C 8 v9-v9n random 32000 slice 164 121 0.738
C 8 v9-v9n random 1000000 load 542 538 0.993
C 8 v9-v9n random 1000000 prefix 51 48 0.941
C 8 v9-v9n random 1000000 read_all 172 164 0.953
C 8 v9-v9n random 1000000 slice 114 78 0.684
C 9 v9n-v9 docs 4000 load 852 851 0.999
C 9 v9n-v9 docs 4000 prefix 228 222 0.974
C 9 v9n-v9 docs 4000 read_all 229 220 0.961
C 9 v9n-v9 docs 4000 slice 232 220 0.948
C 9 v9n-v9 docs 32000 load 605 581 0.960
C 9 v9n-v9 docs 32000 prefix 172 126 0.733
C 9 v9n-v9 docs 32000 read_all 147 128 0.871
C 9 v9n-v9 docs 32000 slice 176 128 0.727
C 9 v9n-v9 json 4000 load 467 443 0.949
C 9 v9n-v9 json 4000 prefix 142 134 0.944
C 9 v9n-v9 json 4000 read_all 141 135 0.957
C 9 v9n-v9 json 4000 slice 144 133 0.924
C 9 v9n-v9 json 32000 load 241 242 1.004
C 9 v9n-v9 json 32000 prefix 111 78 0.703
C 9 v9n-v9 json 32000 read_all 80 79 0.988
C 9 v9n-v9 json 32000 slice 123 80 0.650
C 9 v9n-v9 random 4000 load 692 695 1.004
C 9 v9n-v9 random 4000 prefix 221 215 0.973
C 9 v9n-v9 random 4000 read_all 218 214 0.982
C 9 v9n-v9 random 4000 slice 223 217 0.973
C 9 v9n-v9 random 32000 load 365 368 1.008
C 9 v9n-v9 random 32000 prefix 155 122 0.787
C 9 v9n-v9 random 32000 read_all 139 127 0.914
C 9 v9n-v9 random 32000 slice 162 123 0.759
C 9 v9n-v9 random 1000000 load 554 565 1.020
C 9 v9n-v9 random 1000000 prefix 50 49 0.980
C 9 v9n-v9 random 1000000 read_all 168 166 0.988
C 9 v9n-v9 random 1000000 slice 113 79 0.699
C 10 v9-v9n docs 4000 load 855 847 0.991
C 10 v9-v9n docs 4000 prefix 227 221 0.974
C 10 v9-v9n docs 4000 read_all 227 223 0.982
C 10 v9-v9n docs 4000 slice 231 222 0.961
C 10 v9-v9n docs 32000 load 573 573 1.000
C 10 v9-v9n docs 32000 prefix 169 128 0.757
C 10 v9-v9n docs 32000 read_all 144 130 0.903
C 10 v9-v9n docs 32000 slice 172 128 0.744
C 10 v9-v9n json 4000 load 447 458 1.025
C 10 v9-v9n json 4000 prefix 142 135 0.951
C 10 v9-v9n json 4000 read_all 142 136 0.958
C 10 v9-v9n json 4000 slice 143 134 0.937
C 10 v9-v9n json 32000 load 235 231 0.983
C 10 v9-v9n json 32000 prefix 111 79 0.712
C 10 v9-v9n json 32000 read_all 79 80 1.013
C 10 v9-v9n json 32000 slice 122 78 0.639
C 10 v9-v9n random 4000 load 689 714 1.036
C 10 v9-v9n random 4000 prefix 221 215 0.973
C 10 v9-v9n random 4000 read_all 217 215 0.991
C 10 v9-v9n random 4000 slice 222 218 0.982
C 10 v9-v9n random 32000 load 362 364 1.006
C 10 v9-v9n random 32000 prefix 159 121 0.761
C 10 v9-v9n random 32000 read_all 138 121 0.877
C 10 v9-v9n random 32000 slice 161 121 0.752
C 10 v9-v9n random 1000000 load 537 541 1.007
C 10 v9-v9n random 1000000 prefix 49 48 0.980
C 10 v9-v9n random 1000000 read_all 164 164 1.000
C 10 v9-v9n random 1000000 slice 111 77 0.694
C 11 v9n-v9 docs 4000 load 840 835 0.994
C 11 v9n-v9 docs 4000 prefix 228 221 0.969
C 11 v9n-v9 docs 4000 read_all 227 220 0.969
C 11 v9n-v9 docs 4000 slice 230 220 0.957
C 11 v9n-v9 docs 32000 load 586 574 0.980
C 11 v9n-v9 docs 32000 prefix 170 125 0.735
C 11 v9n-v9 docs 32000 read_all 148 128 0.865
C 11 v9n-v9 docs 32000 slice 177 127 0.718
C 11 v9n-v9 json 4000 load 440 443 1.007
C 11 v9n-v9 json 4000 prefix 140 134 0.957
C 11 v9n-v9 json 4000 read_all 141 134 0.950
C 11 v9n-v9 json 4000 slice 143 133 0.930
C 11 v9n-v9 json 32000 load 239 245 1.025
C 11 v9n-v9 json 32000 prefix 112 77 0.688
C 11 v9n-v9 json 32000 read_all 79 79 1.000
C 11 v9n-v9 json 32000 slice 121 80 0.661
C 11 v9n-v9 random 4000 load 688 680 0.988
C 11 v9n-v9 random 4000 prefix 219 214 0.977
C 11 v9n-v9 random 4000 read_all 217 214 0.986
C 11 v9n-v9 random 4000 slice 222 216 0.973
C 11 v9n-v9 random 32000 load 360 357 0.992
C 11 v9n-v9 random 32000 prefix 155 120 0.774
C 11 v9n-v9 random 32000 read_all 138 121 0.877
C 11 v9n-v9 random 32000 slice 161 120 0.745
C 11 v9n-v9 random 1000000 load 535 540 1.009
C 11 v9n-v9 random 1000000 prefix 48 49 1.021
C 11 v9n-v9 random 1000000 read_all 166 167 1.006
C 11 v9n-v9 random 1000000 slice 111 78 0.703
C 12 v9-v9n docs 4000 load 839 856 1.020
C 12 v9-v9n docs 4000 prefix 228 222 0.974
C 12 v9-v9n docs 4000 read_all 225 220 0.978
C 12 v9-v9n docs 4000 slice 227 223 0.982
C 12 v9-v9n docs 32000 load 572 574 1.003
C 12 v9-v9n docs 32000 prefix 169 126 0.746
C 12 v9-v9n docs 32000 read_all 145 128 0.883
C 12 v9-v9n docs 32000 slice 172 126 0.733
C 12 v9-v9n json 4000 load 439 441 1.005
C 12 v9-v9n json 4000 prefix 141 136 0.965
C 12 v9-v9n json 4000 read_all 142 134 0.944
C 12 v9-v9n json 4000 slice 141 135 0.957
C 12 v9-v9n json 32000 load 237 241 1.017
C 12 v9-v9n json 32000 prefix 112 78 0.696
C 12 v9-v9n json 32000 read_all 79 79 1.000
C 12 v9-v9n json 32000 slice 122 79 0.648
C 12 v9-v9n random 4000 load 698 697 0.999
C 12 v9-v9n random 4000 prefix 219 214 0.977
C 12 v9-v9n random 4000 read_all 219 213 0.973
C 12 v9-v9n random 4000 slice 223 216 0.969
C 12 v9-v9n random 32000 load 363 358 0.986
C 12 v9-v9n random 32000 prefix 159 121 0.761
C 12 v9-v9n random 32000 read_all 138 122 0.884
C 12 v9-v9n random 32000 slice 164 121 0.738
C 12 v9-v9n random 1000000 load 558 537 0.962
C 12 v9-v9n random 1000000 prefix 49 48 0.980
C 12 v9-v9n random 1000000 read_all 165 165 1.000
C 12 v9-v9n random 1000000 slice 112 77 0.688
diff --git a/src/backend/access/common/toast_compression.c
b/src/backend/access/common/toast_compression.c
index d161634c25b..27ea82ece0d 100644
--- a/src/backend/access/common/toast_compression.c
+++ b/src/backend/access/common/toast_compression.c
@@ -52,21 +52,6 @@ int default_toast_compression =
DEFAULT_TOAST_COMPRESSION;
* frame's window plus a block, about 2.5MB at the default compression level;
* zstd shrinks that buffer by itself once later uses no longer need it.
*/
-static ZSTD_DCtx *zstd_dctx = NULL;
-
-static ZSTD_DCtx *
-zstd_get_dctx(void)
-{
- if (zstd_dctx == NULL)
- {
- zstd_dctx = ZSTD_createDCtx();
- if (zstd_dctx == NULL)
- elog(ERROR, "could not create zstd decompression
context");
- }
- else
- ZSTD_DCtx_reset(zstd_dctx, ZSTD_reset_session_only);
- return zstd_dctx;
-}
#endif
#define NO_COMPRESSION_SUPPORT(method) \
@@ -380,11 +365,10 @@ zstd_decompress_datum(const varlena *value)
* content size; also check that it matches the size in our header, as
* pglz does.
*/
- rawsize = ZSTD_decompressDCtx(zstd_get_dctx(),
-
VARDATA(result),
-
VARDATA_COMPRESSED_GET_EXTSIZE(value),
- (const char
*) value + VARHDRSZ_COMPRESSED_LONG,
-
VARSIZE(value) - VARHDRSZ_COMPRESSED_LONG);
+ rawsize = ZSTD_decompress(VARDATA(result),
+
VARDATA_COMPRESSED_GET_EXTSIZE(value),
+ (const char *) value
+ VARHDRSZ_COMPRESSED_LONG,
+ VARSIZE(value) -
VARHDRSZ_COMPRESSED_LONG);
if (ZSTD_isError(rawsize) ||
rawsize != VARDATA_COMPRESSED_GET_EXTSIZE(value))
ereport(ERROR,
@@ -437,7 +421,9 @@ zstd_decompress_datum_slice(const varlena *value, int32
slicelength)
/* allocate memory for the uncompressed slice */
result = (varlena *) palloc(slicelength + VARHDRSZ);
- dctx = zstd_get_dctx();
+ dctx = ZSTD_createDCtx();
+ if (dctx == NULL)
+ elog(ERROR, "could not create zstd decompression context");
inbuf.src = (const char *) value + VARHDRSZ_COMPRESSED_LONG;
inbuf.size = VARSIZE(value) - VARHDRSZ_COMPRESSED_LONG;
@@ -470,6 +456,9 @@ zstd_decompress_datum_slice(const varlena *value, int32
slicelength)
}
}
+ /* release the context before any possible error is thrown */
+ ZSTD_freeDCtx(dctx);
+
if (failed)
ereport(ERROR,
(errcode(ERRCODE_DATA_CORRUPTED),
#!/bin/bash
# Which decompression branch substr(v, 500000, 100) takes on 1 MB zstd values
# in a UTF8 and a SQL_ASCII database, and how many page faults the backend
# takes per value with the reused context and with a fresh one. No timing.
# branch_faults.sh REUSE_BINDIR FRESH_BINDIR WORKDIR
# REUSE_BINDIR bin/ of a build with the 0003 decode code (reused DCtx)
# FRESH_BINDIR bin/ of the same tree with the reuse undone
# (nocfbot-v9n-without-reuse.diff.txt: the v7 decode code)
# WORKDIR empty scratch directory; the cluster is ~30 MB
# One small cluster (shared_buffers 32MB), 20 values of 1 MB per database,
# the "random" corpus of bench.sh. Queries run in single-user mode, under
# gdb (breakpoints at the entry of zstd_decompress_datum, the full branch,
# and zstd_decompress_datum_slice, printing slicelength) and under
# perf stat -e page-faults (one query vs six; faults per value =
# (six - one) / 5 / 20, which cancels startup). Both builds must share the
# catalog version, as they do when only toast_compression.c differs.
set -eu
R=$1 F=$2 W=$3
D=$W/cl; P=$((56400 + RANDOM % 100))
"$R/initdb" -D $D -A trust --no-sync -U postgres -E SQL_ASCII --locale=C
>/dev/null
cat >> $D/postgresql.conf <<CONF
port = $P
unix_socket_directories = '$W'
listen_addresses = ''
shared_buffers = 32MB
autovacuum = off
default_toast_compression = zstd
CONF
"$R/pg_ctl" -D $D -l $W/log -w start >/dev/null
q() { "$R/psql" -X -qAt -h $W -p $P -U postgres -v ON_ERROR_STOP=1 "$@"; }
q -d postgres -c "CREATE DATABASE u8 ENCODING 'UTF8' TEMPLATE template0
LC_COLLATE 'C' LC_CTYPE 'C'"
q -d postgres -c "CREATE DATABASE sqlascii ENCODING 'SQL_ASCII' TEMPLATE
template0 LC_COLLATE 'C' LC_CTYPE 'C'"
for db in u8 sqlascii; do
q -d $db -c "SELECT setseed(0.42)" -c "CREATE TABLE t (id int, v text)" \
-c "INSERT INTO t SELECT g, left(string_agg(md5(random()::text) ||
encode(sha256(random()::text::bytea), 'base64'), ''), 1000000)
FROM generate_series(1, 20) g, generate_series(1, 1000000 / 76 + 1) i
GROUP BY g"
q -d $db -c "SELECT format('db=%s encoding=%s eml=%s values=%s bytes=%s
method=%s slice_md5=%s', current_database(),
current_setting('server_encoding'),
pg_encoding_max_length(pg_char_to_encoding(current_setting('server_encoding'))),
count(*), min(octet_length(v)), string_agg(DISTINCT
pg_column_compression(v), ','),
md5(string_agg(substr(v, 500000, 100), '' ORDER BY id))) FROM
t"
done
"$R/pg_ctl" -D $D -m fast -w stop >/dev/null
cat > $W/br.gdb <<'GDB'
set pagination off
set confirm off
break *zstd_decompress_datum
commands
silent
continue
end
break *zstd_decompress_datum_slice
commands
silent
printf "slicelength=%d\n", $rsi
continue
end
run
info breakpoints
GDB
single() { "$1/postgres" --single -D $D -c shared_buffers=32MB $2; }
for db in u8 sqlascii; do
for e in "substr(v, 500000, 100)" "substr(v, 1, 100)" "v || 'x'"; do
out=$(echo "SELECT sum(length($e)) FROM t" | gdb -q -batch -x $W/br.gdb
--args "$R/postgres" --single -D $D -c shared_buffers=32MB $db 2>&1)
full=$(echo "$out" | sed -n '/^Num/,$p' | awk
'/<zstd_decompress_datum>/{s=1;next} /<zstd_decompress_datum_slice>/{s=2;next}
/already hit/{h[s]=$4} END{print (h[1]?h[1]:0)}')
sl=$(echo "$out" | sed -n '/^Num/,$p' | awk
'/<zstd_decompress_datum_slice>/{s=1;next} s&&/already hit/{print $4; exit}')
lens=$(echo "$out" | grep -oE 'slicelength=[0-9]+' | sort -u | tr '\n' ' ')
echo "branch db=$db expr=\"$e\" full_entries=$full slice_entries=${sl:-0}
${lens}"
done
done
pf() { # bindir db expr n
for i in $(seq $4); do echo "SELECT sum(length($3)) FROM t;"; done |
perf stat -x, -e page-faults "$1/postgres" --single -D $D -c
shared_buffers=32MB $2 2>&1 >/dev/null |
awk -F, '/page-faults/{print $1}'
}
for c in "sqlascii|substr(v, 500000, 100)" "sqlascii|substr(v, 1, 100)"
"sqlascii|v || 'x'" "u8|substr(v, 500000, 100)"; do
db=${c%%|*} e=${c#*|}
for rep in 1 2 3; do
for b in reuse fresh; do
[ $b = reuse ] && bin=$R || bin=$F
one=$(pf $bin $db "$e" 1); six=$(pf $bin $db "$e" 6)
echo "faults db=$db expr=\"$e\" build=$b rep=$rep one=$one six=$six
per_value=$(( (six - one) / 100 ))"
done
done
done
rm -rf $D $W/br.gdb $W/log
db=u8 encoding=UTF8 eml=4 values=20 bytes=1000000 method=zstd
slice_md5=b64e80e19d753cc3bb413f32a8dd3aa2
db=sqlascii encoding=SQL_ASCII eml=1 values=20 bytes=1000000 method=zstd
slice_md5=b64e80e19d753cc3bb413f32a8dd3aa2
branch db=u8 expr="substr(v, 500000, 100)" full_entries=20 slice_entries=0
branch db=u8 expr="substr(v, 1, 100)" full_entries=0 slice_entries=20
slicelength=400
branch db=u8 expr="v || 'x'" full_entries=20 slice_entries=0
branch db=sqlascii expr="substr(v, 500000, 100)" full_entries=0
slice_entries=20 slicelength=500099
branch db=sqlascii expr="substr(v, 1, 100)" full_entries=0 slice_entries=20
slicelength=100
branch db=sqlascii expr="v || 'x'" full_entries=20 slice_entries=0
faults db=sqlascii expr="substr(v, 500000, 100)" build=reuse rep=1 one=4387
six=4389 per_value=0
faults db=sqlascii expr="substr(v, 500000, 100)" build=fresh rep=1 one=12011
six=53637 per_value=416
faults db=sqlascii expr="substr(v, 500000, 100)" build=reuse rep=2 one=4388
six=4391 per_value=0
faults db=sqlascii expr="substr(v, 500000, 100)" build=fresh rep=2 one=12010
six=53636 per_value=416
faults db=sqlascii expr="substr(v, 500000, 100)" build=reuse rep=3 one=4389
six=4391 per_value=0
faults db=sqlascii expr="substr(v, 500000, 100)" build=fresh rep=3 one=12010
six=53636 per_value=416
faults db=sqlascii expr="substr(v, 1, 100)" build=reuse rep=1 one=4173 six=4171
per_value=0
faults db=sqlascii expr="substr(v, 1, 100)" build=fresh rep=1 one=4206 six=4208
per_value=0
faults db=sqlascii expr="substr(v, 1, 100)" build=reuse rep=2 one=4172 six=4176
per_value=0
faults db=sqlascii expr="substr(v, 1, 100)" build=fresh rep=2 one=4209 six=4209
per_value=0
faults db=sqlascii expr="substr(v, 1, 100)" build=reuse rep=3 one=4174 six=4174
per_value=0
faults db=sqlascii expr="substr(v, 1, 100)" build=fresh rep=3 one=4212 six=4209
per_value=0
faults db=sqlascii expr="v || 'x'" build=reuse rep=1 one=16498 six=79698
per_value=632
faults db=sqlascii expr="v || 'x'" build=fresh rep=1 one=16458 six=79563
per_value=631
faults db=sqlascii expr="v || 'x'" build=reuse rep=2 one=16498 six=79697
per_value=631
faults db=sqlascii expr="v || 'x'" build=fresh rep=2 one=16458 six=79564
per_value=631
faults db=sqlascii expr="v || 'x'" build=reuse rep=3 one=16498 six=79698
per_value=632
faults db=sqlascii expr="v || 'x'" build=fresh rep=3 one=16458 six=79566
per_value=631
faults db=u8 expr="substr(v, 500000, 100)" build=reuse rep=1 one=16492
six=79682 per_value=631
faults db=u8 expr="substr(v, 500000, 100)" build=fresh rep=1 one=16455
six=79555 per_value=631
faults db=u8 expr="substr(v, 500000, 100)" build=reuse rep=2 one=16491
six=79683 per_value=631
faults db=u8 expr="substr(v, 500000, 100)" build=fresh rep=2 one=16454
six=79555 per_value=631
faults db=u8 expr="substr(v, 500000, 100)" build=reuse rep=3 one=16492
six=79682 per_value=631
faults db=u8 expr="substr(v, 500000, 100)" build=fresh rep=3 one=16455
six=79552 per_value=630