Винаги трябва да обмисляте спорове, преди да добавите TempDb файл. Добавянето на 7 допълнителни файла TempDb наистина няма да помогне.
Не, не трябва. Но сигурни ли сте, че не работите с голямо количество данни или нямате друг процес, работещ на SQL? Курсорите, временните таблици и дори променливите на таблицата използват широко TempDb. Проверете кой обект заема повече място в TempDb:
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
Така че, ако вашите потребителски и вътрешни обекти са повече, това ясно означава, че имате малко TempDb пространство поради курсори и вътрешно използване на SQL Server (Напр.:междинни таблици, хеш-съединения, хеш-агрегиране и т.н.)
Можете да използвате кода по-долу, за да получите броя на всички таблици във всички бази данни
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
Написах статия за TempDb препоръка ; Бих ви предложил да прочетете това, за да разберете обектите, които могат да повлияят на TempDb и как да разрешите често срещани проблеми с него. В идеалния случай вашият общ размер на TempDb трябва да бъде изчислен въз основа на наблюдение, което във вашия случай е> 24 GB.
** Редактиране 1**
Ако не сте сигурни относно актуализацията на статистиката, използвайте заявката по-долу, за да получите броя на всички таблици. Забележка:Заменете базите данни, за които не искате статистика
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
по подобен начин можете да вземете различен във всички таблици за всички бази данни с по-долу заявка
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