1つのデータベースを別のデータベースに再同期させるために生成された大きな挿入ステートメント(約30メガ)のバッチを実行しようとしています。私は8ギガのメモリを搭載したWin 7マシンでSQL Server 2008 R2 64ビットを実行しています。大きなバッチのインサートを実行しているときにメモリ不足を回避するためのオプションは何ですか?
SSMSでクエリを実行すると、「クエリはエラーが発生しました」と表示され、出力メッセージは表示されません。 SSMSの外でそれを実行しようとすると、メモリ不足のエラーであることがわかりました。実際には、エラーが発生しても、SQL Serverサービスが約5.5ギガバイトのメモリを使用していることがわかりました。
SQLを実行するための調整が可能なパラメータはありますか?別の方法として、クエリをバッチに分割して実行するプログラムを作成する方法があります。興味深いことに、これは挿入を含む大きなクエリでのみ発生するようです。更新を含む大規模なクエリは正常に動作するようです。おそらく、これはトランザクションログに書き込まれるためです。ただし、クエリは一連の多数の挿入として出力されますが、これは変更できません。
とにかく、これを修正するために調整できるSQL Serverの設定はありますか?私は誰でもできるアドバイスを感謝します。
編集:お返事ありがとうございます、bluefooted。私の同僚と私は、メッセージのないエラーを最初に見たときに同じ印象を与えました.SMSのメモリが不足しているように見えました。しかし、それ以上の検査では、SQL Serverのように見えます。私に説明させてください。 Red GateのSQL比較SDKをVisual Studioで使用して差分クエリを生成し、条件付きで特定のステートメントを実行して、特定のルールに従って2つのデータベースを収束させます。したがって、この問題が発生した後、スクリプトを実行するために、含まれているExecutorオブジェクトを使用しました。
System.Data.SqlClient.SqlException occurred
Message=There is insufficient system memory in resource pool 'internal' to run this query.
Source=.Net SqlClient Data Provider
ErrorCode=-2146232060
Class=17
LineNumber=79180
Number=701
Procedure=""
Server=QA1
State=123
StackTrace:
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at RedGate.Shared.SQL.ExecutionBlock.BlockExecutor.ExecuteBlock(ExecutionBlock block, String server, String database, Boolean integratedSecurity, String userName, String password)
at IO.Practiceware.DbSync.Csharp.Program.RunScript(String path, String server, String database)
InnerException:
私はこれで作ることができるかわからないが、私のより多くの知識のある同僚は、それは基本的に自身がメモリが不足しているSQL Serverを意味し、言った:私たちは、次のエラーを受け取りました。私はあなたがこれについて持っているすべての洞察に感謝します。
メモリ不足のエラーは何ですか?通常、私はSSMSのような問題を抱えていて、SQL Serverではなくメモリが不足しています。あなたが「SSMSの外で」それを実行したと言うと、どのようにそれを実行しましたか? –