MySQL查询在实时数据库上速度慢,在本地速度快?
我正在优化MySQL查询,但遇到了一个奇怪的问题。我从不使用实时生产数据库,因此我创建了一个转储,并使用MySQL查询在实时数据库上速度慢,在本地速度快?,mysql,Mysql,我正在优化MySQL查询,但遇到了一个奇怪的问题。我从不使用实时生产数据库,因此我创建了一个转储,并使用mysqldump将其导入本地机器上的数据库,无需其他选项 生产数据库和我的本地虚拟机上的mysql版本几乎完全相同: 制作: mysql版本14.14发行版5.1.61,适用于使用readline 6.2的debian linux gnu(x86_64) 虚拟机: mysql版本14.14发行版5.1.63,适用于使用readline 6.2的debian linux gnu(x86_64)
mysqldump
将其导入本地机器上的数据库,无需其他选项
生产数据库和我的本地虚拟机上的mysql版本几乎完全相同:
制作:
mysql版本14.14发行版5.1.61,适用于使用readline 6.2的debian linux gnu(x86_64)
虚拟机:
mysql版本14.14发行版5.1.63,适用于使用readline 6.2的debian linux gnu(x86_64)
这个查询相当复杂,在生产环境中大约需要4-5秒,但在虚拟机上不到1秒。我能想到的唯一一件事是,生产数据库上可能存在阻止查询立即运行的锁,而查询必须等待这些锁
对每个数据库运行查询时的EXTENDED EXPLAIN
几乎相同,只是有一些细微的差异
我在查询之前使用了SQL\u NO\u CACHE
,以确保查询没有命中缓存
因此,我的问题是:
EXTENDED EXPLAIN
的差异,甚至是很小的差异,而mysql版本是相同的有许多因素可能会影响此执行时间: 生产系统上的装载情况如何?您有多少IO净空?如果您的系统忙于运行其他查询或执行大量IO,则任何查询的性能都会受到严重影响 通常,您可以使用
SHOW PROCESSLIST
来帮助识别当前正在运行的内容,并使用类似iotop
的程序来查看正在进行的IO量
您的虚拟机是否正在使用SSD?即使是一台带有SSD的中端开发机器,对于任何严重依赖随机访问的数据库服务器,也会让几乎所有基于HD的数据库服务器望而却步
您是否在生产系统上尝试过优化表格
?执行还原时,表始终会自动优化。在实时系统上,当您插入
和删除
行时,表将缓慢降级
确保两者使用相同的存储引擎。MyISAM通常比InnoDB快,但在生产环境中使用关键数据并不安全。检查SHOW TABLE STATUS
,查看每个表使用的引擎。您可能有不同的默认值
还要检查
/etc/my.cnf
是否已相应调整。MySQL的默认配置非常糟糕。你真的需要为InnoDB缓冲区分配更多内存,否则性能会很糟糕。与其让我们推测扩展解释可能存在差异的所有可能原因,不如告诉我们它们之间的差异,我们可以尝试找出它们。每个数据库中的数据相似吗?也就是说,live数据库中的数据是否显著增加?每个数据库中的数据都是相同的。谢谢!我发现导入数据库副本会导致快速查询,这一点非常奇怪。所以我这样做了,并开始使用副本作为生产数据库。我可以假设,由于我导入一个新的数据库已经进行了优化,在原始数据库上运行optimizetable也会解决这个问题。我试试这个。