Aryasoft Bilgi Teknolojileri > Posts > SQL Server > Level 50 > SQL Server TempDB İçin Best Practices

SQL Server TempDB İçin Best Practices

Tempdb, Microsoft SQL Server’daki sistem veritabanlarından biridir. Geçici kullanıcı nesnelerini, satır sürüm oluşturma bilgilerini ve SQL Server motoru tarafından oluşturulan dahili nesneleri tutan genel bir kaynaktır. SQL Server, örnek her başlatıldığında TempDB’nin temiz bir kopyasını oluşturur. Bunu neden önemsemelisiniz? Tempdb, tüm SQL Server’ın performansını etkiler. Birçok arka plan işlemi TempDB kullanır. Optimum performans göstermezse, tüm veritabanları…

April 21, 2021 by Aryasoft IT

Tempdb, Microsoft SQL Server’daki sistem veritabanlarından biridir.

Geçici kullanıcı nesnelerini, satır sürüm oluşturma bilgilerini ve SQL Server motoru tarafından oluşturulan dahili nesneleri tutan genel bir kaynaktır.

SQL Server, örnek her başlatıldığında TempDB’nin temiz bir kopyasını oluşturur.

Bunu neden önemsemelisiniz?

Tempdb, tüm SQL Server’ın performansını etkiler.

Birçok arka plan işlemi TempDB kullanır.

Optimum performans göstermezse, tüm veritabanları etkilenir ve tüm sunucuyu yavaşlatır.

En iyi performans için TempDB nasıl ayarlanır?

Veri dosyalarının sayısını kontrol edin

Varsayılan olarak SQL Server yapılandırması, TempDB için tek bir veri dosyasına sahiptir.

Microsoft disk bant genişliğini en üst düzeye çıkarmak ve çekişmeyi azaltmak için veri dosyalarının sayısını artırmanızı önerir.

Sunucunuz için değişiklik komut dosyasını doğrulamak ve oluşturmak için aşağıdaki komut dosyasını kullanabilirsiniz.

  1. Değişikliği uygulamak için @check değişkenini 1 olarak değiştirin. Varsayılan değer olan 0 yalnızca bilgileri gösterir.

 

    1. DECLARE @check BIT
    2. SET @check = 0 –For information set 0, for change 1
    3. DECLARE @BASEPATH NVARCHAR(300)
    4. DECLARE @SQL_SCRIPT NVARCHAR(1000)
    5. DECLARE @CORES INT
    6. DECLARE @FILECOUNT INT
    7. DECLARE @SIZE INT
    8. DECLARE @GROWTH INT
    9. DECLARE @ISPERCENT INT
    10. — TempDB mdf count equal logical cpu count
    11. SELECT @CORES = cpu_count FROM sys.dm_os_sys_info
    12. PRINT ‘Logical CPU count ‘ + CAST(@CORES AS NVARCHAR(100))
    13. IF @CORES BETWEEN 9 AND 31 SET @CORES = @CORES / 2
    14. IF @CORES >= 32 SET @CORES = @CORES / 4
    15. –Check and set tempdb files count are multiples of 4
    16. IF @CORES > 8 SET @CORES = @CORES – (@CORES % 4)
    17. SET @BASEPATH = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N’tempdb.mdf’, LOWER(physical_name)) – 1) DataFileLocation
    18. FROM master.sys.master_files
    19. WHERE database_id = 2 AND FILE_ID = 1)
    20. SET @FILECOUNT = (SELECT COUNT(*)
    21. FROM master.sys.master_files
    22. WHERE database_id = 2 AND TYPE_DESC = N’ROWS’)
    23. SELECT @SIZE = size FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
    24. SET @SIZE = @SIZE / 128
    25. SELECT @GROWTH = growth FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
    26. SELECT @ISPERCENT = is_percent_growth FROM master.sys.master_files WHERE database_id = 2 AND FILE_ID = 1
    27. IF @ISPERCENT = 0 SET @GROWTH = @GROWTH * 8
    28. –Current situation
    29. PRINT ‘Needed ‘ + CAST(@CORES AS NVARCHAR(100)) + ‘ TempDB data files, now there is ‘ + CAST(@FILECOUNT AS NVARCHAR(100)) + CHAR(10) + CHAR(13)
    30. IF @check = 1 AND @CORES > @FILECOUNT PRINT ‘Commands listed below will be executed’ + CHAR(10) + CHAR(13)
    31. IF @check = 0 AND @CORES > @FILECOUNT PRINT ‘Commands listed below will NOT be executed’ + CHAR(10) + CHAR(13)
    32. WHILE @CORES > @FILECOUNT
    33. BEGIN
    34.                 SET @SQL_SCRIPT = N’ALTER DATABASE tempdb
    35.                 ADD FILE (
    36.                                FILENAME = ”’ + @BASEPATH + ‘tempdb’ + RTRIM(CAST(@CORES AS NCHAR)) + ‘.ndf”,
    37.                                NAME = tempdev’ + RTRIM(CAST(@CORES AS NCHAR)) + ‘,
    38.                                SIZE = ‘ + RTRIM(CAST(@SIZE AS NCHAR)) + ‘MB,
    39.                                FILEGROWTH = ‘ + RTRIM(CAST(@GROWTH AS NCHAR))
    40.                 IF @ISPERCENT = 1 SET @SQL_SCRIPT = @SQL_SCRIPT + ‘%’ ELSE SET @SQL_SCRIPT = @SQL_SCRIPT + ‘KB’
    41.                 SET @SQL_SCRIPT = @SQL_SCRIPT + ‘)’
    42.                 IF @check = 1 EXEC(@SQL_SCRIPT)
    43.                 PRINT @SQL_SCRIPT
    44.                 SET @CORES = @CORES – 1
    45. END

Not: SQL Server 2016, CPU çekirdeği sayısını algılayan ve otomatik olarak uygun miktarda TempDB veri dosyası oluşturan yerleşik bir özelliğe sahiptir.

Boyut ve otomatik büyüme ayarlarını gözden geçirin

Doğru bir boyut belirleyin (10 GB ile başlayabilirsiniz) ve otomatik büyütme ayarlarını sabit bir değere ayarlayın. Yüzde kullanmayın.

Özel bir Sabit disk sürücüsü kullanın

Çoğu yüksek performanslı SQL sunucusu, tempdb’yi ayrılmış bir disk sürücüsüne yerleştirir.

T1117 ve T1118 izleme işaretlerini kullanın

Tempdb’nin daha hızlı çalışmasına yardımcı olacaklar.

Not: Microsoft, bu davranışı SQL Server 2016 ve daha yeni sürümlerde standart hale getirdi.

Size ve Veritabanlarınıza Yardımcı Olmak İçin Bekliyoruz!