tempdb過大事故記錄-sqlserver


今天收到預警消息,提示磁盤空間已經滿了,感覺很奇怪.剛裝的新機器怎么可能會磁盤空間不足.登陸看了看

可以看的到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:這個語句是用來做什么的

根據以上統計信息我們可以查出來登陸名和程序所在的程序名,初步確認了是那個程序造成的,然后根據上面兩個疑問去查詢

發現有以下代碼:

 

紅線內是原來沒有的,一個數據庫鏈接鏈接以后沒有釋放.所以才會一致鏈接數據庫不釋放整個會話和會話資源.然后加上以后重新啟動程序.繼續監控,發現問題已經解決了.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM