diff --git a/database_config_files/mariadb/innodb_compare_local.cnf b/database_config_files/mariadb/innodb_compare_local.cnf new file mode 100644 index 0000000..991d94d --- /dev/null +++ b/database_config_files/mariadb/innodb_compare_local.cnf @@ -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 diff --git a/database_config_files/mariadb/tides_compare_local.cnf b/database_config_files/mariadb/tides_compare_local.cnf new file mode 100644 index 0000000..0f7d13f --- /dev/null +++ b/database_config_files/mariadb/tides_compare_local.cnf @@ -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 diff --git a/database_config_files/mariadb/tides_compare_v10.cnf b/database_config_files/mariadb/tides_compare_v10.cnf new file mode 100644 index 0000000..7950d9b --- /dev/null +++ b/database_config_files/mariadb/tides_compare_v10.cnf @@ -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;). +# A libtidesdb built with the system allocator needs none of this. +# malloc-lib=/lib/x86_64-linux-gnu/libjemalloc.so.2 diff --git a/properties/mariadb/beta/sysbench_local_tidesdb_innodb.properties b/properties/mariadb/beta/sysbench_local_tidesdb_innodb.properties new file mode 100644 index 0000000..982914f --- /dev/null +++ b/properties/mariadb/beta/sysbench_local_tidesdb_innodb.properties @@ -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 --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 diff --git a/properties/mariadb/beta/sysbench_tidesdb10_innodb_rocks_compare.properties b/properties/mariadb/beta/sysbench_tidesdb10_innodb_rocks_compare.properties new file mode 100644 index 0000000..28e3d66 --- /dev/null +++ b/properties/mariadb/beta/sysbench_tidesdb10_innodb_rocks_compare.properties @@ -0,0 +1,133 @@ +############################################################################# +# Three-way sysbench comparison -- TidesDB v10 (TideSQL 5.0.0) / InnoDB / RocksDB +# +# 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: +# Run the same sysbench-lua OLTP workloads against MariaDB with each of the +# three storage engines, one engine per run, then compare with +# scripts/ResultsCompareRaw.pl. Toggle the engine and its matching config +# together for each leg. +# +# BEFORE RUNNING (fill in the four environment paths marked FIXME below): +# - taf.db_software_install_dir : a MariaDB install that has ha_tidesdb.so +# (TideSQL 5.0.0), ha_rocksdb.so, and InnoDB. +# - taf.db_data_dir : scratch data directory. +# - LD_LIBRARY_PATH in taf.environment_variables : the directory holding +# libtidesdb.so.10 (e.g. /usr/local/lib). +# - LD_PRELOAD in taf.environment_variables : path to libjemalloc.so.2. +# REQUIRED when libtidesdb.so.10 was built against jemalloc (the installed +# build is), because TAF starts mariadbd directly and the plugin will not +# dlopen without jemalloc in the process image. Drop the LD_PRELOAD entry +# if the library was built with the system allocator (verify with: +# ldd /libtidesdb.so.10 | grep jemalloc). It is harmless for the +# InnoDB and RocksDB legs, so it can stay set for all three. +# +# USAGE (one-time client build, then a run per engine): +# perl taf.pl --prop=./properties/mariadb/beta/sysbench_tidesdb10_innodb_rocks_compare.properties --action=setup-client +# perl taf.pl --prop=./properties/mariadb/beta/sysbench_tidesdb10_innodb_rocks_compare.properties +############################################################################# + +# MAIN PROPERTIES + +# Storage engine -- uncomment exactly one, and its matching config below. +taf.db_engine=TidesDB +#taf.db_engine=InnoDB +#taf.db_engine=RocksDB + +# Runtime environment. LD_LIBRARY_PATH resolves libtidesdb.so.10; LD_PRELOAD +# puts jemalloc in the image so the v10 plugin can load (see header). +# FIXME set the two paths for this host. +taf.environment_variables=LD_LIBRARY_PATH;/usr/local/lib,LD_PRELOAD;/lib/x86_64-linux-gnu/libjemalloc.so.2 + +# MariaDB config file -- uncomment the one matching the engine above. +taf.db_config_file=./database_config_files/mariadb/tides_compare_v10.cnf +#taf.db_config_file=./database_config_files/mariadb/innodb_compare.cnf +#taf.db_config_file=./database_config_files/mariadb/rocks_compare_v6.cnf + +sysbench_lua.oltp_dist_type=zipfian + +# TidesDB surfaces a first-committer-wins conflict as error 1180 at COMMIT. +# Ignoring it (plus the InnoDB/RocksDB lock-wait/deadlock codes) keeps the +# comparison fair across engines rather than aborting the tidesdb leg. +sysbench_lua.ignore_errors=1180,1020,1205,1213 + +# All tests start fresh +taf.test_setup_mode=per_test + +############################################################################# +# TAF SETTINGS (GLOBAL) +############################################################################# + +taf.action=init-start-db-run-tests +#taf.action=run-tests + +taf.ignore_running_db_process=false +taf.comments="tidesdb10-vs-innodb-vs-rocksdb" +taf.host=localhost + +############################################################################# +# TEST EXECUTION SETTINGS +############################################################################# + +taf.duration=240 +taf.iterations=3 +taf.test_suite=sysbench-lua +taf.test_type=adhoc + +sysbench_lua.use_bmk=false +sysbench_lua.bmk_update_range_size=64 +sysbench_lua.oltp_index_updates=3 + +# Workloads to run +taf.tests=OLTP_RW,OLTP_WO_MODIFIABLE,UPDATE_KEY_TRANSACTIONAL_MODIFIABLE,UPDATE_NO_KEY,INSERT,DELETE + +# Thread counts to sweep +taf.threads=8,16,32,64,128,256,512 + +# Warmup +taf.warmup_duration=200 +taf.warmup_threads=128 + +############################################################################# +# TIMING CONTROLS +############################################################################# + +taf.db_process_rest_enable=true +taf.db_process_rest_low=6 +taf.db_process_rest_high=20 + +############################################################################# +# REPORT GENERATION +############################################################################# + +taf.report_plugin=taf_res_raw_text.pm,text.pm,chart_and_test_info_results_tables_html.pm + +############################################################################# +# DATABASE SETTINGS +############################################################################# + +taf.db_clients_use_unix_socket=true + +# FIXME set the scratch data dir and the MariaDB install (with the three engines). +taf.db_data_dir=/data/data/ +taf.db_software_install_dir=/data/tides_build/mariadb + +############################################################################# +# SYSBENCH-LUA SETTINGS +############################################################################# + +sysbench_lua.db_driver=mariadb +sysbench_lua.number_of_rows=1000000 +sysbench_lua.number_of_tables=8 +sysbench_lua.intermediate_result=2 + +############################################################################# +# SYSBENCH DEBUG +############################################################################# + +sysbench_lua.debug_sysbench=false +taf.tools_debug=true +taf.verbose=true