我们正在使用SQL Server 2005.由于较大的tempdb大小,最近SQL server 2005在我们的生产环境中崩溃。 1)大tempdb大小的原因是什么? 2)有没有办法查看tempdb中的数据?
答案 0 :(得分:1)
2)有没有办法查看tempdb中的数据?
不,因为它没有留在那里。 Tempdb有非常特殊的处理方式,比如每次重启服务器都会被丢弃。
1)大tempdb大小的原因是什么?
低效的SQL,维护作业或仅手头的数据。显然,一个800gb,6000gb的数据库可能需要比4gb在线crm尝试更多的tempdb空间。你没有用绝对术语指定任何大小。什么是大的?我的tempdb数据库在我的小型服务器上以64gb硬编码。
进入Tempdb的典型SQL是:
通常,您可以通过在查询日志中使用hugh IO stats来查找这些查询,或者只是放慢速度。
那就是说,维护计划也在那里,但有理由。最后,你的“大”可能是我的“甚至不值得一提”。这真的取决于你做了什么。使用查询跟踪工具找出需要很长时间的内容。
物理上Tempdb在处理方面非常特殊 - 如果没有必要,sql server不会写入文件(即保留内存中的thords)。写入光盘是记忆流动的标志。这与正常的db写入行为不同。 Tempdb,如果它流过,最好放在速度相当快的SSD上......这通常不会太贵,因为它仍然会相对较小。
使用此处的查询查找tempdb的其他查询 - 基本上你在这里用脏水钓鱼,需要先尝试一下,直到找到罪魁祸首。
答案 1 :(得分:0)
发展SQL Server数据库的常用方法 - 任何数据库,而不仅仅是tempdb
- 是将其数据和日志文件设置为自动增长(尤其是日志文件)。 SQL Server非常乐意发展日志和数据文件,直到消耗掉所有可用的磁盘空间。
最佳做法,恕我直言,是允许对数据文件进行有限的自动增长(对其增长的大小设置上限)并修复日志文件的大小。您可能需要进行一些分析以确定日志文件需要多大。特别是对于tempdb,恢复模型也应该设置为简单。
答案 2 :(得分:0)
Ok tempdb是一种特殊的数据库。您在程序等中使用的任何临时对象都在此处创建。因此,如果您的应用程序在查询中使用了大量临时表,它们都将驻留在此处,但是在重置连接(spid)之后它们应该自行清理。
可以增加tempdb的另一件事是数据库维护任务,但是它们会对数据库日志文件造成更大的损失。
每次重新启动SQL服务时,也会清除Tempdb。它基本上删除了数据库并重新创建它。我同意@Nic关于保留tempdb的原因,不要随意使用它,tempdb中的空间问题通常表明其他地方存在另一个更大的问题。更多的空间将掩盖问题,但只有这么长时间。你的驱动器有多少可用空间,你有tempdb吗?
其他事情,如果还没有,请尝试将tempdb放在它自己的驱动器上,如果可能的话,还要将数据和日志文件放在各自独立的驱动器上。
因此,如果您不重新启动SQL Server / Service,您的驱动器很快就会用完空间。
答案 3 :(得分:0)
使用tempdb
从sys.database_files
中选择(size * 8)作为FileSizeKB