我们的程序使用一个SQL服务器数据库作为其后端(SQLserver2008-R2- 2014)。这个程序在性能上是可以的,但是数据库似乎放慢了一些速度。
作为夜间过程的一部分,我们需要运行大量的查询,这些查询目前已经完成得太晚了。(午夜12点开始,上午9点结束人们开始工作,然后需要数据库)这现在还可以,但我们仍然在建立数据库,需要设置更多批处理作业。
例如,在我的笔记本电脑和服务器上使用相同的数据库,我们需要改进的查询之一在我的工作笔记本上需要2分钟,在我们的客户端服务器上需要3小时。客户端服务器是新的,并且是按照我们提供的规范构建的(下面是规范)。(服务器专用于我们的SQL实例。)
因此,服务器运行查询的时间比我的笔记本电脑长9000%。这不仅适用于一个查询或一个客户端服务器。大多数客户端服务器及其查询都会发生这种情况。
我知道在我的笔记本电脑上它应该更快,但我的想法没有那么多。因此,我的问题是:我们的客户端服务器环境可以产生什么样的差异?我能做些什么?
操作系统版本: Windows企业版
内存96 GB
处理器:2*8核心HyperThreaded处理器
控制器1
磁盘子系统1:用于OS -2*300 OS 10K硬盘的Raid 1
磁盘子系统2:用于Server数据的Raid 10 -8*300 10 15K HDD
磁盘子系统3:用于Server -4*企业级SDD 256 10的Raid 10
控制器2
磁盘子系统4:用于Server日志的Raid 10 8*146 10 15K HDD
磁盘子系统5:用于Server非群集索引的Raid 10 -4*企业级SDD 512 10
发布于 2015-12-30 18:15:44
使用like '%findthis%'的select语句出现了问题,导致了缓慢问题。一个服务器运行得很快,而另一个服务器运行得非常慢。我们能够将%符号中的一个移除给'%findthis',从而使优化器能够正确地解释查询--在这两个服务器上都产生了相似的性能结果。(%findthis%只是糟糕的形式,但不幸的不是我们的代码改变)。
长话短说,确保您的Server版本是相同的。例如,运行select @@version并查看数值序列,如10.50.6000.34。
我们的版本几乎相同,但我们的测试服务器运行速度快于生产,因为它运行的是一个跟踪标志--和一个小补丁。Server的下一个修补程序将包含标记,因此通知我。
在两个服务器上运行DBCC TRACESTATUS(-1),以确保它们也运行相同的跟踪标志。我忘记了哪个跟踪标志在测试中运行,从而使它更快,但是生产SQL的最新补丁程序会启用它。已经有一段时间了,大多数人都外出度假了,否则我会有更多关于哪个标志和哪个补丁的详细信息。
发布于 2016-04-20 11:04:30
不我不同意。考虑到你刚才描述的规格,我不相信在你的笔记本电脑上它会更快。
我也不相信版本或标志上的差异也能解释这一点。9,000%的差异表明有些事情很不对劲。
您应该期望在服务器上至少获得相同或类似的结果,甚至更好。
在这一点上,你的帖子中有太多的变量。我认为你需要通过一个消除的过程来确定问题存在的地方。
是服务器硬件吗?是sql实例吗?它是特定于db的吗?是表/索引/统计吗?这是查询本身吗?它是与负载或外部影响有关吗?
首先,我将在服务器和膝上型计算机上执行相同条件下的简单测试。例如,一个简单的脚本将一百万行测试数据插入到表中。在几个dbs上运行相同的脚本来获得基准测试。
如果您获得了类似的性能,那么就开始查看您的表。创建一个维护脚本来重建索引和更新统计数据。在运行查询之前,在两个dbs上运行相同的脚本。
运行查询时,请检查两种环境中的执行计划。是一样的吗?
https://dba.stackexchange.com/questions/117697
复制相似问题