这将是我第一次尝试微调我们的SQL Server 2008R2,我想要一个基于以下内容的起点。
当我查看资源监视器时,我看到(以KB为单位): 承诺:843,948 工作集:718,648 可分享:26,276 私人:692,372
在我们的虚拟服务器上可用的2个演出中,1.6正在用完,我怀疑它是由于SQL Server,当我启动一个TVP插入和检查服务时,内存会被弄糟。我已经在我的c#服务中添加了一些GC.collect(),但是我并没有真正看到很多变化,这让我回到了SQL Server。
根据这些信息和一些快速指示,我将在哪里学习更多关于优化的好起点?
感谢。
答案 0 :(得分:5)
这是一个快速指针:购买更多内存。今天2GB没什么。
对于长期答案:您需要了解SQL Server如何分配和使用内存。 2Gb盒子上的1.6Gb是完全正常的。见Dynamic Memory Management:
当SQL Server启动时,它会计算虚拟地址空间的大小 对于缓冲池,基于一些参数,如数量 系统上的物理内存,服务器线程数和各种 启动参数。 SQL Server保留其计算量 处理缓冲池的虚拟地址空间,但它获取 (提交)仅为当前所需的物理内存量 负荷。
然后,实例继续根据需要获取内存以支持 工作量。随着越来越多的用户连接并运行查询,SQL Server获得了 按需增加物理内存。一个SQL Server实例 继续获取物理内存,直到它达到最大值 服务器内存分配目标或Windows表示没有 更长的空闲记忆;当它超过时,它会释放内存 最小服务器内存设置,Windows表示有一个 自由记忆不足。
换句话说,除非Windows有内存压力通知,否则SQL Server将不释放1.6Gb。
最后,关于在哪里查找优化信息的问题:Waits and Queues是优秀的资源。这是一种方法,可以帮助您识别瓶颈并为所有常见的瓶颈案例推荐相应的操作。
答案 1 :(得分:1)
SQL Server旨在预先分配并“占用”您使用的所有内存。除了减少配置中的SQL占用空间外,确实无法看到任何改进。
答案 2 :(得分:1)
如果是默认配置,sql server将分析使用情况,然后尽可能多地获取内存以优化自身。如果其他应用程序开始询问内存,则会将其返回。
在内存方面你可以使用几个值,最小值是sql server将保留给自己的数量,以及它永远不会超过的最大值。您还可以使用它将运行的线程数。你需要一些好的统计数据。取决于您的使用模式,还有什么需要记忆以及它与其他人一起玩的程度。搞乱,你可以饿死sql server,这绝不是一个明智的想法。对于任何非常重要的用途,我一直是dbms专用机器的忠实粉丝。
尽管艺术与科学一样,除非你在那里找到一些可怕的东西,否则放慢你的sql server会给你的应用程序带来大量内存,因为它们正在等待Db ....
要查看更多内容。 MSDN - Sql Server Performance and Memory 您需要进行性能监控,并且知道运行期间发生了什么样的事情。你想要一个'平均'的运行。峰值命中,非办公时间处理,假期等,完全没用。
PS不要忘记性能监控是机器的重大打击。