服务器 频道

SQL Server2000服务器功能合并问题的看法

  使用多个实例
  使用多个实例可以增加每台服务器上的数据库数量和工作负荷
  
  当数据库的数量和相应的工作负荷达到一定水平后,将多个 SQL Server 实例中的数据库分组是一个好办法,因为这样可以缓解内存压力。为每个实例的服务器过程高速缓存分配更多内存可以获得良好的性能,并能够提供更好的操作和安全隔离。
  
  测试表明,使用多个实例可以增加数据库的总数以及系统上产生的相应工作负荷,同时还能维护每个数据库的吞吐量。
  
  图 1 表明,当 PACE 数据库的数量从 500 增加至 4000 时,单个实例的性能将降低。但是如果分散到 8 个实例上,每个实例上运行 500 个数据库,那么每分钟的事务处理数量是在一个实例上运行 500 个数据库时的 8 倍。在 8 个实例中的每个实例上运行高工作负荷的 500 个数据库几乎利用了此硬件配置中的全部 CPU 容量,所以通过在 16 个实例中的每个实例上运行 500 个数据库来增加数据库的总数不能增加总吞吐量(但是,系统仍然显示了一个可接受的吞吐量)。
  
  图 2 表明,当单个 SQL Server 上的数据库数量(或客户端连接数量)增加时,每个数据库的工作负荷吞吐量将减少。如果每个实例的数据库保持在 500 个,则每个数据库的吞吐量在单个实例和在 8 个实例上是一样的,但是当增加至 16 个实例后,吞吐量会因为 CPU 的限制而减少。
  
 

  
图 1:系统上的总工作负荷吞吐量与系统上的 PACE 数据库总数

  
 

  
图 2:每个数据库上的工作负荷吞吐量与系统上的 PACE 数据库数量

  为什么要在此方案中使用多个实例
  
  在一个实例上使用上千个 PACE 数据库会造成性能下降
  
  SQL Server 2000 最多可以为该过程高速缓存使用 2 GB 的虚拟内存(如果在 boot.ini 中设置了 /3 GB 开关,则为 3 GB)。当单个实例上的数据库数量从 500 增加至 1000 时,过程高速缓存中将没有足够的虚拟内存来保存内存中增加的所有查询执行计划。为了释放内存,以便为其他存储过程的计划腾出空间,系统会丢弃过程高速缓存中的某些执行计划,但是此操作要求在需要时重新编译这些被丢弃的存储过程计划。请注意,这样所造成的频繁的重新编译工作会影响工作负荷性能。
  
  使用多个实例缓解内存压力
  
  如图 3 所示,在具有 4 GB 以上物理内存的情况下,在多个实例上运行数据库可以留出更多的内存供过程高速缓存使用(每个实例具有自己的虚拟地址空间和过程高速缓存)。
  
  当单个实例的 PACE 数据库数量增至数千后,这些数据库对象会占用太多供过程高速缓存使用的内存空间,从而导致性能下降。过程高速缓存将被丢弃,然后进行重新编译。综上所述,我们建议使用多个实例。
  
 

  
图 3:不同配置中过程高速缓存的有效内存

  其他类似的设计也面临同样的问题
  
  决定多个实例是否能够提高性能的关键因素是所有执行计划所需的内存空间总量。所需的内存空间总量是由执行计划的平均大小、每个数据库的存储过程数量和数据库数量决定的。如果每个数据库中有较多的过程,那么即使使用较少的数据库也会产生同样的问题。此外,如果较少的数据库中存在非常复杂的过程,即使每个数据库的存储过程较少,也会产生同样的问题。
  
0
相关文章