您的位置:首页 > 数据库

tempdb过大事故记录-sqlserver

2016-04-11 13:34 274 查看
今天收到预警消息,提示磁盘空间已经满了,感觉很奇怪.刚装的新机器怎么可能会磁盘空间不足.登陆看了看



可以看的到tempdb已经65G的了,而且显示是百分百可用.这个就很奇怪了,为什么会出现这种情况呢.考虑到磁盘会爆满,立即重启了sqlserver,修改tempdb的初始值大小为10G,然后回收调可用的空间给OS,看样子是告一段落了.事实上并不是这样,我的tempdb第二天暴增了.这是怎么回事?我这台机器现在跑的程序基本没有,只是作为复制的订阅端.怎么会出现这种情况呢.然后就登陆看了看数据库统计信息:

SELECT top 10 t1.session_id,
t1.internal_objects_alloc_page_count, t1.user_objects_alloc_page_count,
t1.internal_objects_dealloc_page_count , t1.user_objects_dealloc_page_count,
t3.login_name,t3.status,t3.total_elapsed_time
from sys.dm_db_session_space_usage t1
inner join sys.dm_exec_sessions as t3
on t1.session_id = t3.session_id
where (t1.internal_objects_alloc_page_count>0
or t1.user_objects_alloc_page_count >0
or t1.internal_objects_dealloc_page_count>0
or t1.user_objects_dealloc_page_count>0)
order by t1.internal_objects_alloc_page_count desc


查看数据库的会话占用的tempdb的空间大小,然后根据SPID查看详细信息,然后查处会话的具体信息



根据信息我查到有一个会话占用特别多的临时空间,仔细查看了一下会话的详细信息.select 语句如下:

select 1

很奇怪对不对,有两个问题考虑一下:

1:为什么要一直不停执行这个语句

2:这个语句是用来做什么的

根据以上统计信息我们可以查出来登陆名和程序所在的程序名,初步确认了是那个程序造成的,然后根据上面两个疑问去查询

发现有以下代码:



红线内是原来没有的,一个数据库链接链接以后没有释放.所以才会一致链接数据库不释放整个会话和会话资源.然后加上以后重新启动程序.继续监控,发现问题已经解决了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: