1

SQL Server 2008 R2 Express で「大きな」スクリプトを実行する必要がありますが、次のエラーで失敗します

このクエリを実行するには、リソース プール '内部' にシステム メモリが不足しています。

スクリプトはディスクに保存された約 10MB で、約 54000 の最上位ステートメント (挿入/削除/更新) を含み、約 5000 の変数 (型BIGINT) を宣言します。

SQL Server 2008 R2 Express 64 ビット 10.5.1746 を実行しています。VM に 3 GB、SQL Server に 1 GB、クエリごとに 512 KB の最小メモリが割り当てられています。の結果はDBCC MEMORYSTATUSこのリンクにあります。

このスクリプトは、SQL ステートメント (データのみ、スキーマなし) としてエクスポートされた (軽量の) 実稼働データベースの単なる復元です。

これが不可能な場合、SQL Server がそのような基本的なシナリオを処理できないことにショックを受けます。この同等のシナリオを Firebird と Sqlite でテストしたところ、問題なく動作しました。(そしてそれらはオープンソース製品です)。

: 最初に宣言された変数がスクリプトの最後で参照されるため、スクリプトを分割することはできません。

:これを「重複」として急いでフラグを立てる前に、他の同様のスレッドが「SQL Server 2008 で非常に大きなスクリプトを実行する方法」という特定の問題に対処していないことに注意してください。

4

2 に答える 2

0

これまでに機能した唯一のことは、SQL Server 2012 Express へのアップグレードです。クエリの実行には数分かかりましたが、エラーなく完全に実行されました。

于 2013-05-15T12:28:41.413 に答える
0

SQL Server Express は、使用できるメモリの量に制限があります。そのメモリの一部のみをクエリの実行に使用できます。プランに必要なメモリを減らし、クエリの実行により多くのメモリを残す可能性があるため、データベースに強制パラメータ化を設定してみてください (特定のクエリによって異なります)。

最適なオプションは、より多くのメモリをサポートする SQL Server のエディションを使用することです。Developer Edition は手頃な価格ですが、本番環境では使用できません。標準版は、次善の策です。

于 2013-05-15T04:09:05.877 に答える