mirror of https://github.com/postgres/postgres
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.1 KiB
78 lines
2.1 KiB
![]()
2 years ago
|
#!/usr/bin/sysbench
|
||
|
-- This test is designed for testing MariaDB's key_cache_segments for MyISAM,
|
||
|
-- and should work with other storage engines as well.
|
||
|
--
|
||
|
-- For details about key_cache_segments please refer to:
|
||
|
-- http://kb.askmonty.org/v/segmented-key-cache
|
||
|
--
|
||
|
|
||
|
require("oltp_common")
|
||
|
|
||
|
-- Add --number-of-ranges and --delta to the list of standard OLTP options
|
||
|
sysbench.cmdline.options.number_of_ranges =
|
||
|
{"Number of random BETWEEN ranges per SELECT", 10}
|
||
|
sysbench.cmdline.options.delta =
|
||
|
{"Size of BETWEEN ranges", 5}
|
||
|
|
||
|
-- Override standard prepare/cleanup OLTP functions, as this benchmark does not
|
||
|
-- support multiple tables
|
||
|
oltp_prepare = prepare
|
||
|
oltp_cleanup = cleanup
|
||
|
|
||
|
function prepare()
|
||
|
assert(sysbench.opt.tables == 1, "this benchmark does not support " ..
|
||
|
"--tables > 1")
|
||
|
oltp_prepare()
|
||
|
end
|
||
|
|
||
|
function cleanup()
|
||
|
assert(sysbench.opt.tables == 1, "this benchmark does not support " ..
|
||
|
"--tables > 1")
|
||
|
oltp_cleanup()
|
||
|
end
|
||
|
|
||
|
function thread_init()
|
||
|
drv = sysbench.sql.driver()
|
||
|
con = drv:connect()
|
||
|
|
||
|
local ranges = string.rep("k BETWEEN ? AND ? OR ",
|
||
|
sysbench.opt.number_of_ranges - 1) ..
|
||
|
"k BETWEEN ? AND ?"
|
||
|
|
||
|
stmt = con:prepare(string.format([[
|
||
|
SELECT count(k)
|
||
|
FROM sbtest1
|
||
|
WHERE %s]], ranges))
|
||
|
|
||
|
params = {}
|
||
|
for j = 1, sysbench.opt.number_of_ranges*2 do
|
||
|
params[j] = stmt:bind_create(sysbench.sql.type.INT)
|
||
|
end
|
||
|
|
||
|
stmt:bind_param(unpack(params))
|
||
|
|
||
|
rlen = sysbench.opt.table_size / sysbench.opt.threads
|
||
|
|
||
|
thread_id = sysbench.tid % sysbench.opt.threads
|
||
|
end
|
||
|
|
||
|
function thread_done()
|
||
|
stmt:close()
|
||
|
con:disconnect()
|
||
|
end
|
||
|
|
||
|
function event()
|
||
|
-- To prevent overlapping of our range queries we need to partition the whole
|
||
|
-- table into 'threads' segments and then make each thread work with its
|
||
|
-- own segment.
|
||
|
for i = 1, sysbench.opt.number_of_ranges*2, 2 do
|
||
|
local rmin = rlen * thread_id
|
||
|
local rmax = rmin + rlen
|
||
|
local val = sb_rand(rmin, rmax)
|
||
|
params[i]:set(val)
|
||
|
params[i+1]:set(val + sysbench.opt.delta)
|
||
|
end
|
||
|
|
||
|
stmt:execute()
|
||
|
end
|