在此介绍一些 MySQL 中常用的工具,包括了 percona-tools、sysbench 等工具。
接下来我们看看。
部分软件会依赖 automake autoconf libtool 等工具,需要在编译之前进行安装。
该工具集基本上是 perl 脚本,可以直接从官方网站 percona-toolkit 上下载源码,文档也可以直接从上述的网站下载,只需要填写个表格即可。
为了方便下载,本地保存了一个版本 percona-toolkit-2.2.19.tar.gz 以及 Percona-Toolkit-2.2.19.pdf 。
该工具是通过 Aspersa 修改过来的,这是一套脚本工具,不过保存在 google code 中,所以需要翻墙;也可以查看一下 本地版本 以及 本地保存文档 。
接下来我们看看如何使用这一工具集,不过在此介绍其中的一部分工具的使用,剩余的一部分工具将会在其它文章中继续介绍。
安装方式可以从源码包中的 INSTALL 文件中查看,或者简单执行如下命令。
sysbench 用于基准测试,包括了:CPU 性能、磁盘 IO 性能、调度程序性能、内存分配及传输速度、POSIX 线程性能、数据库性能(OLTP基准测试,支持 MySQL、PostgreSQL、Oracle)等。
其命令格式如下:
其中 --test 指定测试工具,command 包括了 prepare、run、cleanup、help,prepare 用于准备数据,常用于 fileio、oltp 测试,其它用于运行、清理、查看帮助。
最新的是在 github 上维护的 akopytov/sysbench,下载源码可以通过如下方式编译。
在执行 ./configure 时,如果通过 mysql_config 无法找到库、头文件目录等,可以通过 --with-mysql-includes=…、--with-mysql-libs=… 进行配置。
如果想要支持 pgsql 和 Oracle,在配置时需要添加 --with-pgsql 或者 --with-oracle 选项,否则默认只支持 MySQL,相关的驱动源码保存在 sysbench/drivers 目录下。
介绍一些常见的基准测试,关于 OLTP 单独再述。
使用 64 位整数,测试计算质数直到某个最大值所需要的时间。
测试线程调度器的性能,对于高负载情况下测试线程调度器的行为非常有用。
用于测试内存的连续读写性能。
互斥锁用于在多线程编程中,防止两个线程同时对同一公共资源,如全局变量,进行读写的机制来保证共享数据操作的完整性。测试互斥锁的性能,方式是模拟所有线程在同一时刻并发运行,并都短暂请求互斥锁。
测试包括了 prepare、run、cleanup,主要用于准备测试需要文件,运行测试,清理。注意,生成的数据文件至少要比内存大,否则操作系统可能会缓存大部分的数据,导致测试结果无法体现 IO 密集型的工作负载。
之前的版本 oltp 是内建的版本,现在采用的是 lua 脚本实现,保存在 tests/db 目录下,通过这种方式,使得需要定制个性化测试时不用再重新编译。
在此只针对 MySQL,进行测试;该驱动保存在源码的 drivers/mysql 目录下,关于驱动相关的参数,例如 mysql-host、mysql-socket 等,可以查看源码。如果不指定则默认使用 sbtest 数据库,此时需要手动创建该数据库。
编译完成之后,直接到源码的的 sysbench 目录下执行如下命令即可。
如上的命令,prepare 只需要执行一次,然后可以执行多次 run 即可。其它一些常见的参数可以参考:
对于 MyISAM 的测试可以直接将上述的存储引擎更换为 myisam 即可,命令详见如下。
相关的驱动文件保存在 sysbench/drivers 目录下,测试相关模块保存在 sysbench/tests 目录下,下面看下与 DB 相关的脚本。
首先看下 common.lua 这个文件,该文件用于读取参数、执行 prepare、执行 cleanup;其中后两者分别对应了相应的函数,prepare 会调用 create_insert 创建表并插入数据;而清除则是简单删除掉之前创建的表。
接下来看看 oltp.lua 文件,主要有两个函数:A) thread_init() 会调用 set_vars() 设置与 oltp 相关的参数,初始化每个线程相关的参数;B) event() 函数用于处理每次调用,包括了事务执行包含了那些语句,及其次数等。
其中一个比较简单的示例可以参考 oltp_simple.lua 文件。
关于该工具详细可以参考 通过 tcprstat 工具统计应答时间 的内容,包括了详细代码的参考。
如文章中所示,如果服务器监听 127.1 会导致无法使用,可以通过如下方法解决。
按照如上方式,可以基本解决本地测试的 bug 。
实时监控可以直接参考 orzdba,可直接下载安装使用;另外相关的还有 Percona Monitoring Plugins,也就是 zabbix、nagios、cacti 插件。
This Site was built by Huang Yongyao, generated with Jekyll, and is hosted on GitHub Pages
©2012-2017 – Huang Yongyao