Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions database_config_files/mariadb/innodb_compare_local.cnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
###############################################################################
# InnoDB -- LOCAL small-scale config
#
# The InnoDB leg of the local two-way comparison, matched to
# tides_compare_local.cnf: same 4G cache budget, same READ-COMMITTED isolation,
# and innodb_flush_log_at_trx_commit=2 to match TidesDB's memtable_sync_mode=NONE
# (both survive a process crash from the OS page cache but do not fsync the log
# on every commit), so the durability trade is equal on both sides.
###############################################################################

[mysqld]
performance_schema=OFF
disable-log-bin
sync_binlog=0
general_log=OFF
slow_query_log=OFF
default_storage_engine=InnoDB
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
max_connections=300
max_prepared_stmt_count=1000000
open_files_limit=65535
table_open_cache=2000
thread_cache_size=64
transaction_isolation=READ-COMMITTED

tmp_table_size=32M
max_heap_table_size=32M

# InnoDB
innodb_buffer_pool_size=4G
innodb_flush_log_at_trx_commit=2
innodb_doublewrite=1
innodb_flush_method=O_DIRECT
innodb_flush_neighbors=0
innodb_log_file_size=1G
innodb_io_capacity=2000
innodb_io_capacity_max=4000
innodb_read_io_threads=4
innodb_write_io_threads=4
innodb_file_per_table=1
innodb_default_row_format=dynamic
innodb_compression_algorithm=none

[client]
default-character-set=utf8mb4

[mysqldump]
quick
max_allowed_packet=64M
68 changes: 68 additions & 0 deletions database_config_files/mariadb/tides_compare_local.cnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
###############################################################################
# TidesDB v10 (TideSQL 5.0.0) -- LOCAL small-scale config
#
# Sized for a workstation (roughly 16 threads, tens of GB RAM, SSD) that is
# also doing other work, so caches and worker counts are deliberately modest.
# Paired with innodb_compare_local.cnf for a fair two-way sysbench comparison.
# Select with taf.db_config_file and set taf.db_engine=TidesDB.
###############################################################################

[mysqld]
performance_schema=OFF
disable-log-bin
sync_binlog=0
general_log=OFF
slow_query_log=OFF
default_storage_engine=TidesDB
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
max_connections=300
max_prepared_stmt_count=1000000
open_files_limit=65535
table_open_cache=2000
thread_cache_size=64
transaction_isolation=READ-COMMITTED

tmp_table_size=32M
max_heap_table_size=32M

# The mysql.* system tables stay on InnoDB. A small pool is plenty locally.
innodb_buffer_pool_size=512M

plugin_maturity=unknown
plugin_load_add=ha_tidesdb.so

# Read cache. 4G locally, matched to the InnoDB pool in the paired config.
tidesdb_block_cache_size=4G

# Shared memtable write buffer, and the WAL sync mode. NONE keeps commits off
# the per-commit device fsync path; the paired InnoDB config uses
# innodb_flush_log_at_trx_commit=2 for the same "survive a process crash, not a
# power cut" durability so the two engines are compared on equal footing.
tidesdb_memtable_write_buffer_size=64M
tidesdb_memtable_sync_mode=NONE

tidesdb_default_compression=NONE

# Modest worker pools so sysbench (same host) keeps most of the cores.
tidesdb_flush_threads=4
tidesdb_compaction_threads=2

tidesdb_max_open_sstables=0

# Left OFF for a like-for-like run: InnoDB enforces uniqueness, so TidesDB
# should too. Set ON only to isolate raw write throughput.
# tidesdb_skip_unique_check=ON

tidesdb_log_level=NONE

tidesdb_default_bloom_fpr=10
tidesdb_default_tombstone_density_trigger=5000
tidesdb_default_tombstone_density_min_entries=2048

[client]
default-character-set=utf8mb4

