我们的生产SQL Server存在一些问题。
服务器:双四核Xeon 8 GB RAM 单个RAID 10阵列 Windows 2003 Server 64位 SQL Server 2005 Standard 64位
现在机器上有大约250MB的可用RAM。 SQL Server有大约6GB的RAM,我们的监控软件说只有一半的SQL Server分配的RAM实际上正在使用。
我们的主数据库大约有20GB,任何频率都可以使用大约12GB。我们的tempdb是700MB。两者都位于同一物理磁盘阵列上。
此外,使用Filemon,我能够看到tempdb文件有100或1000的写入长度65536.磁盘队列长度在80%的时间内超过100。
所以,这是我的问题 -
什么会导致tempdb上的所有写入?我不确定我们是否总是有那么多的活动,但似乎过度,这些问题是最近的。
我应该向服务器添加更多内存吗?
在高负载服务器上,tempdb和db文件应该位于不同的阵列上吗?
答案 0 :(得分:7)
如果您有SAN或NAS,高磁盘队列长度并不意味着您有I / O瓶颈,您可能需要查看其他其他计数器。查看SQL Server Urban Legends discussed了解详情。
1:以下操作大量使用tempdb
这些SQL Server 2005功能也大量使用tempdb:
如其他SO回答中所述,请阅读this article有关提高tempdb性能的最佳做法。
2:查看服务器上的可用RAM量,即查看WMI计数器内存 - >可用的Mbytes没有帮助,因为SQL Server会将数据页缓存在RAM中,因此任何运行时间足够长的数据库服务器都没有多少空闲RAM。
您应该查看的计数器在告诉您是否向服务器添加RAM有帮助时更有意义:
SQL Server实例:缓冲区管理器 - >页面预期寿命(以秒为单位)
低于300-400秒的值意味着Pages内存不会很长,并且不断从磁盘读取数据。具有较低页面预期寿命的服务器将受益于额外的RAM
和
SQL Server实例:缓冲区管理器 - >缓冲区缓存命中率
这告诉您从RAM读取的页面百分比,不必从磁盘读取,缓存命中率低于85意味着服务器将受益于额外的RAM
3:是的,这里不能出错。建议在一组单独的磁盘上安装tempdb。请查看标题下的this KB article:移动tempdb数据库以了解如何执行此操作。
答案 1 :(得分:3)
优秀的问题,+ 1
tempdb在SQL 2005+中使用得更多。 至少:快照隔离级别,在线索引重建,在触发器中读取INSERTED / DELETED(用于读取日志文件!)
这除了通常的子句,临时表等的顺序。
您可能更好地拆分日志和数据文件(也用于恢复)。 更多的记忆总是好的,但请参见下面的64 bit specific stuff, Grumpy Old DBA。
最后,也许最重要的可能是,你可以在tempdb中争用空间分配: Linchi Shea和SQL Server storage team
的解释延迟编辑:
Paul Randall添加了一个条目“Comprehensive tempdb blog post series”,提供了良好的链接
答案 2 :(得分:3)
是的,高负载服务器上的建议是将TempDB放在用户数据库中的一组独立驱动器上:
答案 3 :(得分:3)
不是直接回答您的问题,但这可能是一个很好的提示:重新启动SQL Server实例将清除tempdb,这可能是调查在tempdb上执行的操作时的良好开端。
答案 4 :(得分:0)
写入tempdb可以是任何东西。内部哈希表,临时表,表变量,存储过程调用等
如果你只有250 Megs的可用内存,那么更多内存是好的。
始终建议您将tempdb和用户数据库拆分为不同的磁盘。
对tempdb的所有写入大小都是64k,因为它是每个数据库扩展区的大小。