Ho scritto questo script pensando di raccogliere non solo le informazioni sui diversi datafiles della tempDB ma anche dando qualche raccomandazione utile su come migliorare la sua performance. In questo caso la quantità di Datafiles, secondo le specificazioni di Microsoft in questo articolo.
/* **************************************************************************************************************************************** Script Name: tempdb_raccomandazione.sql Client's Name: Service Desk Create Date: 30/10/2018 - 18:00 Created By: Bruno Bragatto - Senior DBA Objective: Raccomandazione per la tempDB ---------------------------------------------------------------------------------------------------------------------------------------- Modification Log Date: 09/11/2020 Modified By: Bruno Bragatto Modification Details: Correzioni Recomendation e piccole correzioni ortografiche Initial Created by: Bruno Bragatto **************************************************************************************************************************************** References: https://support.microsoft.com/it-it/help/2154845/recommendations-to-reduce-allocation-contention-in-sql-server-tempdb-d */ DECLARE @total_tempddb_df NVARCHAR(8), @total_processor NVARCHAR(8) SET @total_tempddb_df = (select count(file_id) from sys.master_files where database_id = DB_ID('tempdb') and type_desc= 'rows') SET @total_processor = (select cpu_count AS logicalCPUs FROM sys.dm_os_sys_info) select @@SERVERNAME + ' - ' +DB_NAME(mf.database_id) database_name , mf.name logical_name, mf.file_id , CONVERT (DECIMAL (20,2) , (CONVERT(DECIMAL, size)/128)) as [file_size_MB] , CASE mf.is_percent_growth WHEN 1 THEN 'Yes' ELSE 'No' END AS [is_percent_growth] , CASE mf.is_percent_growth WHEN 1 THEN CONVERT(VARCHAR, mf.growth) + '%' WHEN 0 THEN CONVERT(VARCHAR, mf.growth/128) + ' MB' END AS [growth_in_increment_of] , CASE mf.is_percent_growth WHEN 1 THEN CONVERT(DECIMAL(20,2) ,(((CONVERT(DECIMAL, size)*growth)/100)*8)/1024) WHEN 0 THEN CONVERT(DECIMAL(20,2) , (CONVERT(DECIMAL, growth)/128)) END AS [next_auto_growth_size_MB] , physical_name , CONVERT(NVARCHAR(5),ROW_NUMBER() OVER (ORDER BY file_id)) +'/'+ @total_tempddb_df as total ,@total_processor as LogicalProcessor , CASE WHEN @total_processor <= '8' THEN (CASE WHEN @total_tempddb_df < @total_processor THEN 'You should add at least more '+ CONVERT(nvarchar(max),(8 - @total_tempddb_df)) + ' TempDB Datafiles' WHEN @total_tempddb_df = @total_processor THEN 'OK' WHEN @total_tempddb_df > @total_processor THEN 'Too many datafiles can cause several performance problems' ELSE 'Check it Manually' END) WHEN @total_processor > '8' THEN (CASE WHEN @total_tempddb_df < '8' THEN 'You may want to add at least more ' + CONVERT (NVARCHAR(MAX), 8 - @total_tempddb_df) + ' TempDB Datafiles' WHEN @total_tempddb_df = '8' THEN 'OK' WHEN @total_tempddb_df > '8' THEN 'You should add more datafiles to the tempdb ONLY when you have confirmed some performance problems related to it. Normally it s not necessary' ELSE 'Check it Manually' END) ELSE 'Verify' END as recomendation from sys.master_files mf where database_id = DB_ID('tempdb') and type_desc= 'rows' ORDER BY file_id