Die Tempdb eines Servers (SQL Server 2008) erhöht sich mehrmals im Monat auf über 500 GB. Ist es möglich herauszufinden, welche SQL-Anweisungen dieses Problem verursacht haben? Das Problem wird normalerweise nicht durch create table #temp...; insert into #temp...
Oder select ... into #temp...
Verursacht, sondern durch komplexe Verknüpfungen.
Die Anfangsgröße einiger Tempdb-Dateien wird jedes Mal automatisch auf viel größere Werte gesetzt. Wie kann man das verhindern?
Manchmal verhindern die zwischengespeicherten Pläne das Ändern/Verkleinern der Dateien. Wie finde ich heraus, welcher die Tempdb hält?
Es gibt drei DMVs, mit denen Sie die Tempdb-Nutzung verfolgen können:
Mit den ersten beiden können Sie Zuordnungen auf Abfrage- und Sitzungsebene verfolgen. Der dritte Teil verfolgt die Zuordnungen zwischen Versionsspeicher, Benutzer und internen Objekten.
Die folgende Beispielabfrage gibt Ihnen Zuordnungen pro Sitzung:
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
Wenn Sie die Nutzung über einen bestimmten Zeitraum verfolgen möchten, sollten Sie Daten mit sp_whoisactive erfassen, wie von Kendra Little gezeigt.
Es kann verschiedene Ursachen für ein Problem geben:
SORT_IN_TEMPDB = ON
neu erstellen