Lau*_*gil 3 sql-server sql-server-2012
我正在运行以下(自制)分析查询,查看当前服务器上运行的查询的等待状态、内存使用情况和其他信息。
Select GetDate() as RunDate,
spid,
blocked,
waittype,
lastwaittype,
waittime,
sp.dbid,
uid,
status,
hostname,
program_name,
cmd,
nt_domain,
nt_username,
loginame,
sp.sql_handle,
stmt_start,
stmt_end,
session_id,
dop,
request_time,
grant_time,
requested_memory_kb,
granted_memory_kb,
required_memory_kb,
used_memory_kb,
max_used_memory_kb,
query_cost,
ideal_memory_kb
,SUBSTRING (qt.text, stmt_start/2+1, (
CASE
WHEN stmt_end = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2 + 1
ELSE stmt_end
END - stmt_start)/2) AS [Individual Query]
,[Parent Query] = qt.text
FROM sys.dm_exec_query_memory_grants mg
INNER JOIN sys.sysprocesses sp
ON mg.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(sp.sql_handle) as qt
WHERE sp.spid != @@SPID
ORDER BY requested_memory_kb
Run Code Online (Sandbox Code Playgroud)
当我运行它并且当前没有正在运行的查询时,我收到警告消息:警告:由于使用了本地连接提示,连接顺序已被强制执行 如您所见,上面的代码中没有连接提示。这只是在我的上下文中很烦人,但这是一个烦人的 SQL Server 错误,这是已知的事情,还是其他什么?
SQL 版本:Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64) 在 VMWare 上运行。在 SSMS 2016(版本 13.0.16106.4)中运行
Jos*_*ell 10
您可以通过运行以下 T-SQL 来获取该 DMV 的定义:
EXEC sp_helptext 'sys.dm_exec_query_memory_grants'
Run Code Online (Sandbox Code Playgroud)
这表明在底层视图定义中使用了连接提示:
CREATE VIEW sys.dm_exec_query_memory_grants AS
SELECT A.session_id, A.request_id, A.scheduler_id, A.dop, A.request_time, A.grant_time,
A.requested_memory_kb, A.granted_memory_kb, A.required_memory_kb, A.used_memory_kb, A.max_used_memory_kb,
A.query_cost, A.timeout_sec,
convert(smallint, A.is_small) as resource_semaphore_id,
B.queue_id, B.wait_order, B.is_next_candidate, B.wait_time_ms,
A.plan_handle, A.sql_handle,
A.group_id, A.pool_id, A.is_small, A.ideal_memory_kb
FROM OpenRowset(TABLE DM_EXEC_QE_GRANTSINFO) A
LEFT OUTER LOOP JOIN OpenRowset(TABLE DM_EXEC_QE_GRANTWAITERS) B
ON A.session_id=B.session_id and A.request_id=B.request_id and A.sql_handle=B.sql_handle and A.plan_handle=B.plan_handle
Run Code Online (Sandbox Code Playgroud)
具体来说,是“LOOP JOIN”提示触发了连接顺序警告。查看有关加入提示的这些Microsoft 文档:
如果为任意两个表指定了连接提示,则查询优化器会自动为查询中的所有连接表强制执行连接顺序...
因此,即使视图只有一个提示来强制执行特定的连接策略(循环),也会自动应用连接顺序提示。
归档时间: |
|
查看次数: |
2908 次 |
最近记录: |