次のように非常に基本的なSQLテーブルを作成しました
CREATE TABLE [dbo].[TickData](
[Date] [varchar](12) NULL,
[Time] [varchar](12) NOT NULL,
[Symbol] [varchar](12) NOT NULL,
[Side] [varchar](2) NOT NULL,
[Depth] [varchar](2) NOT NULL,
[Quote] [varchar](12) NOT NULL,
[Size] [varchar](18) NOT NULL
) ON [PRIMARY]
次に、3ギガの一括挿入を実行しました
BULK
INSERT TickData
FROM
'C:\SUMO.csv'
GO
次に、SQLサーバーのRAM使用量はSkyrockingになり、最大30GoのRAMを消費しました。
これは異常な動作であると考えるのが好きで、これを回避するためにそのアクションを実行できます。
編集:
OK、これはデフォルトの動作のようです。けっこうだ。
しかし、なぜ一括挿入が完了した後もメモリが解放されないのですか?
いくつかの特別な考慮事項:
SQLサーバーがOSから「伝えられた」ときにメモリを解放することに関するコメントのように、24コア32 Gb Xeonサーバーでの実地経験では、これが不正確であることが証明されています。抽出されたデータを処理する必要があるデータ処理アプリケーションの.Netインスタンスのプールがあり、残りのメモリを共有してジョブを実行しようとするため、窒息状態のままになっています。SQLServerがオンになったときよりも時間がかかります。オフにすると、すべてのアプリケーションでメモリを共有できます。SQL Serverエージェントを停止して、すべてがスムーズに進み、Articialltが原因でOutOfMemmroy Exceptionが発生してアプリがクラッシュしないようにする必要があります。人工的な残忍なメモリキャッピング/制限に関して、空きメモリが利用可能な場合、なぜそれを使わないのですか?理想的には、「ランダム」に強制的に制限されるだけでなく、利用可能なものに順応するように動的に設定されるのが理想的です。しかし、これは仕様によるものであるため、この最後の点でケースはクローズされました。