[mysqldump]
quick
max_allowed_packet=64M
93 changes: 93 additions & 0 deletions database_config_files/mariadb/tides_compare_v10.cnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
###############################################################################
# TidesDB v10 (TideSQL 5.0.0) comparison config
#
# Paired with innodb_compare.cnf and rocks_compare_v6.cnf for a three-way
# sysbench comparison. Select it per run with taf.db_config_file and set
# taf.db_engine=TidesDB.
#
# This replaces tides_compare_v4.cnf, which used pre-v10 system variables that
# a TidesDB v10 server rejects at startup. Changes from v4:
# removed tidesdb_max_memory_usage (gone in v10)
# removed tidesdb_unified_memtable (memtable is always shared)
# renamed tidesdb_unified_memtable_write_buffer_size -> tidesdb_memtable_write_buffer_size
# renamed tidesdb_unified_memtable_sync_mode -> tidesdb_memtable_sync_mode
# removed tidesdb_default_sync_mode (no per-table SYNC_MODE in v10)
# removed tidesdb_pessimistic_locking (v10 is optimistic MVCC only)
# removed tidesdb_default_l0_queue_stall_threshold (gone in v10)
# removed tidesdb_default_block_index_prefix_len (gone in v10)
###############################################################################

[mysqld]
performance_schema=OFF
disable-log-bin
sync_binlog=0
general_log=OFF
slow_query_log=OFF
default_storage_engine=TidesDB
default_authentication_plugin=mysql_native_password
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
tls_version=TLSv1.2,TLSv1.3
max_connections=600
max_prepared_stmt_count=1000000
open_files_limit=65535
table_open_cache=4000
thread_cache_size=128
transaction_isolation=READ-COMMITTED

sync_master_info=0
sync_relay_log=0
sync_relay_log_info=0

aria_pagecache_buffer_size=128M
aria_sort_buffer_size=128M

tmp_table_size=32M
max_heap_table_size=32M

# The mysql.* system tables stay on InnoDB even when the default engine is
# TidesDB. Give them a small pool, matching the RocksDB config's innodb pool.
innodb_buffer_pool_size=2G

plugin_maturity=unknown
plugin_load_add=ha_tidesdb.so

# Read cache shared across all column families. Sized to sit alongside InnoDB's
# 30G buffer pool and RocksDB's 24G block cache for a comparable memory budget.
tidesdb_block_cache_size=24G

# The memtable is shared across the whole database in v10. This is its write
# buffer, and the WAL sync mode that decides commit durability for every table.
tidesdb_memtable_write_buffer_size=64M
tidesdb_memtable_sync_mode=NONE

tidesdb_default_compression=NONE

tidesdb_flush_threads=8
tidesdb_compaction_threads=4

# 0 = unlimited SSTable handles, bounded only by open_files_limit.
tidesdb_max_open_sstables=0

tidesdb_log_level=NONE

tidesdb_default_bloom_fpr=1

tidesdb_default_tombstone_density_trigger=5000
tidesdb_default_tombstone_density_min_entries=2048

[client]
default-character-set=utf8mb4

[mysqldump]
quick
max_allowed_packet=64M

[mysqld_safe]
# The v10 libtidesdb.so.10 as installed links jemalloc (initial-exec TLS), so
# the plugin fails to dlopen unless jemalloc is in the process image. If TAF
# starts the server through mysqld_safe, uncomment the line below. If TAF starts
# mariadbd directly (the default), preload jemalloc from the run instead, via
# taf.environment_variables in the properties file (LD_PRELOAD;<path to libjemalloc.so.2>).
# A libtidesdb built with the system allocator needs none of this.
# malloc-lib=/lib/x86_64-linux-gnu/libjemalloc.so.2
118 changes: 118 additions & 0 deletions properties/mariadb/beta/sysbench_local_tidesdb_innodb.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
#############################################################################
# LOCAL small-scale sysbench comparison -- TidesDB v10 (TideSQL 5.0.0) vs InnoDB
#
# This file is part of the Test Automation Framework (TAF).
# Copyright (c) 2025-2026 MariaDB Foundation and Jonathan "jeb" Miller
# Licensed under the GNU General Public License, version 2 or later (GPLv2+).
#
# PURPOSE:
# A light, workstation-scale run for sanity-checking TidesDB v10 against
# InnoDB on the same host. Small dataset, short durations, low thread
# counts, modest caches -- meant to finish quickly and leave the machine
# usable, not to produce headline numbers. Run one engine at a time and
# compare with scripts/ResultsCompareRaw.pl.
#
# RocksDB is not included because this local MariaDB build has no
# ha_rocksdb.so. Build MyRocks and add a rocks_compare_local.cnf leg to
# make it three-way.
#
# ONE-TIME PREP:
# TAF needs an install layout (bin/, lib/plugin/), not a raw cmake build
# dir, so install the local build to a prefix first:
# cmake --install <build-mariadb> --prefix ~/mariadb-tidesdb
# Then point taf.db_software_install_dir at that prefix. Make sure
# libtidesdb.so.10 is on the loader path (it installs to /usr/local/lib)
# and, because that build links jemalloc, keep the LD_PRELOAD below.
#
# USAGE:
# perl taf.pl --prop=./properties/mariadb/beta/sysbench_local_tidesdb_innodb.properties --action=setup-client
# perl taf.pl --prop=./properties/mariadb/beta/sysbench_local_tidesdb_innodb.properties
#############################################################################

