我们的生产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.
所以,这是我的问题 -
什么会导致tempdb上的所有写入?我不确定我们是否总是有那么多活动,但似乎过度,这些问题是最近的.
我应该只为服务器添加更多内存吗?
在高负载服务器上,tempdb和db文件应该位于不同的阵列上吗?
Nick Kavadia.. 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数据库以了解如何执行此操作.
如果您有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数据库以了解如何执行此操作.