Sleeping Session Kill Script – II

Bir önceki yazımızda az yoğun olup sorun yaratabilecek sistemlerde (örn.log shipping) sleeping sesion’ların killl edilmesine ilişkin yazıya (Sleeping Session Kill Script -I) ek olarak, bu yazımızda yoğun transaction olan yerlerde sleeping sessionların killl edilmesine ilişkin yazımızı paylaşacağız. Yoğun transaction olan yerlerde Sleeping session’lar lock oluşturarak kaynak tüketimini artırmakta ve sistemde dar boğaza sebebiyet verebilmektedir. Bu tür yoğun olan sistemlerde running, runnable veya suspend modda bekleyen session_id ‘leri kill etmek he uygulamada hemde veri tabanlarında büyük sorunlara sebebiyet verebilmektedir. bİZ DBA’ların en dikkat ettiği durumlardan biride bir DML işleminin rollback olması durumunda yaşanabilecek senaryolardır. Böyle bir durumla karşlılaşmamak adına Kimberly L. Tripp, Adam Machanic’in yayınlamış olduğu sp_whoisactive çıktısının sonucunda sleeping session’ları kill etmenin iyi bir yöntem olduğunu savunmaktadır. Aşağıda scriptlere ulaşabilirsiniz eğer sorguları bir job içerisine koyup belirli bir zaman dilimine bağlarsanız sürekli olarak sleeping session’ları kill edebilirsiniz. Ancak çok yoğun olarak kullanılan sistemlerde herhangi bir tempdb contentaion’ı yaşadığınızda, sp_whoisactive çıktısı […]

Sleeping Session Kill Script – II

Bir önceki yazımızda az yoğun olup sorun yaratabilecek sistemlerde (örn.log shipping) sleeping sesion’ların killl edilmesine ilişkin yazıya (Sleeping Session Kill Script -I) ek olarak, bu yazımızda yoğun transaction olan yerlerde sleeping sessionların killl edilmesine ilişkin yazımızı paylaşacağız.
Yoğun transaction olan yerlerde Sleeping session’lar lock oluşturarak kaynak tüketimini artırmakta ve sistemde dar boğaza sebebiyet verebilmektedir.
Bu tür yoğun olan sistemlerde running, runnable veya suspend modda bekleyen session_id ‘leri kill etmek he uygulamada hemde veri tabanlarında büyük sorunlara sebebiyet verebilmektedir. bİZ DBA’ların en dikkat ettiği durumlardan biride bir DML işleminin rollback olması durumunda yaşanabilecek senaryolardır.
Böyle bir durumla karşlılaşmamak adına Kimberly L. Tripp, Adam Machanic’in yayınlamış olduğu sp_whoisactive çıktısının sonucunda sleeping session’ları kill etmenin iyi bir yöntem olduğunu savunmaktadır.
Aşağıda scriptlere ulaşabilirsiniz eğer sorguları bir job içerisine koyup belirli bir zaman dilimine bağlarsanız sürekli olarak sleeping session’ları kill edebilirsiniz.

Ancak çok yoğun olarak kullanılan sistemlerde herhangi bir tempdb contentaion’ı yaşadığınızda, sp_whoisactive çıktısı tempdb’den okuduğu için size cevap vermeyecektir. Buda sorun anında sleeping sessionları kill edememenize neden olacaktır.
Böyle bir durum için dmv’ler ile okunan Sleeping Session Kill Script – III adlı yazıda konuya ilişkin script ve bilgilere erişebilirsiniz.

USE [tempdb]
GO
 
