奇怪的mysql性能

时间:2010-11-17 18:12:35

标签: sql mysql performance

我一直在进行一些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 个答案:

答案 0 :(得分:2)

这些引擎都是一样的吗? (InnoDB或MyISAM?) 缓存是否在这些查询中刷新或使用? 您已经用如此少的细节描述了您的测试,很难开始确定为什么您可能会看到奇怪的结果。

也许请看一下这里使用的一些方法:Testing performance of queries in mysql

我还要补充一点,mysql版本中的不同优化可能会导致它们之间的任何单个查询更慢或更快。出于这个原因,我通常不会看到依赖于单个查询的测试套件。

答案 1 :(得分:1)

我有一些建议:

  1. 对于IO绑定基准测试,在每次测试运行之前,将整个数据从转储加载到服务器中。然后关闭服务器并再次启动它。测试套件中的初始查询需要执行物理IO来读取块。后续的将受益于早先将页面带入缓存的那些。
  2. 对于内存绑定基准测试,请执行相同操作,但不要在加载数据后关闭服务器。
  3. 我当然假设这样一个小的(50M行==小)表适合内存(你的8G缓冲池除以50M行=每行平均170字节)。如果没有,请修改上述内容。

    如果您对较新的innodb引擎感兴趣,请务必使用“Barracuda”文件格式(需要在配置文件中设置,在服务器启动时,在创建任何表之前)以利用新功能。然后,您可以在启用压缩的情况下进行测试(这将使数据更小并且至少可以加快IO绑定测试的速度。)

    根据您的应用程序,您可能还想在大型表上进行尝试。这当然需要更长的时间才能运行(大概加载50M行非常快)。