mirror of
https://github.com/dolthub/dolt.git
synced 2026-02-09 18:59:12 -06:00
142 lines
6.1 KiB
Lua
142 lines
6.1 KiB
Lua
|
|
-- -----------------------------------------------------------------------------
|
|
-- Common code for dolt benchmarks.
|
|
-- -----------------------------------------------------------------------------
|
|
|
|
function init()
|
|
assert(event ~= nil, "this script is meant to be included by other OLTP scripts and should not be called directly.")
|
|
end
|
|
|
|
if sysbench.cmdline.command == nil then
|
|
error("Command is required. Supported commands: prepare, warmup, run, cleanup, help")
|
|
end
|
|
|
|
-- Command line options
|
|
sysbench.cmdline.options = {
|
|
table_size = {"Number of rows per table", 10000},
|
|
create_table_options = {"Extra CREATE TABLE options", ""},
|
|
}
|
|
|
|
-- Prepare the dataset. This command supports parallel execution, i.e. will
|
|
-- benefit from executing with --threads > 1 as long as --tables > 1
|
|
function cmd_prepare()
|
|
local drv = sysbench.sql.driver()
|
|
local con = drv:connect()
|
|
|
|
print("Creating table 'sbtest1'")
|
|
|
|
local create_query = string.format( [[
|
|
CREATE TABLE sbtest1 (
|
|
id INT NOT NULL,
|
|
tiny_int_col TINYINT NOT NULL,
|
|
unsigned_tiny_int_col TINYINT UNSIGNED NOT NULL,
|
|
small_int_col SMALLINT NOT NULL,
|
|
unsigned_small_int_col SMALLINT UNSIGNED NOT NULL,
|
|
medium_int_col MEDIUMINT NOT NULL,
|
|
unsigned_medium_int_col MEDIUMINT UNSIGNED NOT NULL,
|
|
int_col INT NOT NULL,
|
|
unsigned_int_col INT UNSIGNED NOT NULL,
|
|
big_int_col BIGINT NOT NULL,
|
|
unsigned_big_int_col BIGINT UNSIGNED NOT NULL,
|
|
decimal_col DECIMAL NOT NULL,
|
|
float_col FLOAT NOT NULL,
|
|
double_col DOUBLE NOT NULL,
|
|
bit_col BIT NOT NULL,
|
|
char_col CHAR NOT NULL,
|
|
var_char_col VARCHAR(64) NOT NULL,
|
|
tiny_text_col TINYTEXT NOT NULL,
|
|
text_col TEXT NOT NULL,
|
|
medium_text_col MEDIUMTEXT NOT NULL,
|
|
long_text_col LONGTEXT NOT NULL,
|
|
enum_col ENUM('val0', 'val1', 'val2') NOT NULL,
|
|
set_col SET('val0', 'val1', 'val2') NOT NULL,
|
|
date_col DATE NOT NULL,
|
|
time_col TIME NOT NULL,
|
|
datetime_col DATETIME NOT NULL,
|
|
timestamp_col TIMESTAMP NOT NULL,
|
|
year_col YEAR NOT NULL,
|
|
|
|
PRIMARY KEY(id),
|
|
INDEX (big_int_col)
|
|
); ]] .. sysbench.opt.create_table_options)
|
|
|
|
con:query(create_query)
|
|
|
|
if (sysbench.opt.table_size > 0) then
|
|
print(string.format("Inserting %d records into 'sbtest1'", sysbench.opt.table_size))
|
|
end
|
|
|
|
local query = [[INSERT INTO sbtest1
|
|
(id, tiny_int_col, unsigned_tiny_int_col, small_int_col, unsigned_small_int_col, medium_int_col, unsigned_medium_int_col, int_col, unsigned_int_col, big_int_col, unsigned_big_int_col, decimal_col, float_col, double_col, bit_col, char_col, var_char_col, tiny_text_col, text_col, medium_text_col, long_text_col, enum_col, set_col, date_col, time_col, datetime_col, timestamp_col, year_col)
|
|
VALUES
|
|
]]
|
|
|
|
local str_vals = {"val0", "val1", "val2"}
|
|
math.randomseed(0)
|
|
|
|
con:bulk_insert_init(query)
|
|
for i = 1, sysbench.opt.table_size do
|
|
local row_values = "(" .. i .. "," .. -- id
|
|
math.random(-128, 127) .. "," .. -- tiny_int_col
|
|
math.random(0, 255) .. "," .. -- unsigned_tiny_int_col
|
|
math.random(-32768, 32767) .. "," .. -- small_int_col
|
|
math.random(0, 65535) .. "," .. -- unsigned_small_int_col
|
|
math.random(-8388608, 8388607) .. "," .. -- medium_int_col
|
|
math.random(0, 16777215) .. "," .. -- unsigned_medium_int_col
|
|
math.random(-2147483648, 2147483647) .. "," .. -- int_col
|
|
math.random(0, 4294967295) .. "," .. -- unsigned_int_col
|
|
math.random(-4611686018427387904, 4611686018427387903) .. "," .. -- big_int_col
|
|
math.random(0, 9223372036854775807) .. "," .. -- unsigned_big_int_col
|
|
math.random() .. "," .. -- decimal_col
|
|
math.random() .. "," .. -- float_col
|
|
math.random() .. "," .. -- double_col
|
|
math.random(0, 1) .. "," .. -- bit_col
|
|
"'" .. string.char(math.random(0x30, 0x5A)) .. "'" .. "," .. -- char_col
|
|
"'" .. str_vals[math.random(1, 3)] .. "'" .. "," .. -- var_char_col
|
|
"'" .. str_vals[math.random(1, 3)] .. "'" .. "," .. -- tiny_text_col
|
|
"'" .. str_vals[math.random(1, 3)] .. "'" .. "," .. -- text_col
|
|
"'" .. str_vals[math.random(1, 3)] .. "'" .. "," .. -- medium_text_col
|
|
"'" .. str_vals[math.random(1, 3)] .. "'" .. "," .. -- long_text_col
|
|
"'" .. str_vals[math.random(1, 3)] .. "'" .. "," .. -- enum_col
|
|
"'" .. str_vals[math.random(1, 3)] .. "'" .. "," .. -- set_col
|
|
"'2020-0" .. math.random(1, 9) .. "-" .. math.random(10, 28) .. "'" .. "," .. -- date_col
|
|
"'0" .. math.random(1, 9) .. ":" .. math.random(10, 59) .. ":00'" .. "," .. -- time_col
|
|
"'2020-0" .. math.random(1, 9) .. "-" .. math.random(10, 28) .. " 0" .. math.random(1, 9) .. ":" .. math.random(10, 59) .. ":00'" .. "," .. -- datetime_col
|
|
"'2020-0" .. math.random(1, 9) .. "-" .. math.random(10, 28) .. " 0" .. math.random(1, 9) .. ":" .. math.random(10, 59) .. ":00'" .. "," .. -- timestamp_col
|
|
math.random(1901, 2155) .. ")" -- year_col
|
|
|
|
con:bulk_insert_next(row_values)
|
|
end
|
|
con:bulk_insert_done()
|
|
|
|
end
|
|
|
|
|
|
-- Implement parallel prepare and warmup commands, define 'prewarm' as an alias
|
|
-- for 'warmup'
|
|
sysbench.cmdline.commands = {
|
|
prepare = {cmd_prepare, sysbench.cmdline.PARALLEL_COMMAND},
|
|
}
|
|
|
|
local t = sysbench.sql.type
|
|
|
|
function thread_init()
|
|
drv = sysbench.sql.driver()
|
|
con = drv:connect()
|
|
end
|
|
|
|
function thread_done()
|
|
con:disconnect()
|
|
end
|
|
|
|
function cleanup()
|
|
local drv = sysbench.sql.driver()
|
|
local con = drv:connect()
|
|
|
|
print("Dropping table 'sbtest1'")
|
|
con:query("DROP TABLE IF EXISTS sbtest1")
|
|
end
|
|
|
|
|
|
|