MySQL 基准测试在 数据库性能优化中是一个非常重要的分支。本文目的在于让读者对关系型数据库系统有一个基本的了解,掌握MySQL以及如何管理使用 Linux。文中讨论了MySQL性能因素以及如何测试CPU性能,同时使用具体的例子来展示几种实用的测试MySQL系统的实践方法。
为什么数据库管理员要在MySQL系统上运行基准测试呢?答案显而易见,倘若在一个模拟的实时环境中系统设计能够承受住压力并且满足性能目标,那么数据库管理员也无需大费周章了。
在深入了解MySQL基准测试程序机制前,弄清楚什么是基准测试,这一点非常重要。简单来说,基准测试是“运行计算机程序或操作行为,通过运行一些标准测试和一系列的映衬来评估对象的相对性能。”
CPU基准测试主要用来测试硬件和运算能力,而软件基准测试更多的则是测试概念元素。
在我们的案例中,软件基准测试中数据库管理系统基准测试是一个很好的例子。这种类型的测试目的是衡量数据库管理系统的吞吐量和响应时间。最终的测试结果会以分数显示,而这些分数主要用来比较。
数据库管理员一般很难分清基准测试和 压力测试之间的区别。这一点我们可以理解,因为这两种条件有着类似的目标,即数据库容量。两者明显的不同点在于:基准测试给出的结果,以数字呈现,能够允许你在每个基准测试和服务器/系统中调整设置,这是可以改变的,同时也能反应出数据库管理员是成功还是失败。而压力测试则是把系统推向极端边缘用以了解系统的极限有多大。
由于本文重点讨论MySQL基准测试而非压力测试,所有后者我们不再进行讨论。在MySQL服务器运行基准测试时,性能因素是数据库管理员必须考虑的问题。那么,有哪些性能因素?答案就是:吞吐量,延迟时间和可扩展性。将这三个因素结合在一起,代表了MySQL服务器的整体性能。
那么我们如何进行MySQL基准测试呢?为了获取正确的结果,请遵守以下一些规则:
应该多次检查输入的数据;
应该多次运行基准测试,至少5次;
重新启动MySQL服务器以消除任何不必要的缓存因素;
数据库管理员要有兴趣、认真对待进程。
下面有几个影响基准测试的例子,我们在任何时候都应当避免这种情况出现:
在一台单一的虚拟机上运行基准测试;
不可忽视不同网络基础设施的影响;
使用MySQL服务器默认设置;
无需根据服务器配置特定的和独特的业务需求;
无法消除缓存问题;
运行基准测试时,忽视任何不必要的缓存问题。
如何在MySQL上运行基准测试?
在构建MySQL网站时把现有的技术文档增加到MySQL基准测试中,这是一个非常实用的基准测试功能。MySQL开发团队称,BENCHMARK ()函数常被用来测试MySQL进程有多快?它适用于MySQL客户端。
详细功能显示如:BENCHMARK (count, expr): The BENCHMARK ()函数执行的表达式为expr重复计算次数。测试的结果值始终为0。基准测试最重要的数字出现在几秒钟时间内。如下图示例:
这里有一些技巧包括如何获得BENCHMARK () 函数正确结果。这几点如下:
建议多次执行该函数;
允许仅适用scalar表达;
表达式必须返回单个列或单个行;
该功能减少了由于网络或语法分析器而带来的干扰。
使用SysBench
MySQL的开发者建议使用一款流行的测试工具——SysBench(由MySQL开发者开发),这是一款多功能的工具允许数据库管理员测试CPU、文件IO以及MySQL性能。
下面我们就来看下利用SysBench对CPU、MySQL进行基准测试。
CPU性能
用于CPU性能基准测试命令显示如下:该命令将启动一个进程并且产出大量的数字。
sysbench --test=cpu --cpu-max-prime=20000 run
然而,最重要的数字是以总的时间(以秒为单位)为主。利用所花费的时间来计算所需要的被测试的计算参数。这一点很重要,你可以用来对比基准测试在横跨多个系统时最有价值的数据。
MySQL性能
SysBench可以用来测量MySQL性能。要想做到这一点,首先我们可以在数据库‘monitis’中创建1,000,000行数据测试表。通过以下命令执行:
sysbench --monitis=oltp --oltp-table-size=1000000 --mysql-db=monitis --mysql-user=root --mysql-password=yourrootsqlpassword prepare
接着在MySQL基准测试中输入:
sysbench --monitis=oltp --oltp-table-size=1000000 --mysql-db=monitis –mysql-user=root –mysql-password=yourrootsqlpassword –max-time=60 –oltp-read-only=on –max-requests=0 –num-threads=8 run
当基准测试结果显示后,查看交易列表。这个值是以每秒为交换单位。
为了确保所需要的基准测试在系统中能够很好的运行,这里只需要输入简单的命令:
sysbench -- monitis =oltp --mysql-db= monitis --mysql-user=root --mysql-password=yourrootsqlpassword cleanup
尽管可能会出现大量的MySQL性能基准测试类型,但上面的这些信息足够你使用了。
结束语:
MySQL性能测试针对不同的项目采用不同的解决方案。这是因为由不同的需求、时间,目标决定的。当然在MySQL系统上运行基准测试,就其技术本身而言在日常业务运作时也是非常必要的,希望这些实践对你有所帮助。