/****** Object:  Table [dbo].[TempTableDBA]    Script Date: 09.12.2022 9:37:16 AM ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[TempTableDBA](
	[dd hh:mm:ss.mss] [varchar](8000) NULL,
	[session_id] [smallint] NOT NULL,
	[sql_text] [xml] NULL,
	[sql_command] [xml] NULL,
	[login_name] [nvarchar](128) NOT NULL,
	[wait_info] [nvarchar](4000) NULL,
	[tran_log_writes] [nvarchar](4000) NULL,
	[CPU] [varchar](30) NULL,
	[tempdb_allocations] [varchar](30) NULL,
	[tempdb_current] [varchar](30) NULL,
	[blocking_session_id] [smallint] NULL,
	[reads] [varchar](30) NULL,
	[writes] [varchar](30) NULL,
	[physical_reads] [varchar](30) NULL,
	[query_plan] [xml] NULL,
	[used_memory] [varchar](30) NULL,
	[status] [varchar](30) NOT NULL,
	[tran_start_time] [datetime] NULL,
	[implicit_tran] [nvarchar](3) NULL,
	[open_tran_count] [varchar](30) NULL,
	[percent_complete] [varchar](30) NULL,
	[host_name] [nvarchar](128) NULL,
	[database_name] [nvarchar](128) NULL,
	[program_name] [nvarchar](128) NULL,
	[start_time] [datetime] NOT NULL,
	[login_time] [datetime] NULL,
	[request_id] [int] NULL,
	[collection_time] [datetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
 
DECLARE @KillSession VARCHAR(50)
	,@sqlKill Varchar(50)
SET @KillSession = N''
 
DECLARE @retention int = 7, @destination_table varchar(500) = 'TempTableDBA', @destination_database sysname = 'TempDB', 
      @schema varchar(max), @SQL nvarchar(4000), @parameters nvarchar(500), @exists bit;
 
SET @destination_table = @destination_database + '.dbo.' + @destination_table;
 
--create the logging table
IF OBJECT_ID(@destination_table) IS NULL
BEGIN;
  EXEC sp_WhoIsActive  @get_transaction_info = 1,  @get_outer_command = 1,  @get_plans = 1, @show_sleeping_spids = 2,  @return_schema = 1,  @schema = @schema OUTPUT;
  SET @schema = REPLACE(@schema, '<table_name>', @destination_table);  
  EXEC(@schema);
END
ELSE
BEGIN
	Exec('TRUNCATE TABLE ' + @destination_table)
	--Print 'silmedim'
END
 
--create index on collection_time
SET @SQL = 'USE ' + QUOTENAME(@destination_database) + '; IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(@destination_table) AND name = N''cx_collection_time'') SET @exists = 0';
SET @parameters = N'@destination_table varchar(500), @exists bit OUTPUT';
EXEC sp_executesql @SQL, @parameters, @destination_table = @destination_table, @exists = @exists OUTPUT;
 
IF @exists = 0
BEGIN;
  SET @SQL = 'CREATE CLUSTERED INDEX cx_collection_time ON ' + @destination_table + '(collection_time ASC)';
  EXEC (@SQL);
END;
 
--collect activity into logging table
EXEC dbo.sp_WhoIsActive @get_transaction_info = 1,  @get_outer_command = 1,  @get_plans = 1, @show_sleeping_spids = 2,  @destination_table = @destination_table;  
 
 /*
--purge older data
SET @SQL = 'DELETE FROM ' + @destination_table + ' WHERE collection_time &lt; DATEADD(day, -' + CAST(@retention AS varchar(10)) + ', GETDATE());';
EXEC (@SQL);
*/
 
 
 
DECLARE Kill_Cursor CURSOR FOR
 
 
SELECT 'Kill '+ convert(varchar,[session_id] ) KillSession
  FROM [tempdb].[dbo].[TempTableDBA] with (nolock)
  WHERE status  = 'Sleeping'
  AND Login_name not IN ('YourUsers')
  AND DATEDIFF (MINUTE,start_time,collection_time) > 2
  AND open_tran_count=0     --rollback olmması icim acik transaction'da yapmiyoruz
 
OPEN Kill_Cursor
FETCH NEXT FROM Kill_Cursor INTO @KillSession
 
WHILE @@FETCH_STATUS =0
BEGIN
	set @sqlKill = @KillSession
 
	EXec(@sqlKill)
--	print @sqlKill
 
	FETCH NEXT FROM Kill_Cursor INTO @KillSession
END
 
CLOSE Kill_Cursor
 
DEALLOCATE Kill_Cursor
Benzer Yazılar

SQL Server 2025 ile Gelen Native Vector Search

Python 2 ay önce

