## 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)
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.
/* 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;