Preskočiť na obsah
Skript

Kto spotrebúva tempdb

Top session podľa obsadenia tempdb – user objekty (#temp, table variables) aj internal objekty (sort, hash, spill), vrátane práve bežiacich taskov.

kto-spotrebuva-tempdb.sql 29 riadkov · T-SQL
Parametre skriptu doplň a kopíruj hotový skript
/* DeadlockCafe | Kto spotrebúva tempdb
   Účel:  Top session podľa obsadenia tempdb – user objekty (#temp, table variables) aj internal objekty (sort, hash, spill), vrátane práve bežiacich taskov.
   Režim: READ ONLY | SQL Server 2016 – 2022, on-premises
*/
SET NOCOUNT ON;

-- session_space_usage obsahuje len dokončené tasky, bežiace sú v task_space_usage
;WITH running AS
(
    SELECT session_id,
           SUM(user_objects_alloc_page_count - user_objects_dealloc_page_count)         AS user_pages,
           SUM(internal_objects_alloc_page_count - internal_objects_dealloc_page_count) AS internal_pages
    FROM sys.dm_db_task_space_usage
    GROUP BY session_id
)
SELECT TOP (50)
       u.session_id, s.login_name, s.host_name, s.program_name, s.status,
       CAST((u.user_objects_alloc_page_count - u.user_objects_dealloc_page_count
             + ISNULL(r.user_pages, 0)) * 8.0 / 1024 AS decimal(18,1))     AS net_user_mb,
       CAST((u.internal_objects_alloc_page_count - u.internal_objects_dealloc_page_count
             + ISNULL(r.internal_pages, 0)) * 8.0 / 1024 AS decimal(18,1)) AS net_internal_mb,
       s.open_transaction_count
FROM sys.dm_db_session_space_usage AS u
JOIN sys.dm_exec_sessions AS s ON s.session_id = u.session_id
LEFT JOIN running AS r ON r.session_id = u.session_id
WHERE s.is_user_process = 1
ORDER BY (u.user_objects_alloc_page_count - u.user_objects_dealloc_page_count + ISNULL(r.user_pages, 0)
        + u.internal_objects_alloc_page_count - u.internal_objects_dealloc_page_count + ISNULL(r.internal_pages, 0)) DESC;
## Kedy použiť

Pri raste tempdb, spilloch, veľkých dočasných tabuľkách alebo dlhom ETL.

## Ako čítať výsledok

`net_user_mb` = dočasné tabuľky a table variables, `net_internal_mb` = sorty, hashe, spooly a spilly. Súčet zahŕňa dokončené aj práve bežiace tasky.

> [!WARNING]
> Ide o počítadlá alokácií mínus dealokácií, nie o presnú veľkosť konkrétnej tabuľky. Version store (RCSI, snapshot, online index) sa tu neukazuje – ten je v `sys.dm_tran_version_store_space_usage`.

**Oprávnenia:** `VIEW SERVER STATE` (na SQL Server 2022 stačí aj `VIEW SERVER PERFORMANCE STATE`).  
**Režim:** READ ONLY · **Verzia:** SQL Server 2016 – 2022

## Súvisiace recepty

- [Konfigurácia tempdb](script.php?id=13&s=konfiguracia-tempdb-subory-velkost-autogrowth)
- [Memory grants](script.php?id=19&s=memory-grants-kto-caka-na-pamat-resource-semaphore)