Я запустить некоторый R код после запроса 100M записей и получить следующее сообщение об ошибке после процесса проходит в течение более 6 часов:SQL сервер 2016 R Услуга: sp_execute_external_script возвращает 0x80004005 ошибки
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 с подключением, разрешениями или ошибкой «Unspecified».
Я знаю из регистрации в моем R-коде, что процесс никогда не достигает сценария R вообще. Я также знаю, что вся процедура завершается через 4 минуты на меньшее количество записей, например, 1M. Это заставляет меня думать, что это проблема масштабирования или проблема с данными, а не ошибка в моем R-коде. Я не включил код R или полный запрос по причинам собственности.
Однако, я бы ожидал, что ошибка диска или памяти отобразит ошибку памяти 0x80004004, если это так.
Один ключ я заметил в SQL ERRORLOG является следующее:
SQL Server received abort message and abort execution for major error : 18
and minor error : 42
Однако время этой строки журнала не совпадает с прерыванием процесса, хотя это происходит после того, как она началась. К сожалению, в Интернете мало что известно о «большой ошибке 18».
SQL Trace при запуске из SSMS показывает, как клиент регистрируется и выходит из системы каждые 6 минут или около того, но я могу только предположить, что это нормальное поведение в режиме keepalive.
продезинфицировать 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 RAM SQL Server 2016 CTP 3
Любые идеи, предложения или отладочных подсказок было бы весьма признателен!
ОБНОВЛЕНИЕ: Набор уровень_трассировки = 3 в rlauncher.config, чтобы включить более высокий уровень регистрации и повторно запускали процесс. Журнал показывает процесс очистки, который выполнялся, удаляя файлы сеанса, в то время, когда весь процесс завершился с ошибкой через 6,5 часов.
[2016-05-30 01: 35: 34,419] [00002070] [00001EC4] [Информация] SQLSatellite_LaunchSatellite (1, A187BC64-C349-410B-861E-BFDC714C8017, 1, 49232, nullptr) завершено: 00000000
[2016-05-30 01: 35: 34,420] [00002070] [00001EC4] [Info] < SQLSatellite_LaunchSatellite, dllmain.cpp, 223
[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-BFDC7 14C8017 очистки ждать не удалось с 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] [Warning] 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 ] [Информация] SQLSatellite_LauncherCleanUp (A187BC64-C349-410B-861E-BFDC714C8017) завершено: 00000000
Похоже, что единственный способ разрешить мой длительный процесс, чтобы продолжить это: а) Продлить время работы Cleanup ожидания, чтобы задание закончить б) Отключить процесс очистки Работа
Я до сих пор не удалось найти значение, которое устанавливает время ожидания очистки работы в службе MSSQLLaunchpad. Хотя в rlauncher.config существует флаг JOB_CLEANUP_ON_EXIT, установка его в 0 не влияет. Кажется, что служба перезагружает его до 1 при перезапуске.
Опять же, любые предложения или помощь были бы высоко оценены!
Спасибо за ваш ответ, но я не согласен. Ошибка вне памяти вернет ошибку 0x80004004 «Не удалось выделить или перераспределить память». У меня также есть 256 ГБ памяти, а данные - всего 11 ГБ. Я уже предоставил R 50% доступной памяти. Потоковое исполнение невозможно, потому что мне нужны средства во всем наборе. Ошибки очистки после 6,5 часов выполнения точно совпадают с ошибкой сценария. – ryang