好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SQLServer中的动态和静态内存分配

我们知道, SQL 服务器有两种管理方法,分别是 动态 分配 和 静态 分配 ,用以控制程序可使用的 内存 数量。 动态 分配 允许管理员声明一块 内存 的大小;考虑到它的实际使用,SQL服务器可以 分配 给其需要占用的 内存 的最大值,并且(理论上)在没有使用 内存

  我们知道, SQL 服务器有两种管理方法,分别是 动态 分配 和 静态 分配 ,用以控制程序可使用的 内存 数量。 动态 分配 允许管理员声明一块 内存 的大小;考虑到它的实际使用,SQL服务器可以 分配 给其需要占用的 内存 的最大值,并且(理论上)在没有使用 内存 的情况下将其释放。 静态 分配 则是创建一块固定的 内存 空间,提供给SQL Server使用――不再进行 分配 。

  在默认情况下,SQL Server被设置成 动态 分配 , 分配 给其正在运行的计算机内所有可用的物理 内存 。许多管理员注意到SQL Server 内存 随时间的流逝被逐渐消耗殆尽时,其原因很可能是故障或是 内存 漏洞,但这个程序正是被设计成这样的。SQL Server就是要在任何可能的情况下在电脑中运行,并因此为达到其最佳性能而使用所有可用的 内存 。如果SQL Server在独立的机器中运行,那么就让它 分配 和释放其需要的 内存 吧。

  在一个小型商业服务器机器中,SQL可能与其他程序,如IIS,同时运行,管理员或许尝试着进行设置,使SQL Server运行在一块固定大小的 内存 ,目的是控制其不会占用用于共享的 内存 。但这并不一定能如愿以偿。一方面,将 内存 的最高限度设置得太低,并且没有 分配 给SQL服务器足够的可用 内存 来用作类似事务日志或查询执行的缓存,所有这些都很难办到。使SQL服务器得到执行操作所需 内存 的惟一方法就是换出其他的页面,这是个缓慢的过程。

  有许多方法可以计算出最好的 内存 分配 。如果你有可预知的用户负载,依照用户所需的最大数目 分配 给他们。微软推荐至少用4 MB用作 动态 的最大空间,这已经成为一个可能的规则。如果你的用户负载变化范围很大――如以下情况,当你通过IIS 的前端连接到公共的因特网来支持你的数据库服务的时候――实时的统计数据将会比仅凭猜测所作的工作帮助更大。在高峰期,把SQL Server的高速缓存命中率和每秒缺页率等性能数字搜集起来。如果这些数据表明SQL Server正在做大量的交换,那么增加最大 内存 空间直到交换逐渐减少。每秒一次或更多次的交换是有坏处的。

  另一种选择是使“为SQL Server预留物理 内存 ”的选项可用,这可以防止SQL Server把已经 分配 给它的 内存 换出,即使当其他应用程序能够使用它时。这可以叫做是一把双刃剑:它既可以相当大程度的提高性能,也可能带来更大的性能损害。在有许多RAM 可以共享的(1 GB 或更多)的系统中,这是值得一试的,但是当有其他关键的进程可能突然需要大量的 内存 时,这种办法是不应该使用的。(并且如果需要的话,SQL Server可能会被迫放弃一些它自己的 内存 )。假如SQL Server是在独立的机器上运行,用这种办法最佳化性能是比较值得的。

查看更多关于SQLServer中的动态和静态内存分配的详细内容...

  阅读:33次