当我运行以下
select t.type
from (values ('Green'),('Blue'),('Red')) as t(type)
for xml path('')
Run Code Online (Sandbox Code Playgroud)
我收到这个输出
<type>Green</type>
<type>Blue</type>
<type>Red</type>
Run Code Online (Sandbox Code Playgroud)
如果我运行以下
select t.type + '/'
from (values ('Green'),('Blue'),('Red')) as t(type)
for xml path('')
Run Code Online (Sandbox Code Playgroud)
我收到这个输出
Green/Blue/Red/
Run Code Online (Sandbox Code Playgroud)
为什么在select中添加连接会导致xml文件中一行的type标签和输出被删除?运行 SQL Server 2012。
我在运行以下命令时经常收到此错误
sp_whoisactive @get_locks = 1
Run Code Online (Sandbox Code Playgroud)
消息 6841,级别 16,状态 1,过程 sp_WhoIsActive,第 4287 行 FOR XML 无法序列化节点“Lock/@resource_description”的数据,因为它包含 XML 中不允许的字符 (0x0001)。要使用 FOR XML 检索此数据,请将其转换为 binary、varbinary 或 image 数据类型并使用 BINARY BASE64 指令。警告:空值被聚合或其他 SET 操作消除。
我相信这与抓取所持有的锁的 xml 相关,但是我注意到它在发生阻塞时经常发生。有什么办法可以解决这个问题还是已知问题?运行 SQL Server 2012 和 sp_whoisactive 的最新版本v11.32。
编辑
按照建议的选项,我无法找到此数据。我主要是在服务器阻塞时遇到该消息,一旦我遇到该消息,我就会关闭参数并尝试查看它可能来自哪个对象,但这很困难,因为有很多线程正在运行。有没有更简单的方法呢?我最初并不认为它是数据而是一个对象名称,因为当我看到锁 xml 时它通常只包含对象名称,我没有意识到实际数据被放置在那里可能会导致此消息?
编辑 2
按照 Erik 的建议,我能够通过输出 #locks 表结果的 SOH 字符来跟踪对象。然而,最终我发现最有用的是使用 get_task_info = 2 和 get_additional_info = 1 的解决方法,运行这些参数时,我没有收到错误消息,但仍然收到我需要的信息。我仍将尝试将该字符添加到 sp_whoisactive 中的替换语句中,以便在需要查看完整 XML 的情况下仍然可以使用 get_locks 参数。
我正在运行 SQL Server 2012 并使用 2019 年 3 月发布的 sp_blitzCache 来分析系统上一些运行缓慢的查询。
我已经使用参数 @SortOrder = 'Reads' 执行了存储过程,并发现一些查询需要减少读取大量页面(以百万计)。
奇怪的是,这些查询都没有返回内存授予列的任何信息,它们都是空的。
为什么我们可以让 sp_BlitzCache 返回的查询执行多次读取和写入,但所有内存授予列都包含空值?
谢谢,凯文
最近我们开始使用 sp_BlitzCache 来帮助我们调整我们的查询。我们发现一个 SP 有一些问题,我们能够成功地重构它。
在我们调整查询之前的一周内,我有一份 sp_BlitzCache 的输出副本,可在此处获得
https://drive.google.com/open?id=1oiAEl62ZT51qcCEhVzkg8oDA3HB-NCsv
生成此输出的命令运行是
exec sp_BlitzCache @StoredProcName = 'hs_UpdateShipmentPackagesAndWeightSp'
Run Code Online (Sandbox Code Playgroud)
几个问题
1)我注意到我们有多个行用于同一个计划句柄,这是为什么?
2) 您会注意到成本最高的查询 (1451) 具有整个 create procedure 语句的查询文本,这是什么意思?该行的指标是否仅用于创建存储过程?
3) 对于成本最高的行,即上面提到的行,它的最小/最大授权几乎为 2GB。这是否意味着当我们运行 create procedure 语句时,它要求 2gb 的内存?还是在调用 proc 时使用此计划?我想这与问题 2 的答案有关
4) 为什么在某些情况下我们有 Min/Max grant KB > 0 和 Min/Max used grant kb > 0,但百分比内存授权为 null ?
我们正在运行 SQL Server 2012。
谢谢,凯文
我们的生产 sql 服务器(物理)有一个持续的问题,我们在日志中随机收到此错误,使数据库进入恢复状态
SQLServerLogMgr::LogWriter: Operating system error 1117(The request could not be performed because of an I/O device error.) encountered.
Run Code Online (Sandbox Code Playgroud)
问题总是发生在我们存储事务日志的驱动器上。数据库通常会自行恢复,但很少有实例不会,我们需要重新启动实例才能恢复。任何数据库都没有为 dbcc checkdb 返回错误。
我们的存储团队已经与我们的供应商进行了数周的调查,但没有成功。调查正在进行中。
话虽如此,除了向存储团队报告并检查数据库损坏之外,sql server dba 应该如何处理此错误?我想知道我是否可以从 sql server 端收集更多信息,这可能有助于他们的调查?
运行 SQL Server 2012 SP3,存储是 SAN。
第一次更新
我们的基础架构团队昨晚进行了以下更改
我们还没有收到错误,我会在一周左右再次更新。
第二次更新
先前更新中所做的更改并未解决该问题。昨晚我们将 tempdb 从 SAN 移动到物理服务器上的本地驱动器,并禁用了 iSCSI 优化连接跟踪。我们还没有收到错误消息,我们还看到对数据和日志驱动器(仍在 san 上)的磁盘读/写速度更快,当然 tempdb 是本地的。此外,我们在错误发生期间以及全天收到 Windows 事件日志中的许多 iSCSI 错误。由于昨晚的这些变化,那些 iCSI 错误大部分都消失了,仍然有一些出现,但几乎没有那么多。
谢谢,凯文
我max_server_memory
在我们的生产 SQL Server 上将设置配置为 141 GB,目标/总服务器内存为 144 GB。
我认为max_server_memory
代表我愿意让 SQL Server 引擎使用多少内存,如果是这样,为什么它使用更多?
运行 SQL Server 2012 SP3,安装了 160 GB 内存的物理机,机器上没有运行其他实例,但我们也在运行集成服务。
我们有 75 个用户数据库,总大小为 928 GB。我不确定是否正在使用列存储,或者我如何检查它。这是一个供应商应用程序。
现在目标内存 = 144,384,008,总计 = 144,378,261。
该实例自美国东部时间昨晚 2019-05-01 22:20:21.097 以来一直在运行。我们有一些基础设施维护需要停止实例。但是,我注意到很长一段时间以来,总/目标始终为 144,而最大值始终设置为 141。周一至周五主要工作时间的 PLE 平均约为 0.5 到 1 小时,有时会跳至 2 小时.