我的SQL Server 2014中的tempdb大约有1 TB的空间。
早上我看到一些警告说" tempdb是Full"。我知道有很多查询在夜间运行,并且很少有查询在tempdb中创建了很多临时表和临时变量。在早上,我没有看到任何查询正在运行,并且tempdb处于正常状态。
有没有办法获取导致tempdb问题的查询列表?或者以任何方式检查昨晚的查询?
答案 0 :(得分:1)
您需要根据频率运行此查询并将其转储到某个表中以供以后分析。
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
我个人更喜欢使用扩展事件来跟踪此事.Below是跟踪使用扩展事件的方式。您可以在brentozar上看到完整的演示
CREATE EVENT SESSION [PublicToilet] ON SERVER
ADD EVENT [sqlserver].[database_file_size_change] (
ACTION ( [sqlserver].[session_id], [sqlserver].[database_id],
[sqlserver].[client_hostname], [sqlserver].[sql_text] )
WHERE ( [database_id] = ( 2 )
AND [session_id] > ( 50 ) ) ),
ADD EVENT [sqlserver].[databases_log_file_used_size_changed] (
ACTION ( [sqlserver].[session_id], [sqlserver].[database_id],
[sqlserver].[client_hostname], [sqlserver].[sql_text] )
WHERE ( [database_id] = ( 2 )
AND [session_id] > ( 50 ) ) )
ADD TARGET [package0].[asynchronous_file_target] ( SET filename = N'c:\temp\publictoilet.xel' ,
metadatafile = N'c:\temp\publictoilet.xem' ,
max_file_size = ( 10 ) ,
max_rollover_files = 10 )
WITH ( MAX_MEMORY = 4096 KB ,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS ,
MAX_DISPATCH_LATENCY = 1 SECONDS ,
MAX_EVENT_SIZE = 0 KB ,
MEMORY_PARTITION_MODE = NONE ,
TRACK_CAUSALITY = ON ,
STARTUP_STATE = ON );
GO
您可能还想查看此链接..
https://technet.microsoft.com/en-us/library/ms176029(v=sql.105).aspx
答案 1 :(得分:0)