私はラップトップでSQL Server 2014を実行しており、Visual Studioからビデオゲームまで、インストールされている他の多数のアプリケーションと共に実行しています。
これは明らかに本番サーバーではなく、開発とデバッグのみを目的としています。
数十のテーブルとビューを備えた、かなり小さくシンプルなデータベースをスクリプトで作成しました。テスト用に挿入したダミーデータは100行未満です。
ある時点で、誤って形成されたクロス結合を使用して、誤って100 GB以上のインデックスを作成しました。このインデックスを作成するクエリは、ノートパソコンのRAMの100%を消費し(16 GB)、すべてのクロールが遅くなったため、クエリが完了するのを待つのではなく、クエリを中止し、すぐにデータベース全体を削除して、このインデックスを作成スクリプトから削除し、データベース全体を再作成しました。
ただし、SQL Server 2014では、クエリが中止されてデータベースが削除された場合でも、その時点から16 GBのRAMをすべて消費し続けました。
そこで、次にラップトップを再起動すると、SQL ServerのRAMの使用量が7GBに減少しました。既存のデータベースの5MBをすべて削除するかどうかに関係なく、それ以降、それはそのままです。
SQL Serverを適切なメモリ消費レベルに戻したいのですが、考えられる原因の調査をどこから始めればよいかわかりません。
これはかなり自由回答式の質問であることはわかっていますが、少しガイダンスを入れてレッグワークを行うことをいとわないのです。
私は自分自身はDBAではないので、トラブルシューティングをどこから始めればいいのかわからない-どうやらGoogleも知らない。 :)
最初に、GUIまたは sp_configure を使用してインスタンスの最大メモリ設定を変更します。
EXEC sp_configure 'max server memory (MB)', 1024
次に、SQL Server構成マネージャーに移動し、インスタンスを停止して再起動します。実際にラップトップを再起動する必要はありません。
これで問題が修正され、インスタンスで1 GBを超えて使用しないようになります。この設定に含まれていないメモリを大量に使用していると確信しています。
SQL Serverは、必要なもののためにメモリを使用することを好みます。それを返すのはあまり得意ではないので、必要な場合を除いて、個人のラップトップの最大メモリ設定をかなり低く保つことをお勧めします。ランダムな小さなクエリなどに1GBの設定を使用し、さらに必要な場合は更新します。もちろん、私のラップトップには合計で6GBのRAMしかありません。
SQL Serverは、このように機能するように構成されています。一度メモリが必要になった場合、再び必要になると想定しています。このメモリを常にオペレーティングシステムに戻し、再度要求するのはコストがかかるので、なぜそれをオペレーティングシステムに戻すのでしょうか。
今のところ最も簡単な解決策は、SQL Serverサービスを再起動することです。これにより、最小限のRAM使用量に戻り、データ/インデックスを再度構築するまで増加しません。
ただし、Krisが上で指摘したように、最大サーバーメモリも設定する必要があります。 16GB未満のもの(申し訳ありませんが、「正しい答え」はありません)。