Du bør altid overveje påstand, før du tilføjer TempDb-fil. Tilføjelse af 7 ekstra TempDb-filer hjælper ikke rigtigt.
Nej, det burde det ikke. Men er du sikker på, at du ikke har med store mængder data at gøre, eller at du ikke har andre processer kørende på SQL? Markører, Temp-tabeller og endda tabelvariabler bruger TempDb i udstrakt grad. Tjek hvilket objekt der bruger mere TempDb plads:
SELECT
SUM (user_object_reserved_page_count)*8 as usr_obj_kb,
SUM (internal_object_reserved_page_count)*8 as internal_obj_kb,
SUM (version_store_reserved_page_count)*8 as version_store_kb,
SUM (unallocated_extent_page_count)*8 as freespace_kb,
SUM (mixed_extent_page_count)*8 as mixedextent_kb
FROM sys.dm_db_file_space_usage
Så hvis dine bruger- og interne objekter er flere, betyder det klart, at du har lav TempDb-plads på grund af markører og intern brug af SQL Server (eks.:mellemliggende tabeller, Hash joins, Hash-aggregering osv.)
Du kan bruge nedenstående kode til at få optællingen af alle tabeller i alle databaser
DECLARE @Stats TABLE (DBNAME VARCHAR(40), NAME varchar(200), Rows INT)
INSERT INTO @Stats
EXECUTE sp_MSForEachDB
'USE ?; SELECT DB_NAME()AS DBName,
sysobjects.Name
, sysindexes.Rows
FROM
sysobjects
INNER JOIN sysindexes
ON sysobjects.id = sysindexes.id
WHERE
type = ''U''
AND sysindexes.IndId < 2'
SELECT * FROM @Stats
Jeg har skrevet en artikel om TempDb anbefaling ; Jeg vil foreslå dig at læse det for at forstå objekter, der kan påvirke TempDb, og hvordan man løser almindelige problemer med det. Ideelt set bør din samlede TempDb-størrelse beregnes baseret på observation, som i dit tilfælde er> 24 GB.
** Rediger 1**
Hvis du er usikker på statistikopdatering, så brug nedenstående forespørgsel for at få optælling af alle tabellerBemærk:Erstat databaser, som du ikke ønsker statistik for
DECLARE @ServerStats TABLE (DatabaseName varchar(200), TableName varchar(200), RowsCount INT)
INSERT INTO @ServerStats
exec sp_msforeachdb @command1='
use #;
if ''#'' NOT IN (''master'', ''model'', ''msdb'', ''tempdb'',''ReportServer'')
begin
print ''#''
exec sp_MSforeachtable @command1=''
SELECT ''''#'''' AS DATABASENAME, ''''?'''' AS TABLENAME, COUNT(*) FROM ? ;
''
end
', @replacechar = '#'
SELECT * FROM @ServerStats
på samme måde kan du tage distinkt i alle tabeller for alle databaser med nedenstående forespørgsel
DECLARE @ServerStatsDistinct TABLE (DatabaseName varchar(200), TableName varchar(200), RowsCount INT)
INSERT INTO @ServerStatsDistinct
exec sp_msforeachdb @command1='
use #;
if ''#'' NOT IN (''master'', ''model'', ''msdb'', ''tempdb'',''ReportServer'')
begin
print ''#''
exec sp_MSforeachtable @command1=''
SELECT ''''#'''' AS DATABASENAME, ''''?'''' AS TABLENAME, COUNT(*) FROM (
SELECT DISTINCT *
FROM ?
) a ;
''
end
', @replacechar = '#'
SELECT * FROM @ServerStatsDistinct