Bundan önce yazmış olduğumuz 2 yazıya son olarak sleeping mode’da kalan session’ların dmv’ler ile tespit edilip kill edilmesine ilişkin scripti, bu yazımızda paylaşacağız.
Daha önceki yazılara ulaşmak için; Sleeping Session Kill Script – I ve Sleeping Session Kill Script – II
Başlangıçta sleeping sessionların neden sleeping mode’da kaldığını bulmak gerekli. En temel sebeplerinden biri uygulama developer’ların transacation’un sonunda close veya dispose etmemesi görülmektedir. Bu fonskiyonların çağrıldığı sorguların içinde de close ihtiyacına gerek olabilir.
Veri tabanına query pencerelerinden veya jobların içine yazılan query’lerinde commit edilmesi gerekmektedir. Eğer commit edilmemesi durumunda sorgu açık kalan query ekranında bile sleeping mode’da transactionn log üretir ve ldf dosyanızın büyümesine neden olabilir. Buda başka bir probleme neden olabilmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
DECLARE @user_spid INT DECLARE CurSPID CURSOR FAST_FORWARD FOR SELECT es.session_id AS session_id FROM sys.dm_exec_sessions AS es INNER JOIN sys.dm_exec_connections AS c ON es.session_id = c.session_id CROSS APPLY ( SELECT MAX(DB_NAME(dt.database_id)) AS database_name FROM sys.dm_tran_session_transactions AS st INNER JOIN sys.dm_tran_database_transactions AS dt ON st.transaction_id = dt.transaction_id WHERE is_user_transaction = 1 GROUP BY st.session_id HAVING es.session_id = st.session_id ) AS trans CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) AS t WHERE es.open_transaction_count = 0 AND es.session_id >50 AND es.original_login_name NOT IN('YourUsers') AND es.session_id NOT IN ( SELECT session_id FROM sys.dm_exec_requests ) AND es.session_id IN ( SELECT request_session_id FROM sys.dm_tran_locks WHERE request_status = 'GRANT' ) AND STATUS = 'sleeping' AND is_user_process = 1 AND es.session_id <> @@spid OPEN CurSPID FETCH NEXT FROM CurSPID INTO @user_spid WHILE (@@FETCH_STATUS=0) BEGIN EXEC('KILL '+@user_spid) FETCH NEXT FROM CurSPID INTO @user_spid END CLOSE CurSPID DEALLOCATE CurSPID GO |
“Sleeping Session Kill Script – III” üzerine 2 yorum