5

同じデータベースの 2 つのコピーに対して同じアプリを使用すると、.Net アプリケーションのメモリ使用量に大きな違いが生じます。唯一の違いは、シナリオ 1 ではSQL Server 2005 Express- のインスタンスに登録されたデータベースのローカル コピーを使用し、シナリオ 2 では のインスタンスに登録されたデータベースのリモート コピーを使用していることですSQL Server 2008 Enterprise

私の知る限りでは、SQL のパフォーマンスと SQL のメモリ使用量の違いだけが予想されます (Express には 1GB の制限があるため)。

しかし、私が見ているのは、それらの間のメモリ使用量の大きな違い (1GB) です。つまり、SQL Expressほとんどの場合、1GB 以上のメモリを使用するシナリオです。 SQL Expressまた、特に大きなテーブルと大きなクエリでの作業がはるかに遅いようです-しかし、このメモリヒットはSQLで発生し、消費/クライアントアプリケーションでは発生しないと思いますか???

アプリは SQL サーバーを使用して接続しSystem.Data.SqlClient.SqlConnection、頻繁な操作を実行しSqlCommandますSqlBulkCopy

役立つ考えがあれば大歓迎です!

4

1 に答える 1

1

大きなテーブルとクエリでの Express の低速化に関する 2 番目の質問については、Express バージョンが Enterprise バージョンよりも多くのメモリとディスクを消費するため、これは正常です。Enterprise バージョンは、拡張先読みおよびスキャン (別名メリーゴーランド スキャン) と呼ばれる機能を使用しており、大規模なクエリのパフォーマンスに大きな違いがあります。

例えば:

UserA と UserB の両方がSELECT * FROM Customerコマンドを発行し、その結果テーブル スキャンが行われるとします。UserA が最初にコマンドを発行します。UserB は 20 秒後にコマンドを発行します。テーブルには 1 億行 (非常に大きなテーブルです) があり、Enterprise Edition がインストールされていないマシンでスキャンが実行されています。UserA のテーブル スキャンは、テーブルの最初のページで Customer テーブルの読み取りを開始します。20 秒後、UserB のスキャンは、UserA が既に読み取ったページの読み取りを開始しますが、一部のページは既にキャッシュからフラッシュされている可能性があります。場合によっては、このプロセスによって大量のディスク競合が発生し、メモリが消費されます。

Enterprise Edition は、強化された先読みとスキャンを少し異なる方法で実行します。Enterprise Edition 以外のバージョンとは異なり、UserA がSELECT * FROM Customerコマンドを発行すると、Enterprise Edition は Customer テーブルのスキャンを開始します。UserB が 20 秒後に同じコマンドを発行すると、UserB のテーブル スキャンは、UserA が現在読んでいる場所から正確に開始されます。UserA と UserB のクエリは両方とも Customers テーブルの最後のページをほぼ同時に読み取りますが、UserB のスキャンは Customer テーブルの先頭に戻り、UserB がクエリを開始する前にスキャンしたページをスキャンします。このプロセスにより、ディスクの競合とメモリの消費が大幅に減少します。

于 2013-07-04T15:54:03.833 に答える