Я створив дуже основну таблицю 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-сервера перейшло на Skyrocking, з’їдаючи ~ 30Go оперативної пам’яті:
Я вважаю за краще це ненормальне поведінка, і щоб уникнути цього, можна вжити заходів.
EDIT:
Гаразд, це, мабуть, поведінка за замовчуванням. Справедливо.
Однак чому пам’ять не звільняється довго після завершення масової вставки?
Кілька додаткових міркувань:
Що стосується коментарів щодо SQL-сервера, що звільняє пам’ять, коли ОС йому "розповідає", мій практичний досвід роботи на 24-ядерному сервері 32 Gb Xeon доводить, що це неточно: Щойно екстракт BCP-Voracious закінчується У мене є пул .Net Екземпляри мого додатка для обробки даних, яким потрібно обробляти видобуті дані, і їм залишається задихатися / боротися, щоб поділитися рештою пам’яті, щоб спробувати виконати свої завдання, які займають набагато більше часу, ніж SQL Server повернутий вимкнено, а пам'ять доступна для всіх програм, якими можна ділитися. Мені потрібно зупинити агент SQL Server, щоб все пройшло безперебійно і не допускати збоїв додатків для Articiallt. Щодо штучного обмеження / обмеження жорстокої пам'яті, якщо вільна пам'ять доступна, чому б не використати його? В ідеалі, скоріше динамічно налаштовуватися на те, щоб адаптуватися до наявного, а не просто насильно обмежуватись "випадковим чином". Але я гадаю, що це задум, тому справа закрита в останньому питанні.