SQL服务器有两种基本管理方法动态分配和静态分配用以控制程序可使用的内存数量动态分配允许管理员声明一块内存的大小考虑到它的实际使用SQL服务器可以分配给其需要占用的内存的最大值并且(理论上)在没有使用内存的情况下将其释放静态分配则是创建一块固定的内存空间提供给SQL Server使用——不再进行分配
在默认情况下SQL Server被设置成动态分配分配给其正在运行的计算机内所有可用的物理内存许多管理员注意到SQL Server内存随时间的流逝被逐渐消耗殆尽时其原因很可能是故障或是内存漏洞但这个程序正是被设计成这样的SQL Server就是要在任何可能的情况下在电脑中运行并因此为达到其最佳性能而使用所有可用的内存如果SQL Server在独立的机器中运行那么就让它分配和释放其需要的内存吧
在一个小型商业服务器机器中SQL可能与其他程序如IIS同时运行管理员或许尝试着进行设置使SQL Server运行在一块固定大小的内存目的是控制其不会占用用于共享的内存但这并不一定能如愿以偿一方面将内存的最高限度设置得太低并且没有分配给SQL服务器足够的可用内存来用作类似事务日志或查询执行的缓存所有这些都很难办到使SQL服务器得到执行操作所需内存的惟一方法就是换出其他的页面这是个缓慢的过程
有许多方法可以计算出最好的内存分配如果你有可预知的用户负载依照用户所需的最大数目分配给他们微软推荐至少用 MB用作动态的最大空间这已经成为一个可能的规则如果你的用户负载变化范围很大——如以下情况当你通过IIS 的前端连接到公共的因特网来支持你的数据库服务的时候——实时的统计数据将会比仅凭猜测所作的工作帮助更大在高峰期把SQLServer的高速缓存命中率和每秒缺页率等性能数字搜集起来如果这些数据表明SQL Server正在做大量的交换那么增加最大内存空间直到交换逐渐减少每秒一次或更多次的交换是有坏处的
另一种选择是使为SQL Server预留物理内存的选项可用这可以防止SQL Server把已经分配给它的内存换出即使当其他应用程序能够使用它时这可以叫做是一把双刃剑它既可以相当大程度的提高性能也可能带来更大的性能损害在有许多RAM 可以共享的( GB 或更多)的系统中这是值得一试的但是当有其他关键的进程可能突然需要大量的内存时这种办法是不应该使用的(并且如果需要的话SQL Server可能会被迫放弃一些它自己的内存)如果SQL Server是在独立的机器上运行用这种办法最佳化性能则是值得的