对在 SQL Server 机器学习服务中执行 Python 和 R 脚本时的 Launchpad 服务问题进行故障排除
适用于: SQL Server 2016 (13.x) 及更高版本
本文提供用于机器学习服务的 SQL Server Launchpad 服务相关问题的故障排除指南。 启动板服务支持 R 和 Python 的外部脚本执行。 多种问题可能会阻止启动板启动,包括配置问题或更改,或缺少网络协议。
确定启动板是否正在运行
打开“SQL Server 配置管理器”。 在命令行中,键入 SQLServerManager13.msc、SQLServerManager14.msc 或 SQLServerManager15.msc 。
记下运行启动板的服务帐户。 启用 R 或 Python 的每个实例都应具有其自己的启动板服务实例。 例如,命名实例的服务可能类似于 MSSQLLaunchpad $ InstanceName 。
如果服务停止,则重启该服务。 重启时,如果出现任何配置问题,则会在系统事件日志中发布一条消息,并再次停止该服务。 查看系统事件日志以获取有关服务停止原因的详细信息。
查看 RSetup.log 的内容,并确保安装中没有错误。 例如,消息“以代码 0 退出”表示服务启动失败 。
若要查找其他错误,请查看 rlauncher.log 的内容。
查看启动板服务帐户
默认服务帐户可能是“NT Service$SQL2016”、“NT Service$SQL2017”或“NT Service$SQL2019”。 最后一部分可能会有所不同,具体取决于 SQL 实例名称。
启动板服务 (Launchpad.exe) 通过使用低特权服务帐户运行。 但是,若要启动 R 和 Python 并与数据库实例进行通信,启动板服务帐户需要以下用户权限:
- 以服务身份登录 (SeServiceLogonRight)
- 替换进程级别标记 (SeAssignPrimaryTokenPrivilege)
- 跳过遍历检查 (SeChangeNotifyPrivilege)
- 调整进程的内存配额 (SeIncreaseQuotaSizePrivilege)
有关这些用户权限的信息,请参阅配置 Windows 服务帐户和权限中的“Windows 特权和权限”部分。
提示
如果你熟悉如何使用支持诊断平台 (SDP) 工具进行 SQL Server 诊断,则可以使用 SDP 查看名为 MachineName_UserRights.txt 的输出文件。
启动板的用户组无法在本地登录
在安装机器学习服务的过程中,SQL Server 将创建 Windows 用户组 SQLRUserGroup,然后为该组预配全部所需的权限,使启动板能够连接到 SQL Server 并运行外部脚本作业 。 如果启用了该用户组,它也将用于执行 Python 脚本。
但是,在实施了限制性更强的安全策略的组织中,该组所需的权限可能已被手动删除,或者可能被策略自动吊销。 如果已删除权限,则启动板将无法再连接到 SQL Server,并且 SQL Server 无法调用外部运行时。
若要解决此问题,请确保组 SQLRUserGroup 拥有系统权限“允许本地登录”。
有关详细信息,请参阅配置 Windows 服务帐户和权限。
运行外部脚本的权限
即使 Launchpad 配置正确,如果用户没有运行 R 或 Python 脚本的权限,它也会返回错误。
如果以数据库管理员的身份安装 SQL Server 或你是数据库所有者,则会自动被授予此权限。 但是,其他用户具有的权限通常更加有限。 如果他们尝试运行 R 脚本,则会收到 Launchpad 错误。
若要解决此问题,在 SQL Server Management Studio 中,安全管理员可以通过运行以下脚本来修改 SQL 登录名或 Windows 用户帐户:
GRANT EXECUTE ANY EXTERNAL SCRIPT TO <username>
有关详细信息,请参阅 GRANT (Transact-SQL。
常见 Launchpad 错误
本节列出了 Launchpad 返回的最常见的错误消息。
“无法启动 R 脚本的运行时”
如果 R 用户的 Windows 组(也用于 Python)无法登录到运行 R Services 的实例,则可能会看到以下错误:
尝试运行 R 脚本时生成的错误:
无法启动 'R' 脚本的运行时。 请检查 'R' 运行时的配置。
发生外部脚本错误。 无法启动运行时。
SQL Server Launchpad 服务生成的错误:
无法初始化启动器 RLauncher.dll
未注册任何启动器 dll!
安全日志指示帐户 NT SERVICE 无法登录
若要了解如何为此用户组提供必要的权限,请参阅 安装 SQL Server R Services。
注意
如果使用 SQL 登录名从远程工作站运行 R 脚本,则没有此限制。
“登录失败: 尚未授予用户请求的登录类型”
默认情况下,SQL Server Launchpad 使用以下帐户启动:NT Service\MSSQLLaunchpad
。 帐户通过 SQL Server 安装程序配置为具有所有必需的权限。
如果将不同的帐户分配到 Launchpad,或者权限被 SQL Server 计算机上的某个策略删除,该帐户可能不会获得所需的权限,同时会出现以下错误:
ERROR_LOGON_TYPE_NOT_GRANTED 1385 (0x569) 登录失败: 未授予用户在此计算机上的请求登录类型。
若要为新服务帐户授予必要的权限,请使用本地安全策略应用程序并更新帐户的权限,以便包括以下权限:
- 调整进程的内存配额 (SeIncreaseQuotaPrivilege)
- 跳过遍历检查 (SeChangeNotifyPrivilege)
- 以服务身份登录 (SeServiceLogonRight)
- 替换进程级别标记 (SeAssignPrimaryTokenPrivilege)
“无法与 Launchpad 服务通信”
如果已经安装并启用了机器学习功能,但是在尝试运行 R 或 Python 脚本时遇到此错误,则实例的 Launchpad 服务可能已停止运行。
通过 Windows 命令提示符打开 SQL Server 配置管理器。 有关详细信息,请参阅 SQL Server Configuration Manager。
右键单击“SQL Server Launchpad 实例”,然后选择“属性” 。
选择“服务”选项卡,然后检查该服务是否正在运行 。 如果未运行,请将“启动模式”更改为“自动”,然后选择“应用” 。
重启服务通常可以解决问题,从而可以运行机器学习脚本。 如果重启不能解决问题,请记下“二进制文件路径”属性中的路径和参数,然后执行以下操作 :
a. 检查启动器的 .config 文件,确保工作目录有效。
b. 确保 Launchpad 使用的 Windows 组可以连接到 SQL Server 实例。
c. 如果对服务属性做了任何更改,请重启 Launchpad 服务。
“严重错误: tmpFile 创建失败”
在这种情况下,你已经成功安装了机器学习功能,并且 Launchpad 正在运行。 尝试运行一些简单的 R 或 Python 代码,但是 Launchpad 失败,并显示如下错误:
无法与 R 脚本的运行时通信。 请检查 R 运行时的要求。
同时,外部脚本运行时将以下消息作为 STDERR 消息的一部分写入:
“严重错误: tmpFile 创建失败” 。
此错误表明 Launchpad 尝试使用的帐户没有登录数据库的权限。 实施严格的安全策略时可能会发生这种情况。 若要确定是否是这种情况,请查看 SQL Server 日志,并检查登录时是否拒绝了 MSSQLSERVER01 帐户。 特定于 R_SERVICES 或 PYTHON_SERVICES 的日志中提供了相同的信息。 查找 ExtLaunchError.log。
默认情况下,将设置 20 个帐户并将其与 Launchpad.exe 进程关联,名称为 MSSQLSERVER01 至 MSSQLSERVER20。 如果大量使用 R 或 Python,则可以增加帐户数量。
若要解决此问题,请确保该组对已安装并启用了机器学习功能的本地实例具有“允许本地登录”权限 。 在某些环境中,此权限级别可能需要网络管理员的 GPO 例外。
“配额不足,无法处理此命令”
此错误可能意味着以下情况之一:
Launchpad 可能没有足够的外部用户来运行外部查询。 例如,如果同时运行 20 个以上的外部查询,并且只有 20 个默认用户,则一个或多个查询可能会失败。
没有足够的内存来处理 R 任务。 在默认环境中此错误最常发生,SQL Server 可能最多占用计算机资源的 70%。 有关如何通过 R 修改服务器配置以支持更多资源使用的信息,请参阅操作 R 代码。
“找不到包”
如果在 SQL Server 中运行 R 代码并收到此消息,但在 SQL Server 外部运行相同代码时未得到此消息,则表示该软件包未安装到 SQL Server 使用的默认库位置。
出现此错误的原因有多种:
在服务器上安装了新包,但访问被拒绝,因此 R 将软件包安装到了用户库。
你在安装 R Services 之后又安装了另一个 R 工具或一组库,例如 RStudio。
若要确定实例使用的 R 包库的位置,请打开 SQL Server Management Studio(或任何其他数据库查询工具),连接到该实例,然后运行以下存储过程:
EXEC sp_execute_external_script @language = N'R',
@script = N' print(normalizePath(R.home())); print(.libPaths());';
示例结果
STDOUT message(s) from external script:
[1] "C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\R_SERVICES"
[1] "C:/Program Files/Microsoft SQL Server/MSSQL13.SQL2016/R_SERVICES/library"
若要解决此问题,必须将包重新安装到 SQL Server 实例库。
注意
如果已升级 SQL Server 2016 实例以使用最新版本的 Microsoft R,则默认库位置会有所不同。 有关详细信息,请参阅默认 R 库位置。
Launchpad 由于 DLL 不匹配而关闭
如果安装具有其他功能的数据库引擎,修补服务器,然后在以后使用原始媒体添加机器学习功能,则可能安装了错误版本的机器学习组件。 Launchpad 检测到版本不匹配时,它将关闭并创建转储文件。
若要避免此问题,请确保安装与服务器实例处于相同修补程序级别的任何新功能。
错误的升级方法:
- 安装不带 R Services 的 SQL Server 2016。
- 升级 SQL Server 2016 累积更新 2。
- 使用 RTM 媒体安装 R Services(数据库内)。
正确的升级方法:
- 安装不带 R Services 的 SQL Server 2016。
- 将 SQL Server 2016 升级到所需的补丁程序级别。 例如,先安装 Service Pack 1,然后再安装累积更新 2。
- 若要以正确的补丁程序级别添加功能,请再次运行 SP1 和 CU2 安装程序,然后选择“R Services (数据库内)”。
如果需要 8dot3 表示法,Launchpad 无法启动
注意
在较早的系统上,如果有 8dot3 表示法要求,Launchpad 可能无法启动。 以后版本将消除此要求。 SQL Server 2016 R Services 客户应安装以下之一:
- SQL Server 2016 SP1 和 CU1:SQL Server 累积更新 1。
- SQL Server 2016 RTM、累积更新 3 和可按需提供的修补程序。
为了与 R 兼容,SQL Server 2016 R Services(数据库内)要求安装了该功能的驱动器支持使用“8dot3 表示法”创建短文件名 。 8\.3 文件名也称作“短文件名”,用于实现与之前的旧版 Microsoft Windows 或者作为一个长文件名的备用文件名 。
如果安装 R 的卷不支持短文件名,则从 SQL Server 启动 R 的进程可能找不到正确的可执行文件,且 Launchpad 将不会启动。
解决方法之一是应在安装了 SQL Server 和 R Services 的卷上启用 8dot3 表示法。 然后,必须提供 R Services 配置文件中工作目录的短名称。
若要启用 8dot3 表示法,请运行包含 8dot3name 参数的 fsutil 实用程序,操作步骤如下所述:fsutil 8dot3name 。
启用 8dot3 表示法后,打开 RLauncher.config 文件并记下属性
WORKING_DIRECTORY
。 有关如何查找此文件的信息,请参阅机器学习疑难解答的数据收集。使用包含 file 参数的 fsutil 实用程序,指定在 WORKING_DIRECTORY 中指定的文件夹的短文件路径 。
编辑配置文件,指定在 WORKING_DIRECTORY 属性中输入的相同工作目录。 也可以指定一个不同的工作目录并选择一个已经与 8dot3 表示法兼容的现有路径。