mysql性能:MYSQL模拟真实环境下的性能来源: 发布时间:星期五, 2008年12月19日 浏览:2次 评论:0
1 模拟真实环境下性能再次强调是前面测试数据都是性能测试不能作为实际环境性能数据这些数据表现应该是理想环境下极限性能其只能作为参考既然测试用例不完整我们就考虑模拟下真实环境 1.1 压力测试先准备检测下MySQL在压力情况下性能变化情况测试版本为MysQL4.0 gcc静态版本使用配置参数和原来相同我先在数据库中插入10000000条记录然后我在另外台机器机器上启动1组压力进程对数据库进行查询或者修改操作测试进程组包括1050100个="Char">读进程1050100个="Char">读写进程(读写各半)这些进程操作间隔时间为10000微秒(0.01秒执行次)或者1000微妙(0.001秒执行次)其中0.01秒执行次间隔压力相对较轻0.001秒执行次间隔压力就比较重了般用mysqladmin processlist检查大部分进程状态都是执行状态 同时在这台机机器(本机上)测试查询1000000条记录(总记录数1/10)所耗费时间同时为了比较使用vmstat记录相关CPU占用率情况分别记录压力进程运行后测试进程运行前后CPU空闲率 MyISAM 引擎测试结果如下: 表1 MyISAM引擎压力测试 测试项目 压力进程操作间隔为0.01秒 压力进程操作间隔为0.001秒 运行前CPU空闲(%) 运行后CPU空闲(%) 耗时(s) 处理速度(条记录/s) 运行前CPU空闲(%) 运行前CPU空闲(%) 耗时(s) 处理速度(条记录/s) 没有压力进程 100 69 258 3875.97 100 69 258 3875.97 10个读取压力进程 97 69 282 3546.10 85 57 318 4048.58 50个读取压力进程 88 59 316 3164.56 35 21 700 3333.33 100个读取压力进程 73 45 379 2638.52 22 10 2093 2283.11 10个读写压力进程(5读+5写) 94 67 247 3144.65 69 51 361 2770.08 50个读写压力进程(25读+25写) 80 54 300 1428.57 25 16 4206 237.76 100个读写压力进程(50读+50写) 59 37 438 477.78 27 25 大约需要200000 0.50 对于MyISAM引擎最后组测试我没能作完实在是太慢了在6个小时后我检查发现查询才进行到12477我几乎崩溃估计要让他跑完要5-6天只好作罢 比较图表: 通过比较我们可以看出在只有读取操作压力下MyISAM引擎表现还不错在压力增加情况下性能没有出现陡降而对于读写混合压力测试情况下MyISAM引擎表现急转直下特别是最后100个读写0.001s间隔压力进程测试情况下速度已经不可接受这是检查MySQL状态计数变量Table_locks_waited数值非常大而且远远大于Table_locks_immediate这表示系统操作中等待锁操作非常多 由于MyISAM引擎采用表锁所以在读写压力测试下由于写操作锁会阻塞所有读取锁而且优先基本大于读取锁所以此时读取操作必须等待而且由于最后压力测试写操作频度很高所以造成了几乎1秒1条读取速度而且值得注意是此时CPU性能压力并不大系统能力并没有得以发挥 为了横向比较MyISAM引擎和InnoDB引擎在区别压力表现我也测试了InnoDB在压力情况下表现 表2 InnoDB引擎压力测试 测试项目 压力进程操作间隔为0.01秒 压力进程操作间隔为0.001秒 运行前CPU空闲(%) 运行后CPU空闲(%) 耗时(s) 处理速度(条记录/s) 运行前CPU空闲(%) 运行前CPU空闲(%) 耗时(s) 处理速度(条记录/s) 没有压力进程 100 69 278 3597.12 100 69 278 3597.12 10个读取压力进程 97 68 281 3558.72 94 65 387 4504.50 50个读取压力进程 86 58 312 3205.13 76 48 634 3690.04 100个读取压力进程 73 46 326 2583.98 54 28 892 2832.86 10个读写压力进程(5读+5写) 83 55 222 3067.48 72 45 276 3623.19 50个读写压力进程(25读+25写) 40 20 271 1577.29 4 2 1243 804.51 100个读写压力进程(50读+50写) 24 9 353 1121.08 3 1 4011 249.31 比较图表: 图3 InnoDB引擎压力测试 可以看出InnoDB引擎在压力测试面前表现得不错基本上是随着压力增加速度呈现线性下降(注意第2步测试进程是50个为第步5倍) 为了方便比较我也给出InnoDB和MySQL两个比较图表必须指出是这样比较意义有定局限性并不能保证每个连接对于两种引擎压力都致 从对比图表可以看出[注]InnoDB引擎可以更好承担查询压力 MyISAM 为了避免在大压力环境下性能下降可能必须将表分割更细 如果你够心细应该可以发现在加入0.01秒读写压力测试后得到性能反而提升了?而且MyISAM引擎和InnoDB引擎数据都有提升?这个现象非常有趣为了验证不是干扰我重新测试了次InnoDB在这个情况下表现发现测试结果没有我猜测这还是和查询Cache有关InnoDB将查询结果放入Cache可能是在提交操作时而在在提交时发现同时有更改语句情况下InnoDB引擎没有将查询语句结果放入Cache由于减少了Cache成本而且相对而言此时更改操作压力很轻所以这样反而加快了查询速度 1.2 多表访问环境模拟前面测试方式都是使用单张表进行测试在多张表情况下MySQL表现如何?我打算这样模拟采用10张表每张表存放5000000条记录在另外台机器上每个进程都查询访问个表查询频率为0.005秒次查询记录为随机数选取同时在本机上进行插入查询更改删除1000000条记录操作对于MyISAM引擎同时由于增加了表数量调整了些相关参数 -variable = key_buffer_size=512M -variable = query_cache_size=128M 对于InnoDB引擎仍然使用原来配置同时由于测试机器发生了更改[注]为了对比公正性我重新测试了没有压力(没有同时访问)情况下对比数据 表3 多表访问环境模拟 参数配置 插入100000条记录耗时 处理速度(条记录/s) 查询100000条记录耗时 处理速度(条记录/s) 修改100000条记录耗时 处理速度(条记录/s) 删除100000条记录耗时 处理速度(条记录/s) MyISAM引擎, 197 5076.14 333 3003.00 173 5780.35 175 5714.29 MyISAM引擎,模拟多表环境 209 4784.69 3366 297.09 566 1766.78 507 1972.39 InnoDB引擎, 221 4524.89 425 2352.94 255 3921.57 234 4273.50 InnoDB引擎, 模拟多表环境 520 1923.08 1853 539.67 677 1477.10 629 1589.83 对比图表为 在非模拟情况下MyISAM 引擎有少量优势但是在模拟环境下查询记录情况,MyISAM引擎表现远慢于InnoDB表现对于这个我感觉有点奇怪此时不应该有锁排队情况发生? 在压力情况下MyISAM引擎插入语句性能看似不错但是这是由于在我测试用例中MyISAM引擎不用加入写锁锁定表(见前InnoDB和MyISAM引擎对比测试章节) 由于所有操作都是顺序操作而且没有加入写操作感觉测试比较倾向于MyISAM引擎[注] 测试机器也是为380G3但是内核为2.4.21初步看来2.6内核性能更好些 对这个模拟感觉不是太理想模拟正式环境和测试极限速度这两者可能就有矛盾 1.3 网络访问速度前面测试基本都是基于本机操作访问数据库操作但是更多应用是基于网络访问所以也业考虑测试下网络环境下MySQL访问速度基于网络访问分为2种种是利用长链接种是短链接就是每次访问都重新进行次链接 测试环境数据库使用MyISAM引擎使用Cache网络带宽为100Mbps 由于对于1个服务器可以循环使用SOCKET端口是有限所以我只执行了20000次操作进行比较由于测试数据较少对于这些数据比较差距就可以了 比较项目 本地操作 网络操作 使用长链接 网络操作 使用短链接 网络操作(STMT) 使用长链接 耗时(s) 处理速度(条/s) 耗时(s) 处理速度(条/s) 耗时(s) 处理速度(条/s) 耗时(s) 处理速度(条/s) 插入20000条记录 4 5000.00 13 1538.46 27 740.74 8 2500.00 查询20000条记录 4 5000.00 21 952.38 34 588.24 15 1333.33 改写20000条记录 4 5000.00 13 1538.46 29 689.66 8 2500.00 删除20000条记录 3 6666.67 13 1538.46 36 555.56 7 2857.14 比较图表如下: 对于网络访问网络长链接访问速度是本地执行速度3-4倍(降低了60%)网络短链接访问速度是本地执行速度7-8倍(降低了85%)[注] 注意这个速度只是单链接下极限速度所以这并不代表MySQL在网络环境下处理速度(但个人认为极限速度不可能超过2倍)但是我们还是看出MySQL在网络环境下速度有相当下降[注]而使用网络短链接要付出连接和断开连接成本 STMT操作方式(参看STMT章节)由于不用重新传递分析SQL在网络环境也表现了出了优于其他方式性能 由于测试数据较少可能影响到测试时间准确程度 对于长链接网络访问速度有如此下降我开始很怀疑我查询了我原来对Oracle作过组入库测试数据在同样100M网络环境环境下速度只降低了30%左右但我重新测试了1000000条数据但得到结果还是如此(当然也可能是IDC内部网络过于繁忙) 基于MySQL在网络环境中表现差强人意如果硬件条件允许在作DB服务器设计时将DB服务器和MySQL放在同个机器下可能是个更好选择 0
相关文章
读者评论
发表评论 |