我有一个运行MS SQL 2008的高规格(多核,RAID)服务器,上面有几个数据库。 我有一个低吞吐量的进程,需要定期从一个数据库中获取less量的信息,代码似乎工作正常。
然而,有时候,当我的一个同事对其他数据库中的一个进行了大量查询时,我发现机器上的CPU使用率已经很高,并且来自我的应用程序的连接超时。
为什么会这样呢? 我会认为很多核心和硬盘会以某种方式(和聪明的DB服务器一起)能够保持其他应用程序的至less部分资源? 我很确定他没有为他的查询使用多个连接。
我能做些什么来防止这种情况?
编辑
我没有很多关于硬件的细节。 它使用普通的硬盘,搜查服务器2k3。 这可能是几年前的惠普。 基本上,硬件是没有意义的,所以我想我可能configuration了错误的东西?
这意味着你有一个非常不理想的查询。 普通嫌犯:
这也可能是一个简单的资源问题:返回的数据是否触及整个数据库,因此它使用了太多的内存来分页? 或者你得到ASYNC_NETWORK_IO等待,这可能意味着客户端不能尽快地接受结果?
一般来说,如果你最大限度地使用服务器,那么代码和/或devise很差,而不是数据库引擎。
只要您确定已经尽可能优化,您可能需要查看您的设置以获得并行性; 默认情况下是使用所有处理器进行并行查询,您可以根据处理器的数量将其更改为最大值,查询可能需要一些时间才能运行,但是应该保留足够的处理能力服务login请求。 如果问题与这个查询分离,而不是使系统范围的设置发生变化,那么可以通过添加MAXDOP选项来改变他/她的查询,以查看是否有帮助。