AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 240550
Accepted
kevinnwhat
kevinnwhat
Asked: 2019-06-14 18:29:19 +0800 CST2019-06-14 18:29:19 +0800 CST 2019-06-14 18:29:19 +0800 CST

sp_whoisactive @get_locks 参数xml错误

  • 772

运行以下命令时经常收到此错误

sp_whoisactive @get_locks = 1

消息 6841,级别 16,状态 1,过程 sp_WhoIsActive,第 4287 行 FOR XML 无法序列化节点“Lock/@resource_description”的数据,因为它包含 XML 中不允许的字符 (0x0001)。要使用 FOR XML 检索此数据,请将其转换为二进制、varbinary 或图像数据类型并使用 BINARY BASE64 指令。警告:空值被聚合或其他 SET 操作消除。

我相信这与抓取所持有的锁的 xml 有关,但是我注意到它在发生阻塞时经常发生。有什么办法可以解决这个问题还是一个已知问题?运行 SQL Server 2012 和最新版本 v11.32 的sp_whoisactive。

编辑

按照建议的选项,我无法找到这些数据。我主要是在服务器阻塞时遇到该消息,一旦遇到该消息,我会关闭参数并尝试查看它可能来自哪个对象,但这很困难,因为有很多线程在运行。有没有更简单的方法呢?我最初认为它不是数据而是对象名称,因为当我看到锁 xml 它通常只包含对象名称时,我没有意识到实际数据被放入其中可能导致此消息?

编辑 2

根据 Erik 的建议,我能够使用 SOH 字符输出#locks 表的结果来追踪对象。然而最终我发现最有用的是使用 get_task_info = 2 和 get_additional_info = 1 的变通方法,在运行这些参数时,我没有收到错误消息,但仍然收到我需要的信息。我仍将探索尝试将该字符添加到 sp_whoisactive 中的替换语句中,以便在需要查看完整 XML 的情况下仍然可以使用 get_locks 参数。

sql-server sp-whoisactive
  • 1 1 个回答
  • 441 Views

1 个回答

  • Voted
  1. Best Answer
    Erik Darling
    2019-06-20T07:00:38+08:002019-06-20T07:00:38+08:00

    我无法完全回答您关于哪个对象导致问题的问题,但我可以为您提供一些故障排除和可能的解决方法。

    请注意,由于其许可,我无法将“固定”脚本分发给您,但您可以自由地在本地尝试编辑。

    故障排除

    如果你 ctrl+f 通过 sp_WhoIsActive for @get_locks = 1,你会点击这个代码部分:

    坚果

    再往下一点,您会看到一个相当复杂的选择插入到一个名为 的表中#locks:

    坚果

    如果您向下滚动到第 1670 行左右(假设您在 SSMS 中启用了行号),您将到达SELECT INTO填充它的末尾。您可以尝试SELECT * FROM #locks;在此处添加一个简单的内容,以查看表格中的内容。这至少可以潜在地将您指向正确的对象。

    解决方法

    在不更改任何代码的情况下,一种解决方法可能是像这样运行该过程:

    EXEC sp_WhoIsActive 
        @get_task_info = 2, 
        @get_additional_info = 1;
    

    此处记录了这些参数的用途。

    如果这不能正常运行,那么您将被困在 ctrl+f for FETCH NEXT FROM locks_cursor. 这会将您带到弹出错误的代码部分。

    在这个游标代码块中,您将找到一个动态查询、一个 catch 块和一个带有嵌套REPLACE块的更新,以清除坏字符(除了您的,它会出现)。我相信你必须REPLACE在所有这些中添加一个额外的嵌套NCHAR(0x0001),以便修复它。我没有测试过这个,所以YMMV。

    希望这可以帮助!

    • 5

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve