Vous devez toujours tenir compte des conflits avant d'ajouter le fichier TempDb. L'ajout de 7 fichiers TempDb supplémentaires n'aidera pas vraiment.
Non, ça ne devrait pas. Mais êtes-vous sûr que vous ne traitez pas une grande quantité de données ou que vous n'avez pas d'autre processus en cours d'exécution sur SQL ? Les curseurs, les tables temporaires et même les variables de table utilisent largement TempDb. Vérifiez quel objet consomme le plus d'espace 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
Donc, si votre utilisateur et vos objets internes sont plus nombreux, cela signifie clairement que vous avez peu d'espace TempDb en raison des curseurs et de l'utilisation interne de SQL Server (Ex :tables intermédiaires, jointures de hachage, agrégation de hachage, etc.)
Vous pouvez utiliser le code ci-dessous pour obtenir le nombre de toutes les tables dans toutes les bases de données
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
J'ai écrit un article sur TempDb recommandation ; Je vous suggère de lire cela pour comprendre les objets qui peuvent affecter TempDb et comment résoudre les problèmes courants de celui-ci. Idéalement, votre taille totale de TempDb devrait être calculée sur la base d'une observation qui, dans votre cas,> 24 Go.
**Modifier 1**
Si vous n'êtes pas sûr de la mise à jour des statistiques, utilisez la requête ci-dessous pour obtenir le nombre de toutes les tablesRemarque :Remplacez les bases de données pour lesquelles vous ne souhaitez pas de statistiques
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
de même, vous pouvez prendre distinct dans toutes les tables pour toutes les bases de données avec la requête ci-dessous
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