小编Tom*_*m V的帖子

为什么 EXEC 语句的 query_hash 为零?

我正在使用扩展事件为 SQL Server 设置监控系统,以便为我们的开发人员查找大量查询作为“生产反馈”。我正在使用事件sp_statement_completedsql_statement_completed,并在 cpu_time、逻辑读取等上使用谓词过滤器。我希望将结果汇总database_namequery_hash喜欢在互联网上的众多示例中展示的结果,但在结果中我看到query_hash所有语句都是 0使用 EXEC,如下表所示(为了便于阅读,缩短了时间戳和查询哈希)。

name                       timestamp      query_hash plan_handle        statement
sql_statement_completed    2016...6414    0          050056019600764... exec Shared.dbo.SyncFirm  
sql_statement_completed    2016...9946    0          06003d00e01e730... exec spSetUserAuth @userid;  
sql_statement_completed    2016...7184    0          0600e30028c9da0... exec spSetUserAuth @userid;  
sp_statement_completed     2016...0409    9826...578 0600c00028e6aa0... SELECT obfuscated_columns FROM dbo.SomeTable
sp_statement_completed     2016...1448    8660...775 060084006d2d660... INSERT INTO dbo.SomeTable ( obfuscated_columns)  EXEC(@sql)
sql_statement_completed    2016...7752    0          0600f9006c23f03... exec spSetUserAuth @userid;  
sql_statement_completed    2016...1443    1304...641 06005a0008a9b11... select SUBQ.ontrackstatus, COUNT(SUBQ.ontrac
Run Code Online (Sandbox Code Playgroud)

所有结果都有其价值,plan_handle而且它们都不同,因此正在制定很多计划。其他没有query_hash(我见过的)语句包括 ALTER …

sql-server extended-events sql-server-2014

8
推荐指数
1
解决办法
490
查看次数

数据库级锁

我有一个 SQL Server 2014 的生产实例,我需要对其进行一些轻度维护。

本质上,我需要在单个事务中替换两个整个表的内容。我想防止任何人在数据更改正在进行时查询任一表。桌子很小,我希望操作不到几秒钟。

不幸的是,我没有为此安排停机时间的好处。

所以问题是如何一次锁定多个对象 - 甚至整个数据库?

理想情况下,我可以简单地获取数据库级锁,进行更改,然后释放锁,但这在 SQL Server 2014 中似乎是不可能的。

sql-server locking sql-server-2014

8
推荐指数
2
解决办法
6043
查看次数

如何修复数据库一致性错误

我有一个 Microsoft Dynamics AX SQL Server 数据库。我只是DBCC CHECKDB为了检查完整性而运行。几分钟后,我得到了以下结果:

CHECKDB在数据库“AXPROD”中发现 0 个分配错误和4 个一致性错误。repair_rebuild 是 DBCC CHECKDB (AXPROD) 发现的错误的最低修复级别。DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。

由于我遇到了 4 个一致性错误,我想知道是否有办法解决这个问题,或者是否有办法获得有关这些错误的更多详细信息。

sql-server dbcc-checkdb microsoft-dynamics

7
推荐指数
1
解决办法
3万
查看次数

使用 CONTEXT_INFO 验证连接池服务器端

我正在使用 3 层应用程序 Microsoft Dynamics AX,其中中间层维护与 SQL Server 的连接。几个客户端连接到这个中间层服务器。

中间层服务器通常有几个连接到 SQL Server,所以我很确定它们正在池中,但是没有关于如何实现的文档。

通常情况下,我们可以不涉及SPID的用户或客户端应用程序,但在这里我们可以设置一个注册表项(具体到Microsoft Dynamics AX),这使得在提供这些信息的选择context_info的领域sys.dm_exec_sessions

同样,没有关于如何实现的文档。我们在这方面的唯一信息是MSDN 上一个模糊的博客条目

帖子提到

添加此信息的性能开销很小。

因此,我们不知道任何实现细节,例如:

  1. 信息是以某种方式包含在连接字符串中还是由 SET CONTEXT_INFO 完成?
  2. 什么时候重用连接?
  3. 可以预期的确切影响

有什么方法可以确定服务器端连接池的工作方式以及 context_info 的影响是什么?

更新:
这里使用这个查询

SELECT des.program_name,
       des.login_name,
       des.host_name,
--       der.database_id,
       COUNT(des.session_id) AS [Connections]
FROM sys.dm_exec_sessions des
INNER JOIN sys.dm_exec_connections DEC
        ON des.session_id = DEC.session_id
WHERE des.is_user_process = 1
--AND des.status <> 'running'
GROUP BY des.program_name,
         des.login_name,
         des.host_name
--         ,der.database_id
HAVING COUNT(des.session_id) > 2
ORDER BY …
Run Code Online (Sandbox Code Playgroud)

sql-server connection-pooling microsoft-dynamics

7
推荐指数
1
解决办法
1696
查看次数

DBCC CheckDB 遇到早期硬件故障

自 6 月下旬以来,我们的生产数据库服务器(Windows Server 2008 R2 DC 上的 SQL 2008 R2 Enterprise)在其夜间 DBCC CheckDB (Prod_DB) 期间遇到了一个奇怪的错误。那时,同样的工作一直运行良好。

我已将完整备份从该服务器恢复到测试服务器,数据文件似乎没问题,DBCC CheckDB 在那里没有返回任何错误。

我上周应用了这个修补程序,但没有解决问题。

https://support.microsoft.com/en-us/kb/967351/en-us

该消息听起来很严重,但是,应用程序在其他方面正常运行。所以我不确定我在这里吃的是什么。

如果有人可以分享任何建议,将不胜感激。

以下是来自 SQL 代理作业历史记录的错误消息:

Date                      7/28/2015 4:02:00 AM
Log                         Job History (DBCC Check DBs)

Step ID                 1
Server                   XXX
Job Name                            DBCC Check DBs
Step Name                         check dbs
Duration                              00:12:37
Sql Severity        17
Sql Message ID 823
Operator Emailed            
Operator Net sent           
Operator Paged                
Retries Attempted          0

Message
Executed as user: XXX. During undoing of a logged operation …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 dbcc-checkdb

7
推荐指数
1
解决办法
764
查看次数

获取上周在 SQL Server 中执行的所有查询

如何获得上周在 SQL Server 上执行的所有查询。

sql-server

7
推荐指数
1
解决办法
6万
查看次数

平均年龄的天数的含义?

我想知道我的用户的平均年龄并执行以下操作:

# SELECT avg(age(birthday)) FROM "user";
                   avg
------------------------------------------
 33 years 10 mons 32 days 08:33:10.577946
Run Code Online (Sandbox Code Playgroud)

天数是什么意思?怎么可能超过31天?

我有 3746 条记录,而且我在 UTC 时区。

PS:我使用的是 Postgres 9.5.3

postgresql

7
推荐指数
1
解决办法
742
查看次数

为什么按主键分组时可以选择所有字段,而按另一列分组时却不能选择所有字段

这是如何有效的语句(其中 id 是表的主键):

select * from table group by id ;
Run Code Online (Sandbox Code Playgroud)

这不是:

select * from table group by name ;
Run Code Online (Sandbox Code Playgroud)

错误:列“pgluster.id”必须出现在 GROUP BY 子句中或用于聚合函数中

小提琴

问题是为什么第一个是合法查询,即为什么按主键分组是有效的?

postgresql select group-by

7
推荐指数
1
解决办法
1万
查看次数

SSRS 中错误处理的标准或最佳实践

我在 SSRS 中遇到了一个反复出现的问题,其中“坏”报告会发送给客户。问题是我们的报告包含多个子报告,并且一个或多个子报告将无法处理。当子报告无法处理时,报告会发送错误消息代替子报告并且没有实际数据。

我的问题是,如果子报告失败有没有办法阻止报告发送?

理想情况下,我希望外部报告只返回一个错误。有没有办法让 SSRS 报告中的错误状态升级到外部范围?是否有我们可以强制执行的编码标准可以防止这个问题?

我们目前同时使用 SSRS 2008r2 和 SSRS 2016。

sql-server ssrs ssrs-2008-r2 ssrs-2016

7
推荐指数
1
解决办法
1006
查看次数

使用 SSMS 进行数据库还原使源数据库处于还原状态

我正在使用 SQL Server 2016(开发人员版)并希望在我的服务器实例中创建数据库的副本。我做了一个简单的备份,然后通过再次右键单击数据库-> 任务-> 恢复来恢复。

通过更改数据库的名称,数据库确实在新创建的数据库中恢复。到现在为止还挺好。但是,我开始使用的原始数据库以及我从哪里开始恢复,会处于 (Restoring...) 状态,这是无法以正常方式更改的。

当然,我知道如何在不产生此问题的情况下以不同的方式恢复数据库,并且我的原始数据库再次运行,但我的问题是:

这是正常行为吗?我想我偶然发现了一个错误。

sql-server ssms restore sql-server-2016

7
推荐指数
1
解决办法
2706
查看次数