SQL Server的tempdb很大的办理方法

[复制链接]
发表于 2026-2-10 13:13:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1.发起先重起SQL Server服务或服务器(引发的标题:服务器停息,且大概丢失部门数据),故发起在晚上无人使用时举行。
2.修改tempdb的初始巨细,不要用默认巨细,比方限定tempdb的巨细,以观后效。
3.假如可以,请优化sql 语句
4.定期重起SQL Server服务 或  服务器
5. 可以做一个作业,每天主动实验紧缩
6. 为tempdb提供独立硬盘(如:256G SSD)

大多数各人以为tempdb是用于临时表的. 着实, 你根本不须要建临时表就可以很容易的使tempdb增大. 好比:
 1. 任何排序查询使用的memory高出了SQL SERVER所被分配的memory, 该查询就会被逼迫在tempdb里举行.
 2. 任何排序所要求的空间高出了tempdb被分配的空间
 3. DBCC CHECKDB是使用tempdb的空间举行的. 当碰到较大的表是, 会"吃掉"很多tempdb的空间.
 4. DBCC DBREINDEX大概其他DBCC..with 'Sort in tempdb'选项的也会占用很多tempdb的空间.
 5. unions, order by / group by, cartesian joins, outer joins, cursors, temp tables, table  
    variables, 和 hashing等所产生的大的查询结果也很占tempdb的空间.
 6. 任何没commit和roll back的事件会留在tempdb里
 7. 使用ODBC DSN加上'建临时存储过程'选项的, 会在毗连其间把创建的object留在tempdb里.
下面的语句告诉你tempdb的分配空间:


de>use tempdbde>
de>gode>
de>execde> de>sp_spaceusedde>
de>gode>

 下面的代码告诉你那些表占用了tempdb的很多空间 -- 这可以使你缩小查询范围: 看那些事件运行了很长时间或经常被留在tempdb里:

de>USE tempdb de>
de>GO de>
de>SELECTde> de>namede> 
de>    FROMde> de>tempdb..sysobjects de>
de> de> 
de>SELECTde> de>OBJECT_NAME(id), rowcnt de>
de>    FROMde> de>tempdb..sysindexes de>
de>    WHEREde> de>OBJECT_NAME(id) LIKEde> de>'#%'de> 
de>    ORDERde> de>BYde> de>rowcnt DESCde>

 较大的rowcount值阐明比力大的临时表占用了tempdb的空间. 固然, 由于tempdb用于内部I/O和其他排序过程, 以是大概你看不出什么来. 不外, 你还是可以缩小观察范围的.(好比, 你可以再通过查询INFORMATION__SCHEMA.ROUTINES..WHERE ROUTINE_DEFINITION LIKE '%#table_name%' 来查询哪个存储过程占用了很多tempdb空间)
 别的, 你可以用profiler来看数据库文件和日记文件的auto grow变乱, 假如有, 阐明你设置的tempdb空间不敷大.


短期的调停方式:
 1. shrink tempdb .
 2. 用DBCC OPENTRAN看看有没有长时间运行的事件(一样寻常是由于没commit), 然后可以的话, 用KILL把该session制止.
 3. 重启

 恒久的方法:
 tempdb这个临时数据库,它对性能的影响较大。tempdb和其他数据库一样可以增大,可以缩小。当数据文件须要增长的时间,通常不能保持剩余部门的一连性。这时文件就会产生碎片,这种碎片会造成性能降落。这种碎片属于外来性碎片。要制止在tempdb中产生外来性碎片,必须包管有充足的硬盘空间。一样寻常将tempdb的容量放到匀称使用容量。而你也应该允许tempdb主动增长,好比你有个一个超大的join操纵,它创建了一个高出tempdb容量的时间,该查询将失败。你还要设置一个公道的单位增长量。由于假如你设得太小,将会产生很多外来性碎片,反而会占用更多资源。sqlserver调优最有效的做法之一,就是把夺取资源的操纵独立出去。tempdb就是一个须要独立出去的部门而tempdb和其他体系库一样是公用的,是存取最大概频仍的库,全部处理惩罚临时表、子查询、GROUP   BY、排序、DISTINCT、毗连等等。它最得当放到一个具有快速读写本事的装备上

 
 
 
 
综上所述:
 1) tempdb没在单独的硬盘上,大概是硬盘空间太小.。
 2) 既然经常增大,阐明商务运动须要很大的tempdb,也就阐明设置的tempdb的初始空间太小。假如颠末分析后, 没什么别的非常, 好比:没有长时间运行的事件等,那更阐明该tempdb应该设置较大的空间。




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表