【发布时间】:2016-05-28 13:53:43
【问题描述】:
我在查询100M记录后运行了一些R代码,进程运行超过6小时后出现以下错误:
Msg 39004, Level 16, State 19, Line 300
A 'R' script error occurred during execution of 'sp_execute_external_script'
with HRESULT 0x80004005.
HRESULT 0x80004005 在 Windows 中似乎与连接、权限或“未指定”错误相关联。
我通过登录我的 R 代码知道该进程根本不会到达 R 脚本。我还知道整个过程在 4 分钟后完成,记录数量较少,例如 1M。这让我相信这是一个缩放问题或数据的一些问题,而不是我的 R 代码中的错误。由于专有原因,我没有包含 R 代码或完整查询。
但是,如果出现这种情况,我预计磁盘或内存错误会显示 0x80004004 Out of memory 错误。
我在 SQL ERRORLOG 中注意到的一条线索如下:
SQL Server received abort message and abort execution for major error : 18
and minor error : 42
然而,这个日志行的时间与进程的中断并不重合,尽管它确实发生在它开始之后。不幸的是,网上关于“重大错误 18”的信息很少。
从 SSMS 运行时的 SQL 跟踪显示客户端每 6 分钟左右登录和注销一次,但我只能假设这是正常的保活行为。
经过净化的 sp_execute_external_script 调用:
EXEC sp_execute_external_script
@language = N'R'
, @script = N'#We never get here
#returns name of output data file'
, @input_data_1 = N'SELECT TOP 100000000 FROM DATA'
, @input_data_1_name = N'x'
, @output_data_1_name = N'output_file_df'
WITH RESULT SETS ((output_file varchar(100) not null))
服务器规格: 8核 256 GB 内存 SQL Server 2016 CTP 3
任何想法、建议或调试提示将不胜感激!
更新: 在 rlauncher.config 中设置 TRACE_LEVEL=3 以打开更高级别的日志记录并重新运行该过程。日志显示了一个清理进程,该进程在 6.5 小时后整个进程失败时运行,删除了会话文件。
[2016-05-30 01:35:34.419][00002070][00001EC4][Info] SQLSatellite_LaunchSatellite(1, A187BC64-C349-410B-861E-BFDC714C8017, 1, 49232, nullptr) 完成:00000000
[2016-05-30 01:35:34.420][00002070][00001EC4][信息]
[2016-05-30 08:04:02.443][00002070][00001EC4][Info] > SQLSatellite_LauncherCleanUp,dllmain.cpp,309
[2016-05-30 08:04:07.443][00002070][00001EC4][警告] 会话 A187BC64-C349-410B-861E-BFDC714C8017 清理等待失败,出现 258 和错误 0
[2016-05-30 08:04:07.444][00002070][00001EC4][Info] Session(A187BC64-C349-410B-861E-BFDC714C8017) 记录了 2 个输出文件
[2016-05-30 08:04:07.444][00002070][00001EC4][警告] TryDeleteSingleFile(C:\PROGRA~1\MICROS~1\MSSQL1~1.MSS\MSSQL\EXTENS~1\MSSQLSERVER06 \A187BC64-C349-410B-861E-BFDC714C8017\Rscript1878455a2528) 失败,32
[2016-05-30 08:04:07.445][00002070][00001EC4][警告] TryDeleteSingleDirectory(C:\PROGRA~1\MICROS~1\MSSQL1~1.MSS\MSSQL\EXTENS~1\MSSQLSERVER06 \A187BC64-C349-410B-861E-BFDC714C8017) 失败,32
[2016-05-30 08:04:08.446][00002070][00001EC4][Info] 会话 A187BC64-C349-410B-861E-BFDC714C8017 从 MSSQLSERVER06 用户中删除
[2016-05-30 08:04:08.447][00002070][00001EC4][Info] SQLSatellite_LauncherCleanUp(A187BC64-C349-410B-861E-BFDC714C8017) 完成:00000000
看来,让我的长期运行进程继续下去的唯一方法是: a) 延长作业清理等待时间以允许作业完成 b) 禁用作业清理进程
到目前为止,我一直无法在 MSSQLLaunchpad 服务中找到设置作业清理等待时间的值。 虽然 rlauncher.config 中存在 JOB_CLEANUP_ON_EXIT 标志,但将其设置为 0 无效。该服务似乎在重新启动时将其重置为 1。
再次感谢任何建议或帮助!
【问题讨论】:
标签: sql-server r sql-server-2016 microsoft-r bigdata