SQL Server 2005内存压力和tempdb写入问题

Bri*_*ian 11 sql-server performance sql-server-2005 tempdb

我们的生产SQL Server存在一些问题.

服务器:双四核Xeon 8 GB RAM单RAID 10阵列Windows 2003 Server 64位SQL Server 2005标准64位

现在机器上有大约250MB的可用RAM.SQL Server有大约6GB的RAM,我们的监控软件说只有一半的SQL Server分配RAM实际上被使用.

我们的主数据库大约为20GB,任何频率都可以使用大约12GB.我们的tempdb是700MB.两者都位于同一物理磁盘阵列上.

此外,使用Filemon,我能够看到tempdb文件有100或1000的写入长度65536.磁盘队列长度几乎80%的时间超过100.

所以,这是我的问题 -

  1. 什么会导致tempdb上的所有写入?我不确定我们是否总是有那么多活动,但似乎过度,这些问题是最近的.

  2. 我应该只为服务器添加更多内存吗?

  3. 在高负载服务器上,tempdb和db文件应该位于不同的阵列上吗?

Nic*_*ias 7

如果您有SAN或NAS,则磁盘队列长度不高并不意味着您有I/O瓶颈,您可能需要查看其他额外的计数器.查看SQL Server Urban Legends,了解更多详细信息.

1:以下操作大量使用tempdb

  • 重复创建和删除临时表(本地或全局)
  • 使用tempdb进行存储的表变量
  • 与CURSORS关联的工作表
  • 与ORDER BY子句关联的工作表
  • 与GROUP BY子句关联的工作表
  • 与HASH PLANS相关的工作文件

这些SQL Server 2005功能也大量使用tempdb:

  • 行级版本控制(snapshotisolation)
  • 在线指数重建

正如其他SO回答中所提到的,请阅读本文关于提高tempdb性能的最佳实践.

2:查看服务器上的可用RAM量,即查看WMI计数器Memory-> Available Mbytes没有帮助,因为SQL Server会将数据页缓存在RAM中,因此任何运行时间足够长的db服务器都将没有足够的RAM .
您应该查看的计数器更有意义,告诉您是否向服务器添加RAM将有所帮助:
SQL Server实例:缓冲区管理器 - >页面预期寿命(以秒为单位) 低于300-400秒的值意味着页面是不在内存中很长时间,并且不断从磁盘读入数据.具有较低页面预期寿命的服务器将受益于额外的RAM.

SQL Server实例:缓冲区管理器 - >缓冲区缓存命中率 这告诉您从RAM读取的页面百分比,不必从磁盘读取,缓存命中率低于85将意味着服务器将受益来自额外的RAM

3:是的,这里不会出错.建议在一组单独的磁盘上安装tempdb.请查看标题下的知识库文章:移动tempdb数据库以了解如何执行此操作.