Você deve sempre considerar a contenção antes de adicionar o arquivo TempDb. Adicionar 7 arquivos TempDb adicionais não ajudará muito.
Não, não deveria. Mas você tem certeza que não está lidando com uma grande quantidade de dados ou não tem outro processo rodando no SQL? Cursores, tabelas temporárias e até variáveis de tabela usam TempDb extensivamente. Verifique qual objeto está consumindo mais espaço 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
Portanto, se seu usuário e objetos internos forem mais, isso significa claramente que você tem pouco espaço TempDb por causa de cursores e uso interno do SQL Server (Ex:tabelas intermediárias, junções de hash, agregação de hash etc.)
Você pode usar o código abaixo para obter a contagem de todas as tabelas em todos os bancos de dados
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
Escrevi um artigo sobre TempDb recomendação ; Eu sugiro que você leia isso para entender os objetos que podem afetar o TempDb e como resolver problemas comuns dele. Idealmente, o tamanho total do TempDb deve ser calculado com base na observação, que no seu caso> 24 GB.
**Editar 1**
Se você não tiver certeza sobre a atualização das estatísticas, use a consulta abaixo para obter a contagem de todas as tabelas Nota:Substitua os bancos de dados para os quais você não deseja estatísticas
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
da mesma forma, você pode ter distintos em todas as tabelas para todos os bancos de dados com a consulta abaixo
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