我有一个在我们的实时环境中运行超过20秒的特定查询,但在我的开发环境中只需要0.062秒。你会先找什么来解决这样的问题?我没有多少经验来排除数据库性能,所以一点点方向将是一个很大的帮助。该表使用的是InnoDB引擎。
我注意到了现场环境。 INNODB_BUFFER_POOL_SIZE超过10GB,但服务器只有4GB的RAM。我无法想象这是好事!
提前致谢。
答案 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大小比较并在另一个环境中将其设置为最佳值。