【问题标题】:SQL Server Memory OptimizationSQL Server 内存优化
【发布时间】:2012-01-08 08:57:54
【问题描述】:

这将是我对 SQL Server 2008R2 进行微调的第一次尝试,我想要一个基于以下内容的起点。

当我查看资源监视器时,我看到(以 KB 为单位): 提交:843,948 工作集:718,648 可分享:26,276 私人:692,372

在我们的虚拟服务器上可用的 2 个演出中,1.6 已用完,我怀疑是由于 SQL Server,当我启动一个执行大量 TVP 插入和检查的服务时,内存会被占用。我已经在我的 c# 服务中添加了一些 GC.collect(),但是我并没有真正看到太大的变化,这让我回到了 SQL Server。

我可以从哪里开始了解有关基于此信息进行优化的更多信息以及一些快速指示?

谢谢。

【问题讨论】:

    标签: sql-server sql-server-2008 optimization query-optimization


    【解决方案1】:

    SQL Server 旨在预先分配和“吃掉”您让它使用的所有内存。除了减少配置中的 SQL 占用空间之外,真的没有任何改进。

    【讨论】:

      【解决方案2】:

      如果是默认配置,sql server 会分析使用情况,然后尽可能多地获取内存来优化自己。如果其他应用程序开始请求内存,它会返回。

      您可以在内存方面使用几个值,最小值是 sql server 将保留的数量,以及最大值,它永远不会超过。您还可以使用它将运行的线程数。为此,您需要一些好的统计数据。取决于您的使用模式,还有什么需要内存以及它与其他人的合作程度。搞砸了,你可能会饿死 sql server,这绝不是一个好主意。我一直是 dbms 专用机器的忠实粉丝,可用于任何非平凡的用途。

      这既是艺术又是科学,除非你在其中发现一些可怕的东西,否则减慢你的 sql server 将会给你的应用程序提供大量内存来无所事事,因为它们正在等待 Db....

      更多内容可以查看。 MSDN - Sql Server Performance and Memory 您需要进行性能监控,并且对运行期间发生的事情有一个很好的了解。你想要一个“平均”的运行。高峰期、非办公时间处理、节假日等,完全没用。

      别忘了性能监控对机器有很大影响。

      【讨论】:

        【解决方案3】:

        这里有一个快速指示:购买更多内存。今天 2GB 不算什么。

        对于长答案:您需要了解 SQL Server 如何分配和使用内存。 2Gb 盒子上的 1.6Gb 是完全正常的。见Dynamic Memory Management

        当 SQL Server 启动时,它会计算虚拟地址空间的大小 对于缓冲池基于一些参数,如数量 系统上的物理内存、服务器线程数和各种 启动参数。 SQL Server 保留其计算的数量 处理缓冲池的虚拟地址空间,但它获取 (提交)仅当前所需的物理内存量 加载。

        然后实例继续根据需要获取内存以支持 工作量。随着越来越多的用户连接并运行查询,SQL Server 获得 按需增加额外的物理内存。 SQL Server 实例 继续获取物理内存,直到达到最大值 服务器内存分配目标或 Windows 指示没有 更长的空闲内存;当内存超过 min server memory 设置,Windows 指示存在 可用内存不足。

        换句话说,SQL Server 将不会释放 1.6Gb,除非有来自 Windows 的内存压力通知。

        最后,关于在哪里查找优化信息的问题:Waits and Queues 是一个优秀 资源。它是一种方法,可让您识别瓶颈并针对所有常见瓶颈情况推荐适当的操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-06
          • 2013-08-11
          相关资源
          最近更新 更多