La tempdb d'un serveur (SQL Server 2008) augmente à 500 Go + plusieurs fois par mois. Est-il possible de savoir quelles instructions SQL ont provoqué ce problème? Le problème n'est généralement pas causé par create table #temp...; insert into #temp...
ou select ... into #temp...
mais jointures complexes.
Taille initiale de certains fichiers tempdb est également automatiquement réglé sur des valeurs beaucoup plus grandes à chaque fois. Comment l'empêcher?
Parfois, les plans mis en cache empêchent de redimensionner/réduire les fichiers. Comment trouver lequel détient le tempdb?
Il existe trois DMV que vous pouvez utiliser pour suivre l'utilisation de tempdb:
Les deux premiers vous permettront de suivre les allocations au niveau de la requête et de la session. Le troisième suit les allocations entre le magasin de versions, l'utilisateur et les objets internes.
L'exemple de requête suivant vous donnera des allocations par session:
SELECT
sys.dm_exec_sessions.session_id AS [SESSION ID]
,DB_NAME(database_id) AS [DATABASE Name]
,Host_NAME AS [System Name]
,program_name AS [Program Name]
,login_name AS [USER Name]
,status
,cpu_time AS [CPU TIME (in milisec)]
,total_scheduled_time AS [Total Scheduled TIME (in milisec)]
,total_elapsed_time AS [Elapsed TIME (in milisec)]
,(memory_usage * 8) AS [Memory USAGE (in KB)]
,(user_objects_alloc_page_count * 8) AS [SPACE Allocated FOR USER Objects (in KB)]
,(user_objects_dealloc_page_count * 8) AS [SPACE Deallocated FOR USER Objects (in KB)]
,(internal_objects_alloc_page_count * 8) AS [SPACE Allocated FOR Internal Objects (in KB)]
,(internal_objects_dealloc_page_count * 8) AS [SPACE Deallocated FOR Internal Objects (in KB)]
,CASE is_user_process
WHEN 1 THEN 'user session'
WHEN 0 THEN 'system session'
END AS [SESSION Type], row_count AS [ROW COUNT]
FROM
sys.dm_db_session_space_usage
INNER join
sys.dm_exec_sessions
ON sys.dm_db_session_space_usage.session_id = sys.dm_exec_sessions.session_id
Si vous souhaitez suivre l'utilisation sur une période de temps, envisagez de collecter des données avec sp_whoisactive , comme le montre Kendra Little .
Il peut y avoir différentes sources de problème:
SORT_IN_TEMPDB = ON