2016-05-28 2 views
2

私は100Mレコードを照会した後、いくつかのRコードを実行し、プロセスが6時間にわたって実行した後、次のエラーを取得:のSQL Server 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

私のRコードには、プロセスがRスクリプトに全く届かないということがわかっています。私はまた、プロシージャ全体が、より少ない数のレコード、たとえば1Mで4分後に完了することも知っています。これは、私のRコードのバグではなく、スケーリングの問題か、データの問題かと思います。私は所有権の理由のためにRコードまたは完全な質問を含んでいません。

しかし、私はディスクまたはメモリのエラー0x80004004メモリ不足のエラーを表示することを期待します。私は、SQLエラーログに気づい

一つの手がかりは以下の通りです:

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ギガバイトのRAM のSQL Server 2016 CTP 3

任意のアイデア、提案やデバッグのヒントをいただければ幸いです!

UPDATE:rlauncher.config中= 3 設定TRACE_LEVELロギングと再実行プロセスのより高いレベルをオンにします。ログには、6.5時間後にプロセス全体が失敗したときにセッションファイルを削除して実行したクリーンアッププロセスが表示されます。

[2016年5月30日01:35:34.419] [00002070] [00001EC4] [詳細] SQLSatellite_LaunchSatellite(1、A187BC64-C349-410B-861E-BFDC714C8017、1、49232、nullptr)が完成:00000000

[2016年5月30日01:35:34.420] [00002070] [00001EC4] [詳細] < SQLSatellite_LaunchSatellite、dllmain.cpp、223

[2016年5月30日08:04:02.443] [00002070] [00001EC4] [情報]> SQLSatellite_LauncherCleanUp、dllmain.cpp、309

[2016年5月30日08:04:07.443] [00002070] [00001EC4] [警告]セッションA187BC64-C349-410B-861E-BFDC7 14C8017のクリーンアップは258とエラーで失敗しましたウエイト0

[2016年5月30日08:04:07.444] [00002070]は[00001EC4] [情報]セッション(A187BC64-C349-410B-861E-BFDC714C8017)は2出力をログに記録しましたTryDeleteSingleFile(C:\ PROGRA〜1 \ MICROS〜1 \ MSSQL1〜1)。[00002070] [00002070] [警告] TryDeleteSingleFile(C:\ PROGRA〜1 \ MICROS〜1 \ MSSQL1〜1)。MSS \ MSSQL \ EXTENS〜1 \ MSSQLSERVER06 \ A187BC64-C349-410B-861E-BFDC714C8017 \ Rscript1878455a2528)は32

で失敗しました[2016年5月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年5月30日08:04:08.446] [00002070] [00001EC4] [情報]セッションA187BC64-C349-410B-861E-BFDC714C8017がMSSQLSERVER06ユーザー

[2016年5月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にリセットされているようです。

再度、ご提案やご支援をいただければ幸いです。

答えて

1

既定では、SQL Serverは、Rスクリプトの実行を開始する前に、すべてのデータをデータフレームとしてRメモリに読み込みます。スクリプトが1M行で動作し、100M行で開始できないという事実に基づいて、これは潜在的にメモリ不足エラーである可能性があります。 (データサイズを縮小/マシン上のメモリを増やす以外の)メモリの問題を解決するには、sys.resource_governor_external_resource_pools max_memory_percent設定を使用してRプロセス実行のためにこれらのソリューションの1つの

  1. 増やしメモリ割り当てを試すことができます。既定では、SQL ServerはRプロセスの実行をメモリの20%に制限します。全てのデータをメモリにロードするのではなく、
  2. Streaming execution for R scriptである。このパラメータは、Rスクリプトの出力が行セット全体の読み取りまたは参照に依存しない場合にのみ使用できます。

Rスクリプトの実行を安全に無視した後で、おそらくあなたが見ている障害の根本原因ではないと思われるRLauncher.logの警告が発生しました。

+0

ご回答をお寄せいただきありがとうございますが、私は同意しません。メモリ不足エラーは、 "メモリの割り当てまたは再割り当てに失敗しました"というエラー0x80004004を返します。私も256 GBのメモリを持っていて、そのデータはわずか11 GBです。私は既に利用可能なメモリの50%をRに与えました。ストリーミングの実行は不可能です。セット全体に手段が必要なためです。 6.5時間の実行後のクリーンアップエラーは、スクリプトの失敗とまったく同じです。 – ryang

0

SQLでこの問題を解決できないため、処理を中断していたSQL Server Launchpadサービスを回避し、R RODBCライブラリを使用してSQLからデータを取り出しました。プルには3時間を要しました(sp_execute_external_procedureを使用すると6時間以上かかりません)。

これは、SQLランチパッドサービスに関係する可能性があり、メモリが問題ではないことを示唆しています。

0

SQL Server 2016 RTMでシナリオを試してください。 CTP3以降、多くの機能とパフォーマンスの修正が行われています。

SQL Server 2016 RTMチェックアウトの入手方法の詳細については、SQL Server 2016 is generally available today blogpostを参照してください。

+0

ありがとう、私はそれを試してみましょう。これで問題が解決した場合は、私はまだRODBCパッケージでRにデータをプルするために最小6.5時間で探しています、私は2で同じことをしました。 – ryang

0

SQL Server 2016 RTM-CU1では、ほぼ同じ問題が発生しました。クエリが0x80004005の代わりにエラー0x80004004で失敗しました。そして、10,000,000レコードからは失敗しましたが、それは16 GBのメモリしか持たないということです。

私の代わりに「*」のフィールドリストを使って、その周りました。フィールドリストは、データソース(私の場合はかなり複雑なビュー)からのすべてのフィールドが含まれている場合でも、フィールドリストをフィーチャーしたクエリは、常に「... FROM TOPのx *を選択」しながら、常に成功すると、いくつかの大きなxに対して失敗します。

0

は私が同様のエラー(0x80004004)を持っていたし、問題が列の1の行の1は「非常に」の特殊文字が含まれていることだった(私が言っている「非常に」他の特殊文字がしたので、このエラーは発生しません)。

私は 'FolkelにåネットTelefinans' 'ネットTelefinans Folkel ' とを交換したときに、問題が去っていきましたように。あなたのケースでは

は、おそらく最後の99Mの行の値の少なくとも1つは、その文字のようなものが含まれており、あなたはそれを交換する必要があります。私はマイクロソフトがいつかこの問題を解決することを願っています。

関連する問題