To identify which type of tempdb
objects used most of the space
SELECT
SUM (user_object_reserved_page_count)*8 as user_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 mixtedextent_kb
FROM
sys.dm_db_file_space_usage
User_objects defines as follows
·
User-defined tables and indexes
·
System tables and indexes
·
Global temporary tables and indexes
·
Local temporary tables and indexes
·
Table variables
·
Tables returned in the table-valued functions
Version_store issue defines the user’s
reads the big table while the users modified the system during snapshot
isolation committed level. So it may indicate transaction committed faster than cleanup
that could trigger the below scenario.
The
following table lists error messages that indicate insufficient disk space in
the tempdb database. These errors can be found in the
SQL Server error log, and may also be returned to any running application.
Error
|
Is raised when
|
1101 or 1105
|
Any session must allocate space in tempdb.
|
3959
|
The version store is full. This error usually appears
after a 1105 or 1101 error in the log.
|
3967
|
The version store is forced to shrink because tempdb is full.
|
3958 or 3966
|
A transaction cannot find the required version record
in tempdb.
|
To identify the live running query and its related information that used most of the tempdb disk space.
SELECT es.host_name , es.login_name , es.program_name,
st.dbid as QueryExecContextDBID, DB_NAME(st.dbid) as QueryExecContextDBNAME, st.objectid as ModuleObjectId,
SUBSTRING(st.text, er.statement_start_offset/2 + 1,(CASE WHEN er.statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max),st.text)) * 2 ELSE er.statement_end_offset END - er.statement_start_offset)/2) as Query_Text,
tsu.session_id ,tsu.request_id, tsu.exec_context_id,
(tsu.user_objects_alloc_page_count - tsu.user_objects_dealloc_page_count) as OutStanding_user_objects_page_counts,
(tsu.internal_objects_alloc_page_count - tsu.internal_objects_dealloc_page_count) as OutStanding_internal_objects_page_counts,
er.start_time, er.command, er.open_transaction_count, er.percent_complete, er.estimated_completion_time, er.cpu_time, er.total_elapsed_time, er.reads,er.writes, er.logical_reads, er.granted_query_memory
FROM sys.dm_db_task_space_usage tsu inner join sys.dm_exec_requests er
ON ( tsu.session_id = er.session_id and tsu.request_id = er.request_id)
inner join sys.dm_exec_sessions es ON ( tsu.session_id = es.session_id )
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) st
WHERE (tsu.internal_objects_alloc_page_count+tsu.user_objects_alloc_page_count) > 0
ORDER BY (tsu.user_objects_alloc_page_count - tsu.user_objects_dealloc_page_count)+(tsu.internal_objects_alloc_page_count - tsu.internal_objects_dealloc_page_count) DESC
No comments:
Post a Comment