Ich habe eine sehr einfache SQL-Tabelle wie folgt erstellt
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]
Ich habe dann einen 3 Gig Bulk Insert durchgeführt
BULK
INSERT TickData
FROM
'C:\SUMO.csv'
GO
Dann ging die RAM-Nutzung für SQL Server in die Höhe und verbrauchte ~ 30Go RAM:
Ich denke lieber, dass dies ein abnormales Verhalten ist und dass Maßnahmen ergriffen werden können, um dies zu vermeiden.
EDIT:
Ok, dies scheint das Standardverhalten zu sein. Meinetwegen.
Doch warum nicht Speicher freigegeben wurde lange nach dem Bulk Insert ist abgeschlossen?
Ein paar zusätzliche Überlegungen:
Nach den Kommentaren zum SQL Server, der den Speicher freigibt, wenn er vom Betriebssystem "dazu aufgefordert" wird, beweist meine praktische Erfahrung auf einem 24-Core-Xeon-Server mit 32 Gbit, dass dies ungenau ist: Sobald ein speicherintensiver BCP-Extrakt beendet ist Ich habe einen Pool von .NET-Instanzen meiner Datenverarbeitungsanwendung, die die extrahierten Daten verarbeiten müssen, und sie müssen ersticken / kämpfen, um den verbleibenden Speicher gemeinsam zu nutzen, um zu versuchen, ihre Jobs auszuführen. Dies dauert länger als beim Einschalten von SQL Server Aus und Speicher steht allen Anwendungen zur gemeinsamen Nutzung zur Verfügung. Ich muss den SQL Server-Agenten stoppen, damit alles reibungslos funktioniert und Apps nicht für Articiallt-verursachte OutOfMemmroy-Ausnahmen abstürzen. In Bezug auf künstliche Brutal Memory Capping / Limitation, wenn freier Speicher verfügbar ist, warum nicht benutzen? Idealerweise wäre es eher dinamisch eingestellt, sich an das anzupassen, was verfügbar ist, als nur "zufällig" gewaltsam eingeschränkt zu werden. Aber ich denke, das ist beabsichtigt, also ist der Fall in diesem letzten Punkt abgeschlossen.