Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的mysql性能_Sql_Mysql_Performance - Fatal编程技术网

奇怪的mysql性能

奇怪的mysql性能,sql,mysql,performance,Sql,Mysql,Performance,我一直在进行一些mysql性能测试,结果非常奇怪。我正在运行一个跨以下mysql版本的查询:5.0.91、5.1.52、带有innodb插件的5.1.52和5.5.7 以下是每个版本上查询的执行时间: version time ------------------------ 5.0: 95s 5.1: 122s 5.1 innodb-plugin: 159s 5.5: 127s 我在Wi

我一直在进行一些mysql性能测试,结果非常奇怪。我正在运行一个跨以下mysql版本的查询:5.0.91、5.1.52、带有innodb插件的5.1.52和5.5.7

以下是每个版本上查询的执行时间:

version            time
------------------------
5.0:               95s
5.1:               122s
5.1 innodb-plugin: 159s
5.5:               127s
我在Windows 2003上测试相同的数据(一个表中有5000万条记录)。数据库在所有版本上都使用InnoDB引擎

我不明白MySQL 5.0怎么会是最快的,innodb插件怎么会比不使用时产生最差的结果,5.5在性能上如何与5.1如此相似

有人碰到这个吗?有人有什么建议吗

以下是my.ini配置:

  • 查询\缓存\大小=0
  • 表_cache=256
  • tmp_表_尺寸=2000M
  • 线程\缓存\大小=32
  • innodb_附加_内存_池大小=128M
  • innodb_刷新_日志_在_trx_commit=2
  • innodb_日志_缓冲区_大小=4M
  • innodb_缓冲区_池_大小=8G
  • innodb日志文件大小=256M
  • innodb_线程_并发=32
innodb插件特定:

  • 忽略内置的innodb
  • plugin load=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_文件_格式=梭鱼
  • innodb_io_容量=400

这些都是同一台发动机吗?(InnoDB或MyISAM?) 在这些查询中是否刷新或使用缓存? 您描述测试的细节太少,很难确定为什么会看到奇怪的结果

也许可以看看这里使用的一些方法:


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

我有一些建议:

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

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


    根据您的应用程序,您可能还想在一张大桌子上试用它。这当然需要更长的时间才能运行(大概加载50万行相当快)。

    发布您的基准代码。+my.ini参数询问其他信息->查询是什么样子的?所有这些都是相同的引擎:innodb。如何知道缓存是否已刷新?我将query\u cache\u size设置为0,以便没有缓存。query\u cache\u size=0并不阻止缓存,它只是关闭查询缓存。引擎中的缓存仍在发生。