Azure SQL托管实例执行含R代码的SQL查询时持续挂起
解决Azure SQL托管实例中R脚本执行挂起的问题
针对你遇到的Azure SQL托管实例运行R脚本始终挂起的问题,可按以下步骤排查配置问题:
确认外部脚本启用状态
执行以下SQL查询验证配置:EXEC sp_configure 'external scripts enabled';若返回的
value为0,需执行开启命令并生效:EXEC sp_configure 'external scripts enabled', 1; RECONFIGURE WITH OVERRIDE;注意:部分场景下可能需要重启托管实例使配置生效。
检查R服务组件运行状态
- 查看SQL Server错误日志,搜索
RLauncher、BxlServer相关条目,确认组件是否正常启动,是否存在权限不足、资源缺失等报错。 - 确认托管实例的资源使用率(CPU、内存),通用层Gen5实例需保证有足够预留资源供外部脚本运行,若资源耗尽会导致脚本挂起。
- 查看SQL Server错误日志,搜索
验证账号权限
- 执行
sp_execute_external_script的登录账号需具备EXECUTE ANY EXTERNAL SCRIPT权限,可通过以下命令授予:GRANT EXECUTE ANY EXTERNAL SCRIPT TO [你的登录账号]; - 检查默认运行外部脚本的
SQLRUserGroup账号是否拥有R安装目录、临时文件目录的读写权限,权限缺失会导致脚本无法正常初始化。
- 执行
用极简脚本测试基础环境
运行无依赖的极简脚本,排除脚本内容影响:EXEC sp_execute_external_script @language = N'R', @script = N'OutputDataSet <- data.frame(Id = 1:3);' WITH RESULT SETS ((Id INT));若仍挂起,说明问题出在基础环境配置而非脚本逻辑。
排查网络与防火墙限制
- 确认托管实例的网络安全组(NSG)未阻断SQL引擎与外部脚本服务的内部通信端口(如54321、54322等)。
- 检查实例出站规则,确保R服务组件能正常与SQL引擎进行本地通信(空脚本无需联网,重点排查内部通信)。
查看诊断日志
在Azure门户中打开托管实例的诊断日志,筛选ExternalScriptsRuntime类别,查看是否有具体的报错信息,这些日志能直接定位组件故障点。
内容的提问来源于stack exchange,提问作者Calum Peebles
相关产品推荐
相关产品推荐

