Sysbench下载安装和基本使用

13 篇文章 0 订阅

1 sysbench安装

1.1 下载解压

yum install gcc gcc-c++ automake make libtool mysql-community-devel mysql-devel

yum -y install make automake libtool pkgconfig libaio-devel 
wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"
unzip sysbench-1.0.zip

cd sysbench-1.0

1.2 安装依赖

yum install automake libtool –y

yum -y install postgresql-devel

1.3 安装

安装之前,确保位于之前解压的sysbench目录中。

./autogen.sh
./configure \
--prefix=/sysbench \
--with-pgsql \
--without-mysql \
--with-pgsql-includes=/opt/module/pgsql/include \
--with-pgsql-libs=/opt/module/pgsql/lib

语句解析

–X解释
–prefix=/sysbench最后将把sysbench安装在这个目录
–with-pgsql使用pg数据库
–without-mysql不使用mysql数据库
–with-pgsql-includes=/opt/module/pgsql/include[你的pgsql数据库所在处]/include
–with-pgsql-libs=/opt/module/pgsql/lib[你的pgsql数据库所在处]/lib
make     

make install

1.4 安装成功

cd /sysbench # 进入sysbench安装在的路径

./bin/sysbench —version # 查看版本,确认是否安装成功

2 生成数据

sysbench \
 --db-driver=pgsql \
  --pgsql-host=127.0.0.1 \
   --pgsql-port=5432 \
    --pgsql-user=postgres \
     --pgsql-password=postgres \
      --pgsql-db=sysbench \
       --oltp-table-size=10000 \
       	--oltp-tables-count=10 \
        /opt/software/sysbench-1.0/tests/include/oltp_legacy/oltp.lua \
             prepare

参数说明

属性特征
–oltp-tables-count=10表的数量
–oltp-table-size=10000测试表的记录数。默认是10000
–threads=10表示发起 10 个并发连接
–time=120表示执行120秒
–events=0表示总请求数为 0
因为上面已经定义了总执行时长,所以总请求数可以设定为 0;
也可以只设定总请求数,不设定最大执行时长
–report-interval=10表示每10秒输出一次测试进度报告
–percentile=99表示设定采样比例,默认是 95%,
即丢弃1%的长请求,在剩余的99%里取最大值

3 清除数据

sysbench \
 --db-driver=pgsql \
  --pgsql-host=127.0.0.1 \
   --pgsql-port=5432 \
    --pgsql-user=postgres \
     --pgsql-password=postgres \
      --pgsql-db=sysbench \
       --oltp-table-size=10000 \
        /opt/software/sysbench-1.0/tests/include/oltp_legacy/oltp.lua \
        cleanup

4 进阶:看看oltp_legacy中的脚本

进入/opt/software/sysbench-1.0/tests/include/oltp_legacy路径,查看里面的*.lua脚本

[root@localhost oltp_legacy]# pwd
/opt/software/sysbench-1.0/tests/include/oltp_legacy

[root@localhost oltp_legacy]# ls
bulk_insert.lua  delete.lua  oltp.lua         parallel_prepare.lua  select_random_points.lua  update_index.lua
common.lua       insert.lua  oltp_simple.lua  select.lua            select_random_ranges.lua  update_non_index.lu

重点关注其中的 common.lua,我们可以修改其中的内容以生成所需的数据。

可以看到其中有function prepare()function cleanup()。可知之前语句中的prepare和cleanup命令就是在调用它们,生成数据集和清除数据集

function prepare()
   local query
   local i
   local j

   set_vars()

   db_connect()
   
   for i = 1,oltp_tables_count do
     create_insert(i)
   end

   return 0
end

function cleanup()
   local i

   set_vars()

   for i = 1,oltp_tables_count do
   print("Dropping table 'sbtest" .. i .. "'...")
   db_query("DROP TABLE IF EXISTS sbtest".. i )
   end
end

再看看function create_insert,关注它是如何生成数据集的。
由于这个函数太长,我们简要的分三个部分:

function create_insert(table_id)

   local index_name
   local i
   local j
   local query
 	
 	...

   i = table_id
------------------------------------------------------------------------
-- 1 创建表sbtest[i]
   print("Creating table 'sbtest" .. i .. "'...")
   if ((db_driver == "mysql") or (db_driver == "attachsql")) then
      query = [[...]]
   elseif (db_driver == "pgsql") then
      query = [[
			CREATE TABLE sbtest]] .. i .. [[ (
			id ]] .. auto_inc_type .. [[ NOT NULL,
			k INTEGER DEFAULT '0' NOT NULL,
			c CHAR(120) DEFAULT '' NOT NULL,
			pad CHAR(60) DEFAULT '' NOT NULL,
			]] .. index_name .. [[ (id)
			) ]]
			
   db_query(query)
   ...

------------------------------------------------------------------------
-- 2 向表sbtest[i]中插入oltp_table_size大小的数据
   print("Inserting " .. oltp_table_size .. " records into 'sbtest" .. i .. "'")

   if (oltp_auto_inc) then
      db_bulk_insert_init("INSERT INTO sbtest" .. i .. "(k, c, pad) VALUES")
   else
      db_bulk_insert_init("INSERT INTO sbtest" .. i .. "(id, k, c, pad) VALUES")
   end

   local c_val
   local pad_val


   for j = 1,oltp_table_size do

   c_val = sb_rand_str([[
###########-###########-###########-###########-###########-###########-###########-###########-###########-###########]])
   pad_val = sb_rand_str([[
###########-###########-###########-###########-###########]])

      if (oltp_auto_inc) then
	 db_bulk_insert_next("(" .. sb_rand(1, oltp_table_size) .. ", '".. c_val .."', '" .. pad_val .. "')")
      else
	 db_bulk_insert_next("("..j.."," .. sb_rand(1, oltp_table_size) .. ",'".. c_val .."', '" .. pad_val .. "'  )")
      end
   end

   db_bulk_insert_done()

------------------------------------------------------------------------
-- 3 是否创建二级索引
   if oltp_create_secondary then
     print("Creating secondary indexes on 'sbtest" .. i .. "'...")
     db_query("CREATE INDEX k_" .. i .. " on sbtest" .. i .. "(k)")
   end

end

5 实战

了解到以上这几点后,假设我们需要生成200,400,600,…,50000行的表,需要如何修改common.lua呢?

可以采用下面这个方案,也就是更改每个表oltp_table_size的大小

function prepare()
   local query
   local i
   local j

   set_vars()

   db_connect()

   oltp_table_size_start=oltp_table_size
   for i = 1,oltp_tables_count do
	 oltp_table_size=oltp_table_size_start+i*200
     create_insert(i)
   end

   return 0
end
sysbench \
--db-driver=pgsql \
--pgsql-host=127.0.0.1 \
--pgsql-port=5432 \
--pgsql-user=postgres \
--pgsql-password=postgres \
--pgsql-db=sysbench \
--oltp-table-size=0 \
--oltp-tables-count=250 \
/opt/software/sysbench-1.0/tests/include/oltp_legacy/oltp.lua \
prepare
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值