sysbench 自带的Lua脚本

sysbench 自带的Lua脚本

Lua脚本

大部分的脚本都会底层调用oltp_common.lua脚本里的函数stmt_defs的变量

读写性能测试语句

这些语句来源于oltp_common.lua脚本里面的

--point_selects:主键等值查询
SELECT c FROM sbtest%u WHERE id=?
-- simple_ranges:简单范围查询(主键range)
SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ?
-- sum_ranges:范围求和(简单范围查询的基础上做sum)
SELECT SUM(k) FROM sbtest%u WHERE id BETWEEN ? AND ?
-- order_ranges:简单范围查询(主键range的基础上做排序)
SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c
-- distinct_ranges:去重范围查询(主键range + 排序 + 去重)
SELECT DISTINCT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c
-- index_updates:索引更新操作
UPDATE sbtest%u SET k=k+1 WHERE id=?
-- non_index_updates:非索引更新
UPDATE sbtest%u SET c=? WHERE id=?
-- deletes:删除操作
DELETE FROM sbtest%u WHERE id=?
-- inserts:插入操作
INSERT INTO sbtest%u (id, k, c, pad) VALUES (?, ?, ?, ?)

oltp_common.lua

这个脚本相当于一个公共的函数库

-- 初始化
function init() 

-- 创建表结构,获取c,pad字段随机字符串,插入数据,建立二级索引
function create_table(drv, con, table_num) 
        -- 创建表结构,表结构如下
        -- CREATE TABLE `sbtest1` (
        -- 		`id` int(11) NOT NULL AUTO_INCREMENT, # 主键
        -- 		`k` int(11) NOT NULL DEFAULT '0', # 二级索引
        -- 		`c` char(120) NOT NULL DEFAULT '',
        -- 		`pad` char(60) NOT NULL DEFAULT '',
        --	 	PRIMARY KEY (`id`),
        -- 		KEY `k_1` (`k`)
        -- 	) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1
        
        -- get_c_value() 获取字段c的值
        -- get_pad_value() 获取字段pad的值
        -- INSERT 语句插入到相关表,直到达到指定的table-size
        -- 建立二级索引k

-- 获取字段c的值,返回一个随机字符串
function get_c_value() 
-- 获取字段pad的值,返回一个随机字符串     
function get_pad_value() 

-- 初始化线程          
function thread_init() 
                    
-- 关闭线程连接                   
function thread_done() 

-- Close prepared statements
function close_statements() 

-- 如果我们已经重新连接了,那么重新准备语句,                  
function sysbench.hooks.before_restart_event(errdesc)
    -- close_statements() //Close prepared statements
    -- prepare_statements() // This function is a 'callback' defined by individual benchmark scripts
                                
--  构造语句                    
function prepare_for_each_table(key)   

-- 对应prepare命令                                    
function cmd_prepare() 
                                        
-- 对应prewarm命令                                        
function cmd_prewarm() 

-- 清理数据,把相关表都DROP掉
function cleanup() 
 
-- 启动事务 BEGIN
function prepare_begin() //构造 BEGIN 语句
function begin() //执行 BEGIN 语句

-- 提交事务 COMMIT
function prepare_commit() //构造 BEGIN 语句
function commit() //执行 COMMIT 语句

-- 主键等值查询  SELECT c FROM sbtest? WHERE id = ?                                         function prepare_point_selects() // 调用 prepare_for_each_table() 函数生成ponit_selects语句 function execute_point_selects() // 执行 prepare_point_selects() 生成的语句

-- 主键范围查询 SELECT c FROM sbtest? WHERE id BETWEEN ? AND ?
function prepare_simple_ranges() // 调用 prepare_for_each_table() 函数生成simple_ranges语句 function execute_simple_ranges() // 执行 prepare_point_selects() 生成的语句 

-- 主键范围查询 + 求和 SELECT SUM(k) FROM sbtest? WHERE id BETWEEN ? AND ?
function prepare_sum_ranges() // 调用 prepare_for_each_table() 函数生成sum_ranges语句       function execute_sum_ranges() // 执行 prepare_point_selects() 生成的语句                     

-- 主键范围查询 + 排序 SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c           function prepare_order_ranges()
function execute_order_ranges()                                                           

-- 主键范围查询 + 排序 + 去重 SELECT DISTINCT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c
function prepare_distinct_ranges()
function execute_distinct_ranges()                                                       

-- 二级索引上更新(k是二级索引) UPDATE sbtest%u SET k=k+1 WHERE id=?                           function prepare_index_updates() // 调用 prepare_for_each_table() 函数生成index_updates语句 function execute_index_updates() // 执行 prepare_point_selects() 生成的语句

-- 无索引的更新 UPDATE sbtest%u SET c=? WHERE id=?                                         function prepare_non_index_updates() 
function execute_non_index_updates()                                                     

-- 删除 DELETE FROM sbtest%u WHERE id=?
function prepare_delete_inserts()                                                         function execute_delete_inserts() // 执行 prepare_for_each_table 生成的语句                 

读写测试的语句格式如下(定义在stmt_defs变量中)

--point_selects:主键等值查询
SELECT c FROM sbtest%u WHERE id=?
-- simple_ranges:简单范围查询(主键range)
SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ?
-- sum_ranges:范围求和(简单范围查询的基础上做sum)
SELECT SUM(k) FROM sbtest%u WHERE id BETWEEN ? AND ?
-- order_ranges:简单范围查询(主键range的基础上做排序)
SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c
-- distinct_ranges:去重范围查询(主键range + 排序 + 去重)
SELECT DISTINCT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c
-- index_updates:索引更新操作
UPDATE sbtest%u SET k=k+1 WHERE id=?
-- non_index_updates:非索引更新
UPDATE sbtest%u SET c=? WHERE id=?
-- deletes:删除操作
DELETE FROM sbtest%u WHERE id=?
-- inserts:插入操作
INSERT INTO sbtest%u (id, k, c, pad) VALUES (?, ?, ?, ?)