# Storage engine -- uncomment one, with its matching config below.
taf.db_engine=TidesDB
#taf.db_engine=InnoDB

# LD_LIBRARY_PATH resolves libtidesdb.so.10; LD_PRELOAD puts jemalloc in the
# image so the v10 plugin can dlopen (TAF starts mariadbd directly, so
# malloc-lib does not apply). Drop the LD_PRELOAD entry if libtidesdb was built
# with the system allocator. Harmless for the InnoDB leg, so leave it for both.
taf.environment_variables=LD_LIBRARY_PATH;/usr/local/lib,LD_PRELOAD;/lib/x86_64-linux-gnu/libjemalloc.so.2

# Config -- uncomment the one matching the engine above.
taf.db_config_file=./database_config_files/mariadb/tides_compare_local.cnf
#taf.db_config_file=./database_config_files/mariadb/innodb_compare_local.cnf

sysbench_lua.oltp_dist_type=zipfian

# TidesDB reports a first-committer-wins conflict as 1180 at COMMIT; ignoring it
# (plus the InnoDB lock-wait/deadlock codes) keeps the two legs comparable.
sysbench_lua.ignore_errors=1180,1020,1205,1213

taf.test_setup_mode=per_test

#############################################################################
# TAF SETTINGS
#############################################################################

taf.action=init-start-db-run-tests
taf.ignore_running_db_process=false
taf.comments="local-tidesdb10-vs-innodb"
taf.host=localhost

#############################################################################
# TEST EXECUTION -- scaled down for a workstation
#############################################################################

taf.duration=30
taf.iterations=2
taf.test_suite=sysbench-lua
taf.test_type=adhoc

sysbench_lua.use_bmk=false
sysbench_lua.oltp_index_updates=3

# A representative subset: read-write, write-only, and a keyed update.
taf.tests=OLTP_RW,OLTP_WO_MODIFIABLE,UPDATE_KEY_TRANSACTIONAL_MODIFIABLE

# Thread sweep up to the core count, not beyond, so sysbench and the server
# share the 16 threads without heavy oversubscription.
taf.threads=4,8,16

taf.warmup_duration=20
taf.warmup_threads=16

#############################################################################
# TIMING CONTROLS -- let the server settle between runs
#############################################################################

taf.db_process_rest_enable=true
taf.db_process_rest_low=4
taf.db_process_rest_high=10

#############################################################################
# REPORT GENERATION
#############################################################################

taf.report_plugin=taf_res_raw_text.pm,text.pm,chart_and_test_info_results_tables_html.pm

#############################################################################
# DATABASE SETTINGS (FIXME: set the install prefix and a scratch data dir)
#############################################################################

taf.db_clients_use_unix_socket=true
taf.db_data_dir=/home/agpmastersystem/taf-local-data/
taf.db_software_install_dir=/home/agpmastersystem/mariadb-tidesdb

#############################################################################
# SYSBENCH-LUA -- small dataset that fits comfortably in the 4G cache
#############################################################################

sysbench_lua.db_driver=mariadb
sysbench_lua.number_of_rows=200000
sysbench_lua.number_of_tables=4
sysbench_lua.intermediate_result=2

sysbench_lua.debug_sysbench=false
taf.tools_debug=true
taf.verbose=true
Loading