是否有可用的 DMV 或其他机制返回执行 session_id 的命令超时?
我知道这个问题已经被问过好几次了,我知道解决方案,但我试图了解问题的根本原因:
我有以下代码来执行数据库备份。
DECLARE @Filename VARCHAR(256)
DECLARE @FileDate VARCHAR(15)
DECLARE @Path VARCHAR(50)
DECLARE @Name VARCHAR(50)
-- specify database backup directory
SET @Path = '\MyPath'
-- specify filename date
SELECT @FileDate = CONVERT(VARCHAR(20), GETDATE(), 112) + '_' + REPLACE(CONVERT(VARCHAR(20), GETDATE(), 108),':','')
DECLARE db_cursor CURSOR FOR
SELECT [name]
FROM master.sys.databases
WHERE [name] NOT IN ('master', 'msdb', 'model', 'tempdb')
AND [state_desc] = 'ONLINE'
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @Filename = @Path + @Name + '_Full_Backup_' + @FileDate + '.bak'
BACKUP DATABASE @Name
TO DISK = @Filename
WITH CHECKSUM,
COMPRESSION
FETCH NEXT FROM db_cursor INTO @Name
END
CLOSE db_cursor
DEALLOCATE db_cursor
有时,只备份了一些数据库,这表明游标没有遍历所有返回的行,或者查询本身没有返回它应该返回的所有数据库的名称。
我试图理解为什么会发生这种情况。我知道解决方法是使用STATIC
游标,这表明问题出在基础查询中的结果上
SELECT [name]
FROM master.sys.databases
WHERE [name] NOT IN ('master', 'msdb', 'model', 'tempdb')
AND [state_desc] = 'ONLINE'
正在发生变化,但我看不到会发生什么变化(没有数据库名称会发生变化,并且错误日志并不表明数据库状态已发生变化)
我试图在互联网上搜索很多关于 dmv 的信息,但搜索不多。我无法理解此 dmv 的某些列的含义。哪个是:
- pg_level
- allocation_unit_id
- 行数
- numa_node 请分享这个的意思,如果有人对此有任何想法的话。
的文档说明sys.dm_exec_query_stats
以下内容:
如果服务器上当前正在执行工作负载,则 sys.dm_exec_query_stats 的初始查询可能会产生不准确的结果。通过重新运行查询可以确定更准确的结果。
我有时会在活动工作负载期间查询该 DMV,并希望获得准确的结果。我不知道如何在实践中应用上述警告。我是否应该始终查询 DMV 两次并使用第二个结果集,因为这样会更准确?这感觉有点牵强。我是否需要了解 DMV 可能不准确的方式,以便我可以将其纳入我的分析中?如果是这样,可能会出现什么样的不准确:缺少行、过时的值、不一致的行或其他什么?
在活动工作负载期间使用时的最佳做法是什么sys.dm_exec_query_stats
?
我正在对 SQL Server 2014 执行以下 dmv 查询,以查找服务器上的所有活动和任何阻塞活动:
SELECT Distinct
...
FROM sys.dm_exec_requests er
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st
LEFT JOIN sys.dm_exec_sessions ses ON ses.session_id = er.session_id
LEFT JOIN sys.dm_exec_connections con ON con.session_id = ses.session_id
WHERE st.text IS NOT NULL And DB_Name(er.database_id) IN ('Vincent', 'Vincent_Audit')
ORDER BY BlockingSessionId Desc, SessionId
该查询的示例结果如下:
可以看到会话 120 被 112 阻止,112 被 69 阻止。但是,进程 69 没有出现,因为它在 sys.dm_exec_requests 中不存在。
因此,以下查询不返回任何结果:
SELECT *
FROM sys.dm_exec_requests
Where session_id = 69
有谁知道为什么会这样?
查看sys.dm_os_wait_stats时,以下列定义为BIGINT
- waiting_tasks_count
- 等待时间毫秒
- 最大等待时间毫秒
如果这些值中的任何一个超过9,223,372,036,854,775,807
,计数器是重置为 0,还是干脆停止计数?
从表定义中不清楚幕后发生了什么:
sp_helptext 'sys.dm_os_wait_stats'
退货:
CREATE VIEW sys.dm_os_wait_stats AS
SELECT *
FROM OpenRowset(TABLE SYSWAITSTATS)
所以这有点像一个黑盒子。
在某些 DMV 中,大数字可能会变为负数。一个例子是 中的total_elapsed_time
列dm_exec_requests
。
这是困扰我的事情,虽然从来没有引起任何真正的问题,因为我通常可以通过其他方式找到这些信息,但是有人可以解释为什么NULL
可能会在DMV 的 、 和 列中返回,但在dbid
列objectid
中number
产生结果?我理解为什么输出会反向返回(例如所有列但会产生数据),但我已经在多个 SQL Server 版本中多次看到这种行为,并且文档似乎并不暗示这应该是可能的,或者我只是读错了。sys.dm_exec_sql_text
text
text
这是我正在运行的查询的示例:
SELECT TOP 100
t.*
, s.*
, c.*
FROM sys.dm_exec_query_stats s
LEFT JOIN sys.dm_exec_connections c
ON c.most_recent_sql_handle = s.sql_handle
CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) t
WHERE s.execution_count > 1 AND DATEDIFF (second, creation_time, GETDATE()) > 0
AND t.dbid IS NULL
这是该列中的一个结果的示例,text
这意味着这与临时对象无关,而我通常认为这是原因。
select * from [dbo].[Map_ProviderSpecialty]
NULL
这些列返回值的情况是什么?
我们的 Master Data Services 应用程序一直遇到速度缓慢的问题。因此,我们查看了哪些表具有最高的范围扫描、单例查找、页面锁定等待等值。您能否告诉我是否有一种方法可以查看针对我们的 MDS 数据库中的特定表运行的最多查询。
我正在执行一个 select 语句来检索索引的碎片百分比并面临以下错误。
SELECT A.NAME,B.NAME,C.avg_fragmentation_in_percent
FROM SYS.TABLES A
INNER JOIN SYS.INDEXES B ON A.OBJECT_ID=B.object_id
CROSS APPLY SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID(),
A.OBJECT_ID,B.INDEX_ID,0,DEFAULT) C
WHERE B.NAME IS NOT NULL
错误是
消息 413,级别 16,状态 1,行 1
内联函数“SYS.DM_DB_INDEX_PHYSICAL_STATS”不支持相关参数或子查询。
消息 413,级别 16,状态 1,行 1
内联函数“SYS.DM_DB_INDEX_PHYSICAL_STATS”不支持相关参数或子查询。
在数据库引擎上的 SQL Server 中,您可以像这样运行 SQL 查询来获取服务器的版本信息,如版本和版本,以及更新级别等。
SELECT @@VERSION
查询 SSAS(表格或多维)实例的 MDX 等效项是什么?是否有 SSAS DMV 可以给我这个答案?
我浏览了SSAS DMV 的 Books Online 页面,但我没有注意到任何可以帮助我的 DMV。DISCOVER_INSTANCES 似乎没有信息。
假设 SQL Server 数据库引擎未安装在与 SSAS 实例相同的服务器上,因此我无法通过查询数据库引擎来检查这一点。
就我而言,这是针对 SQL 2012 表格实例,但也想知道如何查询多维实例。