bulk_insert.lua

插入的lua脚本

-- 初始化线程
function thread_init()
-- 准备表结构
prepare()
    -- CREATE TABLE IF NOT EXISTS sbtest%d (
    --    id INTEGER NOT NULL,
    --    k INTEGER DEFAULT '0' NOT NULL,
    --    PRIMARY KEY (id))]], i)) 
-- 批量插入
event()
-- 关闭线程
thread_done(thread_9d)
-- 清理数据,DROP掉相关的表
cleanup()

oltp_delete.lua

DELETE语句的lua脚本

-- 加载oltp_common脚本
require("oltp_common")

-- 构造DELETE语句
prepare_statements()
    -- prepare_for_each_table("deletes") 构造DELETE语句
-- 执行DELETE语句
event() 

oltp_insert.lua

INSERT语句的Lua脚本

-- 加载oltp_common脚本
require("oltp_common")
-- 构造DELETE语句
prepare_statements()
-- 执行DELETE语句
event() 

oltp_point_select.lua

点查语句的Lua脚本,主键查询SELECT c FROM sbtest? WHERE id = ?

-- 加载oltp_common脚本 
require("oltp_common")
-- 构造点查语句
prepare_statements()
-- 执行语句
event() 

oltp_read_only.lua

只读语句的Lua脚本

-- 加载oltp_common脚本
require("oltp_common")
-- 构造语句
prepare_statements()
  -- prepare_point_selects() // 构造点查语句
  -- prepare_begin() // 构造 BEGIN 语句
  -- prepare_commit() // 构造 COMMIT 语句
  -- prepare_simple_ranges() // 构造简单范围查询语句
  -- prepare_sum_ranges() // 构造求和语句
  -- prepare_order_ranges() // 构造排序语句
  -- prepare_distinct_ranges() // 构造排序去重语句
-- 执行语句
event() 
  -- execute_point_selects() // 执行点查语句
  -- execute_simple_ranges() // 执行简单范围查询语句
  -- execute_sum_ranges() // 执行求和语句
  -- execute_order_ranges() // 执行排序语句
  -- execute_distinct_ranges() //排序去重语句 

oltp_read_write.lua

读写的Lua脚本

-- 加载oltp_common脚本
require("oltp_common")
-- 构造语句
prepare_statements()
  -- 读操作
    -- prepare_point_selects() // 构造点查语句
    -- prepare_begin() // 构造 BEGIN 语句
    -- prepare_commit() // 构造 COMMIT 语句
    -- prepare_simple_ranges() // 构造简单范围查询语句
    -- prepare_sum_ranges() // 构造求和语句
    -- prepare_order_ranges() // 构造排序语句
    -- prepare_distinct_ranges() // 构造排序去重语句
  -- 写操作
    -- prepare_index_updates() // 构造更新索引操作语句
    -- prepare_non_index_updates() // 构造更新无索引字段操作语句
    -- prepare_delete_inserts() // 构造删除+更新操作语句
  
-- 执行语句
event() 
  -- 读操作
    -- execute_point_selects() // 执行点查语句
    -- execute_simple_ranges() // 执行简单范围查询语句
    -- execute_sum_ranges() // 执行求和语句
    -- execute_order_ranges() // 执行排序语句
    -- execute_distinct_ranges() //排序去重语句
  -- 写操作
    -- execute_index_updates() // 执行更新索引操作语句
    -- execute_non_index_updates() // 执行更新无索引字段操作语句
    -- execute_delete_inserts()  // 执行删除+更新操作语句

oltp_update_index.lua

更新索引字段操作的Lua语句

-- 加载oltp_common脚本
require("oltp_common")
-- 构造语句
prepare_statements()
  -- prepare_index_updates() 
-- 执行语句
event() 
  -- execute_index_updates(con)

oltp_update_non_index.lua

更新无索引字段操作语句

-- 加载oltp_common脚本
require("oltp_common")
-- 构造语句
prepare_statements()
  -- prepare_non_index_updates()
-- 执行语句
event() 
  -- execute_non_index_updates()

oltp_write_only.lua

纯写语句的Lua脚本

-- 加载oltp_common脚本
require("oltp_common")
-- 构造语句
prepare_statements()
  -- prepare_index_updates()
  -- prepare_non_index_updates()
  -- prepare_delete_inserts()
-- 执行语句
event() 
  -- execute_index_updates()
  -- execute_non_index_updates()
  -- execute_delete_inserts()

select_random_points.lua

随机点查脚本

-- 加载oltp_common脚本
require("oltp_common")
-- 准备阶段
prepare() 
-- 线程初始化
thread_init() 
-- 关闭线程
thread_done() 
-- 执行相关SQL
event() 

select_random_ranges.lua

-- 加载oltp_common脚本
require("oltp_common")
-- 准备阶段
prepare() 
-- 线程初始化
thread_init() 
-- 关闭线程
thread_done() 
-- 执行相关SQL
event() 

oints.lua

随机点查脚本

-- 加载oltp_common脚本
require("oltp_common")
-- 准备阶段
prepare() 
-- 线程初始化
thread_init() 
-- 关闭线程
thread_done() 
-- 执行相关SQL
event() 

select_random_ranges.lua

-- 加载oltp_common脚本
require("oltp_common")
-- 准备阶段
prepare() 
-- 线程初始化
thread_init() 
-- 关闭线程
thread_done() 
-- 执行相关SQL
event() 

之前没看过Lua脚本只根据函数名进行一些猜测,粗略的明白了里面的逻辑

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值