Forum

SQL mdf dosyasısını...
 
Bildirimler
Hepsini Temizle

SQL mdf dosyasısının boyutu 2 ayda 20 kat arttı

6 Yazılar
3 Üyeler
0 Reactions
1,403 Görüntüleme
(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Merhaba,

 

Müşterilerimden 6 saatte bir windows servislerle çektiğim verileri sql e aktarıyorum. Normalde web ve sql serverım ayrıydı 6 ay önce ikisinide tek bir sanal sunucuya taşıdım. Son zamanlarda müşterilerimden veri çekememeye başladım ilk başlarda veri kesilmesi sorunu yaşıyorken şuanda timeout ile uğraşıyorum. Sqlserver rami %99 kullanıyor ve mdf dosyasını şişiriyor. Servisten şu hatayı alıyorum; 

Handshake, Market Id:11, 2xhfjRHdVGmObu3J5gmSgw==, Exception:Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached., Process:15000

Servisin timeout süresini 5000 milisaniyeden 15000 e çıkardım ama bir etkisi olmadı.

Sql serverda şişen yeri nasıl tespit edebilirim? Sql server bu istatiskleri hesaplayan bir tool barındırıyormu?

 

(Windows server 2012 R2, Sql Server 2016)

 
Gönderildi : 20/02/2019 17:12

(@cankaya)
Gönderiler: 119
Üye
 

Merhaba,

 

SQL Serverin ram'i kullanması iyi birşeydir. Datalarınızda eğer siz farklı bir ayar yapmadıysanız sizin PRIMARY filegroubunuza yazılır.O da sizin mdf dosyanız oluyor.

Sorun timeouttan kaynaklanmıyor. Siz SQL Server da açtığınız connectionları bir şekilde kapatmayıp yenisini açıyor olabilirsiniz. 

select * from sys.dm_exec_requests ve select * from sys.sys_dm_exec_sessions dmwlerini çalıştırıp kaç adet process var kaç adet session açık görebilirsiniz. 

select * from sys.dm_os_wait_stats order by wait_time desc bu sorgudan wait statlara bakabilirsiniz.

 
Gönderildi : 20/02/2019 20:10

(@marufarslan)
Gönderiler: 168
Reputable Member
 

Farklı tablolarda ki kayıt sayısı için aşağıdaki sorgu kullanıla bilir. Zaman zaman bu sorgu sonucu arşivlenirse analiz yapılabilir.

Sorulanacak database seçilmelidir.

/* Tablolar, isimlerine göre sıralanır */
SELECT ROW_NUMBER() OVER (ORDER BY TABLE_NAME) AS TABLE_NO, TABLE_NAME, TABLE_SCHEMA INTO #Tablo FROM INFORMATION_SCHEMA.TABLES

GO

/* Tablo verilerini tutacak geçici tablo yaratılır */
CREATE TABLE #TabloBilgileri ([Tablo Adi] varchar(128), [Satir Sayisi] varchar(11), [Toplam Alan] varchar(18), [Veri Alani] varchar(18), [Index Alani] varchar(18), [Kullanilmayan Alan] varchar(18))

GO

/* Her tablo için “exec sp_spaceused” komutu çalıştırılır */
DECLARE @sayac int
DECLARE @tablosayisi int
DECLARE @sql varchar(MAX)
SET @tablosayisi = (SELECT MAX(TABLE_NO) FROM #Tablo)
SET @sayac = 0
WHILE @sayac < @tablosayisi
BEGIN
SET @sayac = @sayac + 1
SET @sql = 'insert into #TabloBilgileri exec sp_spaceused "' + (SELECT TABLE_SCHEMA FROM #Tablo WHERE @sayac = TABLE_NO) + '.[' + (SELECT TABLE_NAME FROM #Tablo WHERE @sayac = TABLE_NO) + ']"'
EXEC(@sql)
END

/* KB cinsinden gösterilen tablo boyutları MB ve GB boyutlarında gösterilir */
SELECT [Tablo Adi], [Satir Sayisi], (CASE
WHEN CONVERT(varchar(50),CONVERT(bigint,LEFT([Toplam Alan],LEN([Toplam Alan])-3))/1024) < 1024  THEN CONVERT(varchar(50),CONVERT(bigint,LEFT([Toplam Alan],LEN([Toplam Alan])-3))/1024) + ' MB'
ELSE CONVERT(varchar(50),CONVERT(decimal(10,2),CONVERT(decimal,LEFT([Toplam Alan],LEN([Toplam Alan])-3))/1024/1024)) + ' GB' END) AS [Toplam Alan]
,(CASE
WHEN CONVERT(varchar(50),CONVERT(bigint,LEFT([Veri Alani],LEN([Veri Alani])-3))/1024) < 1024 THEN CONVERT(varchar(50),CONVERT(bigint,LEFT([Veri Alani],LEN([Veri Alani])-3))/1024) + ' MB'
ELSE CONVERT(varchar(50),CONVERT(decimal(10,2),CONVERT(decimal,LEFT([Veri Alani],LEN([Veri Alani])-3))/1024/1024)) + ' GB' END) AS [Veri Alani]
,(CASE
WHEN CONVERT(varchar(50),CONVERT(bigint,LEFT([Index Alani],LEN([Index Alani])-3))/1024) < 1024  THEN CONVERT(varchar(50),CONVERT(bigint,LEFT([Index Alani],LEN([Index Alani])-3))/1024) + ' MB'
ELSE CONVERT(varchar(50),CONVERT(decimal(10,2),CONVERT(decimal,LEFT([Index Alani],LEN([Index Alani])-3))/1024/1024)) + ' GB' END) AS [Index Alani]
FROM #TabloBilgileri tb

/* Geçici tablolar silinir */

DROP TABLE #Tablo
DROP TABLE #TabloBilgileri

/* alıntı yazilimmutfagi.com

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 20/02/2019 20:14

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

Merhaba,

 

SQL Serverin ram'i kullanması iyi birşeydir. Datalarınızda eğer siz farklı bir ayar yapmadıysanız sizin PRIMARY filegroubunuza yazılır.O da sizin mdf dosyanız oluyor.

Sorun timeouttan kaynaklanmıyor. Siz SQL Server da açtığınız connectionları bir şekilde kapatmayıp yenisini açıyor olabilirsiniz. 

select * from sys.dm_exec_requests ve select * from sys.dm_exec_sessions dmwlerini çalıştırıp kaç adet process var kaç adet session açık görebilirsiniz. 

select * from sys.dm_os_wait_stats order by wait_time desc bu sorgudan wait statlara bakabilirsiniz.

Can Bey cevabınız için teşekkürler.

Zannettiğiniz gibi açık olup kapanmayan 3 tane session var bunları sql server bloklamış bu sessionlar servise gelen verileri db e yazıp template olarak kullanılan tablodan siliniyor. Bu sessionları nasıl kapatabilirim.

 

 
Gönderildi : 22/02/2019 03:32

(@Anonim)
Gönderiler: 0
Konu başlatıcı
 

İlginiz için teşekkürler Murat Bey.

Sorgu şişen tabloyu bulmamı sağladı tablonun içeriğini sıfırladım fakat boyutta bir küçülme olmadı ama ben olduğuna inanıyorum çünkü 20 gb'lık veri sildim boyutu gösteren kısımda değişiklik olduğu gözükmüyor 🙂

 
Gönderildi : 22/02/2019 03:44

(@marufarslan)
Gönderiler: 168
Reputable Member
 

Database üzerinde sağ tuş/Özelikler kısmında Options/Recovery model " Simple " seçin.

Daha sonra Database üzerinde sağ tuş Tasks kımında Shrink çalıştırın.

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 22/02/2019 19:18

Paylaş: