SQL Server 2022 PolyBase数据移动服务启动失败求助
SQL Server 2022 PolyBase Data Movement服务启动失败问题排查
问题详情
- 环境:SQL Server 2022 Developer版本,计划通过PolyBase连接MongoDB
- 现象:PolyBase Data Movement服务启动后数秒自动停止
- 核心日志错误:
13/05/2024 14:52:53 [Thread:7800] [GeneralInstrumentation:ThreadErrorEvent] (Error, High): System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. at Microsoft.SqlServer.DataWarehouse.DataMovement.SharedMemory.SmNative.SmCreateEx(Boolean xdeployMode, String sharedMemoryName, String ipcPrefixName, UInt32 buffersPerCQScan, UInt32 bufferSize, UInt32 regionCount, String nodeName, UInt32 nodeNameLength, Boolean useSecurityGroupForAcl, Boolean requireLocalMachineGroupForAcl, Boolean requireOrderedBuffers, IntPtr& sharedMemoryHandle) at Microsoft.SqlServer.DataWarehouse.DataMovement.SharedMemory.NativeSharedMemory.Create(String sharedMemoryName, String ipcPrefixName, UInt32 buffersPerCQScan, UInt32 bufferSize, UInt32 regionCount, String nodeName, UInt32 nodeNameLength) at Microsoft.SqlServer.DataWarehouse.DataMovement.CommandManager.DetachSqlServerAndCreateSharedMemory() at Microsoft.SqlServer.DataWarehouse.DataMovement.CommandManager.ProcessInitConfigMessage(IMessage message) at Microsoft.SqlServer.DataWarehouse.DataMovement.CommandManager.ProcessBaseMessage(IBaseMessage message) at Microsoft.SqlServer.DataWarehouse.DataMovement.CommandManager.Run() at Microsoft.SqlServer.DataWarehouse.Common.ThreadManager.ThreadFactory.ExecuteCallback(Delegate callback, Object state, Boolean throwException, String name) at Microsoft.SqlServer.DataWarehouse.Common.ThreadManager.ThreadFactory.<>c__DisplayClass15_0.<OnCreateThread>b__0(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart(Object obj)
- 事件查看器提示:账户'PdwComputeNodeAccess'存在于域(MYDOMAINNAME)而非本地机器
- 已尝试操作:重新安装SQL Server、确认
I_certSignPolyBaseAuthorize和I_certSignSmDetach为sysadmin角色、启用TCP/IP,问题未解决
解决建议
1. 修复PdwComputeNodeAccess本地组
- 打开计算机管理 -> 本地用户和组 -> 组,检查是否存在
PdwComputeNodeAccess本地组。若不存在,手动创建该组 - 将PolyBase相关服务账户添加到该组:默认服务账户为
NT SERVICE\PolyBaseEngine和NT SERVICE\PolyBaseDataMovement,确保这两个账户已加入PdwComputeNodeAccess本地组 - 若域中存在同名账户,优先使用本地组:可在服务属性中指定本地系统账户运行PolyBase服务,避免域账户干扰
2. 重置PolyBase服务权限与共享内存配置
- 以管理员身份打开命令提示符,运行以下命令重置PolyBase Data Movement服务权限:
sc sdset PolyBaseDataMovement D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
- 执行SQL查询验证PolyBase配置:
SELECT name, value, description FROM sys.configurations WHERE name LIKE '%polybase%'
确保polybase enabled的值为1,若测试可暂时将polybase network encryption设为0
3. 系统组件与更新检查
- 安装SQL Server 2022最新累积更新:修复官方已知的PolyBase共享内存访问违规BUG
- 验证.NET Framework版本:确保系统安装了.NET Framework 4.8或更高版本
- 检查系统内存:避免因内存不足导致的内存访问异常,暂时关闭其他占用内存较高的程序后重试启动服务
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

