为什么MySQL查询在开发环境和实时环境之间的运行方式不同?

时间:2015-06-05 15:48:59

标签: mysql database optimization innodb

我有一个在我们的实时环境中运行超过20秒的特定查询,但在我的开发环境中只需要0.062秒。你会先找什么来解决这样的问题?我没有多少经验来排除数据库性能,所以一点点方向将是一个很大的帮助。该表使用的是InnoDB引擎。

我注意到了现场环境。 INNODB_BUFFER_POOL_SIZE超过10GB,但服务器只有4GB的RAM。我无法想象这是好事!

提前致谢。

1 个答案:

答案 0 :(得分:0)

考虑另一个事实,例如public ActionResult CreateReport() { var reportData = MyGetDataFunction(); var serverPipe = new AnonymousPipeServerStream(PipeDirection.Out); Task.Run(() => { using (serverPipe) { MyWriteDataToFile(reportData, serverPipe) } }); var clientPipe = new AnonymousPipeClientStream(PipeDirection.In, serverPipe.ClientSafePipeHandle); return new FileStreamResult(clientPipe, "text/csv"); } table schema按原样,indexes在两种环境中都是最新的。

首先要检查的是,两个环境中的数据量是否相同?导致在10K记录上运行的查询如果在100K记录集上运行则不会具有相同的运行时。

再次,您指出statistics在实时环境中很高,但在另一个环境中使用4GB则无法帮助它。可能你可以在另一个环境中进行相应的比较和设置。比如,与RAM大小比较并在另一个环境中将其设置为最佳值。