sqlserver 2017 EXCEPTION_ACCESS_VIOLATION Error: 14151, Severity: 18, State: 1.

H_ 0 信誉分
2024-07-09T14:18:15.2333333+00:00

在sqlserver 2017中发布订阅中报错,内存访问冲突。补丁已打至最新。目前无法升级至2019。即使重装SQLServer后过一段时间也会重新出现此问题

数据库中查看进程 sp_replcmds 等待类型为:CMEMTHREAD

Replication-Replication Transaction-Log Reader Subsystem: agent XXX-AAA-1 failed. The process could not execute 'sp_replcmds' on 'XXX'.

现无法进行重现。希望能提供排查方式。如何排查出来内存访问冲突中分别是哪一方通过什么触发


新补充

HI,

现无法进行重现的意思是在相同系统与版本下发布订阅无法重现此问题。

关于回复中的两个链接地址:

1、https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/replication/error-replication-log-reader-agent-fails

2、https://repltalk.com/2019/01/31/the-process-could-not-execute-sp_replcmds/

均已做过尝试,

重启系统后出现错误信息为:EXCEPTION_ACCESS_VIOLATION

SqlDumpExceptionHandler: Process 386 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process. Error: 14151, Severity: 18, State: 1.

ErrorLog信息如下:

消息 SQL Server Assertion: File: <sosmemobj.cpp>, line=2772 Failed Assertion = 'pvb->FInUse ()'. This error may be timing-related. If the error persists after rerunning the statement, use DBCC CHECKDB to check the database for structural integrity, or restart the server to ensure in-memory data structures are not corrupted. Replication-Replication Transaction-Log Reader Subsystem: agent XXX-AAA-1 failed. The process could not execute 'sp_replcmds' on 'XXX'.

CHECKDB 已尝试过,没有问题。

在报错时,SqlServer有生成mdmp文件,是否有方式能做到直接分析出来分别是哪些内容导致的EXCEPTION_ACCESS_VIOLATION?

SQL Server
SQL Server
Microsoft 关系数据库管理和分析系统的一个系列,用于实现电子商务、业务线和数据仓库解决方案。
112 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. MikeyQiaoMSFT-0444 1,750 信誉分
    2024-07-10T07:39:39.2466667+00:00

    Hi,H_

    除此报错之外还有别的信息吗?

    现无法进行重现。

    你的意思是,这个错误是偶然的?查看Error Log,报错的上下文会有更多信息提示。现提供给你参考文档。

    https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/replication/error-replication-log-reader-agent-fails

    请问你的分发中是否存在大量的事务,导致日志代理读取超时

    建议可以先采取文章中的方法3,可以增大 QueryTimeOut 或者直接设为0,降低ReadBatchSize属性(默认500)

    转到“代理”选项卡。 右键单击“日志读取器”>“代理配置文件”。 使用您需要的新参数创建新的代理配置文件。 将新配置文件设置为“用于此代理” 重新启动日志读取器代理,然后等待。

    排查过程你可以参考此文章:

    https://repltalk.com/2019/01/31/the-process-could-not-execute-sp_replcmds/

    如果答案是正确的解决方案,请点击“接受答案”并投赞成票。如果您对此答案有其他疑问,请点击“评论”。