今天 *** 作着服务器,突然右下角提示“C盘空间不足”!
吓一跳!~
看看C盘,还有7M!!!这么大的C盘空间怎么会没了呢?搞不好等下服务器会动不了!第一反应就想可能是日志问题,很可能是数据库日志问题
于是查看日志,都不大,正常。
dbcc sqlperf(logspace)
看看系统报错:
是tempdb问题,但是刚才看日志才几M,根据提示查看日志状态:
select name,log_reuse_wait_desc from sys.databases
数据库日记现在没什么 *** 作,可能是执行完了。
活动的虚拟日志也不多,10个左右:
dbcc loginfo
于是马上收缩日志,收缩数据文件,收缩出1G左右。
还是不行,继续不断地更改大小不断收缩,只要小于55G都改数据进行收缩,竟然还能收缩了9G!
DBCC SHRINKfile (N'tempdev',1024)--单位为MBDBCC SHRINKDATABASE (tempdb,1024);--单位为MB
暂时缓解了,看来是收缩不了了。都说得重启服务器才行,当前连接较多,没有重启.所以先查查什么原因引起的。
查看当前的各种游标,sql ,堵塞等,没发现什么,事务应该执行完了。
查看tempdb记录的分配情况:
use tempdbgoSELECT 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_timefrom 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 >0or t1.internal_objects_dealloc_page_count>0 or t1.user_objects_dealloc_page_count>0)order by t1.internal_objects_alloc_page_count desc
有四个关键信息:
session_ID :稍等可以查询该session的相关信息
internal_objects_alloc_page_count :分配给session内部对象的数据页
internal_objects_dealloc_page_count :已经释放的数据页
login_name : 该session的登录名
从internal_objects_alloc_page_count 和internal_objects_dealloc_page_count可以看出,给session分配了7236696页,计算一下:
select 7236696*8/1024/1024 as [size_GB]竟然为55G,几乎和tempdb增长的大小一致,可以断定就是这个session引起的。internal_objects_dealloc_page_count 可以看到已经释放了,暂用tempdb的数据已经释放了。
通过登录名,已经知道谁在 *** 作了。(这就是给每个相关人员自己登录名的好处之一,可以很快追踪使用者,是内部人员 *** 作)
如果查询上面的DMV距事件发生的时间太久,可能就查不到了。(我这不到5小时再查询,上面的session就查不到了,所以要尽快查看)
现在看看这session_ID的用处:
select p.*,s.text from master.dbo.sysprocesses p cross apply sys.dm_exec_sql_text(p.sql_handle) swhere spID = 1589看到最后有一条语句:
拷贝出来,几乎是数据库中最大的 8个表做inner join 连接 查询!!
代码就不贴出来了。
目前已经查出什么原因导致了tempdb增大的问题。tempdb从55285MB收缩为47765MB。
USE [master]GOALTER DATABASE [tempdb] MODIFY file ( name = N'tempdev',SIZE = 524288KB )GO总结
以上是内存溢出为你收集整理的SqlServer 一个查询语句导致tempdb增大55G全部内容,希望文章能够帮你解决SqlServer 一个查询语句导致tempdb增大55G所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)