İçindekilerSQL Server 2025 ile Gelen Native Vector SearchDiskANN Nedir? Nasıl Çalışır?Temel Özellikler:SQL Server 2025’te DiskANN ile Vektör AramaPerformans KazanımlarıAvantajlar ve KısıtlarArtıları:Eksileri:Gerçek Hayatta Kullanım SenaryolarıE-Ticaret:Sağlık:Finans:Alternatif Yöntemlerle KarşılaştırmaKullanıcı Tanımlı Fonksiyonlarla Uygulamalı Örnekler1. Cosine Similarity Fonksiyonu2. Öklid Mesafesi Hesaplama3. Benzerlik Sorgusu3. DiskANN Kullanımıyla AramaFarklı Veri Setleriyle Test ÖrnekleriSonuç SQL Server 2025 ile Gelen Native Vector Search Microsoft, SQL Server 2025 sürümünde önemli bir yeniliğe imza atarak yerleşik Native Vector Search özelliğini duyurdu. Bu gelişme, büyük veri kümeleri üzerinde hızlı, esnek ve ölçeklenebilir arama ihtiyaçlarını karşılamak açısından çığır açıcı nitelikte. Özellikle yapay zeka, makine öğrenmesi ve metin analitiği gibi alanlarda kritik bir rol oynayan bu yeni özellik, arka planda DiskANN algoritması ile güçlendirilmiş durumda. DiskANN Nedir? Nasıl Çalışır? DiskANN (Disk-based Approximate Nearest Neighbor), büyük boyutlu veri kümelerinde benzerlik aramalarını son derece verimli hâle getiren grafik tabanlı bir algoritmadır. Geleneksel yöntemlerde tüm veriyi belleğe almak gerekirken, DiskANN verileri diskte tutarak bellek kullanımını minimumda tutar ve buna rağmen yüksek performans sunar. Temel […]

DELAYED DURABILITY

SQL Server 4 ay önce

Bu makalede SQL Server2014 ile gelen bir özellik olan ilişkisel veri tabanlarının ortak bir özelliği olan Delayed Durability den bahsedeceğim. Bu özellik hakkında detaylı bir şekilde konuşmaya başlamadan önce tekrar etmemiz gereken bir özellik var o da bir verinin yazılmasının aşamaları. Veri öncelikle log file olan .ldf dosyasına yazılmadan (log flush), data file olan .mdf veya .ndf dosyalarına yazılma işlemi (page flushing) gerçekleşmez. Veri tabanına verinin yazılması sürecinde işlem commit edilerek bunun bilgisi kullanıcıya dönüş sağlanır ancak aksi bir durumda crash veya buna benzer durumlarda sql server veriyi log dosyasından recover edebileceği için verinin kaybolmamasının garantisini sağlamış olur. Bu aşamada makalemizin konusu olan Delayed Durability bize esneklik sağlayabilir. Kısaca açıklayacak olursak bu özellik sayesinde veri tabanına verinin yazılması sürecinde işlem commit edilmeden kullanıcıya sürecin tamamlandığı bilgisi veriliyor bu güzellik bir özellik gibi görünse de aslında bir dezavantaj aslında işlem tamamlanmış olmuyor bu özelliği kullanırken crash veya buna benzer durumlarda sql […]

SQL Server Plan Cache Temizlemenin 9 Farklı Yolu

SQL Server 5 ay önce

SQL Server Cache Temizleme Yöntemleri Bu yazımızda SQL Server’da cache problemleri ile karşılaştığımızda hangi yöntemle nasıl çözümler üretebileceğimizin üzerinde duracağız. Bu işlem sistemde öngörülemeyen sorunlara yol açabileceğinden, komutları çalıştırmadan önce uzmanlardan yardım almanızda fayda olacaktır.   Cache üzerinde sorun yaşamamıza neden olacak bazı durumlar vardır; Query’lerde çok fazla Recompile kullanımı. Özellikle Store Procedure içinde yer alan Option Recompile kullanımı. Dynamic T-SQL code’ların çok fazla kullanımı. SQL Server Instance’ın ihtiyacı olan memory’den daha az memory verilmesi. Uzun süre çalışan ve size olarak çok fazla data çeken query’ler Index’siz kullanılan query’ler. Birden fazla SQL Server Instance kullanımında var olan Memory’den daha fazla memory kullanımına izin verilmesi.   Yukardaki durumlar memory dar boğazı yaşamamıza neden olacaktır ve bunun sonucunda cache temizleme ihtiyacı duyacağımız durumlar ortaya çıkması olasıdır. Cache temizlemenin birçok yöntemi vardır. Bu yöntemleri birlikte ele alacağız.   1-) DBCC FREEPROCCACHE Bu komut yardımı ile bir Resource pool’u ya da specific bir planı […]

2 Yorum

Yorum Yaz

Rastgele