我一直在进行一些mysql性能测试,结果非常奇怪 . 我正在运行以下mysql版本的查询:带有innodb-plugin的5.0.91,5.1.52,5.1.52和5.5.7 .
以下是每个版本的查询执行时间:
version time
------------------------
5.0: 95s
5.1: 122s
5.1 innodb-plugin: 159s
5.5: 127s
我在Windows 2003上测试相同数据(一个表中的50M记录) . 数据库在所有版本上使用InnoDB引擎 .
我不明白MySQL 5.0是如何最快的,innodb-plugin如何产生比不使用时更糟糕的结果以及5.5在性能上如何与5.1如此相似 .
有人碰到这个吗?有人有建议吗?
这是my.ini配置:
-
query_cache_size = 0
-
table_cache = 256
-
tmp_table_size = 2000M
-
thread_cache_size = 32
-
innodb_additional_mem_pool_size = 128M
-
innodb_flush_log_at_trx_commit = 2
-
innodb_log_buffer_size = 4M
-
innodb_buffer_pool_size = 8G
-
innodb_log_file_size = 256M
-
innodb_thread_concurrency = 32
innodb-plugin具体:
-
ignore_builtin_innodb
-
插件负载= innodb的= ha_innodb_plugin.dll; innodb_trx = ha_innodb_plugin.dll; innodb_locks = ha_innodb_plugin.dll; innodb_lock_waits = ha_innodb_plugin.dll; innodb_cmp = ha_innodb_plugin.dll; innodb_cmp_reset = ha_innodb_plugin.dll; innodb_cmpmem = ha_innodb_plugin.dll; innodb_cmpmem_reset = ha_innodb_plugin .DLL
-
innodb_file_format =梭子鱼
-
innodb_io_capacity = 400
2 回答
这些引擎都是一样的吗? (InnoDB或MyISAM?)是否在这些查询中刷新或使用了缓存?您已经用如此少的细节描述了您的测试,很难开始确定为什么您可能会看到奇怪的结果 .
也许看一下这里使用的一些方法:Testing performance of queries in mysql
我还要补充一点,mysql版本中的不同优化可能会导致它们之间的任何单个查询更慢或更快 . 出于这个原因,我通常不会看到依赖于单个查询的测试套件 .
我有一些建议:
对于IO绑定基准测试,在每次测试运行之前,将整个数据从转储装载到服务器 . 然后关闭服务器并再次启动它 . 测试套件中的初始查询需要执行物理IO来读取块 . 后续的将受益于先前的页面进入缓存 .
对于内存绑定基准测试,请执行相同操作,但不要在加载数据后关闭服务器 .
我当然假设这样一个小的(50M行==小)表适合内存(你的8G缓冲池除以50M行=每行平均170字节) . 如果没有,请修改上述内容 .
如果您对较新的innodb引擎感兴趣,请务必使用“Barracuda”文件格式(需要在配置文件中设置,在服务器启动时,在创建任何表之前)以利用新功能 . 然后,您可以在启用压缩的情况下进行测试(这将使数据更小,并且至少可以加快IO绑定测试的速度) .
根据您的应用程序,您可能还想在大 table 上试用它 . 这当然需要更长的时间才能运行(假设加载50M行非常快) .