Используемая память не освобождается после экспорта SQL BULK Insert /BCP

Я создал очень основную таблицу 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 Gig Bulk Insert

    BULK
    INSERT TickData
    FROM 
    'C:\SUMO.csv'
    GO

Затем использование RAM для SQL-сервера пошло Skyrocking, съедая ~ 30Go ОЗУ:

введите описание изображения здесь>> </p>

<p> <img src =

10 голосов | спросил Mehdi LAMRANI 23 J000000Monday12 2012, 16:10:24

3 ответа


12

Это нормальное поведение SQL Server для размещения как можно большего количества памяти в пуле буферов. Базы данных работают лучше всего с большим количеством буфера. Если вы хотите изменить поведение, вы можете установить настройку максимальной памяти сервера . Некоторое хорошее фоновое чтение на этом здесь.

ответил Matt Whitfield 23 J000000Monday12 2012, 16:14:32
7

Если вы действительно хотите, чтобы ОС вернула память с SQL Server, возьмите большой файл объемом 20 ГБ и скопируйте его по сети. SQL Server освободит память, поскольку она нуждается в ней. Но я буду наблюдать за множеством счетчиков производительности, пока это происходит, и посмотрите, как изменяется производительность вашего BULK INSERT, если вы запустите его снова, пока копия идет или сразу после.

Если вы хотите сделать это вручную, вы должны установить нижний предел для максимальной памяти сервера SQL Server и перезапустить службу. Теперь SQL Server не будет использовать 28 ГБ, даже если ему это нужно. Но это, похоже, искусственно ограничивает SQL Server.

То, что вы, похоже, ожидаете, - это более гибкое поведение, когда вы можете иметь свободную часть памяти времени. Для чего? Является ли это сокращением файла базы данных для освобождения дискового пространства, которое вы не можете использовать для других целей, потому что файл базы данных будет расти снова?

Забавно, если вы введете поиск Google «почему не SQL Server», наиболее распространенным автозаполнением является «релиз-память».

ответил Aaron Bertrand 23 J000000Monday12 2012, 17:27:28
4

Это, к сожалению, по дизайну, пожалуйста, обратитесь к этому сообщению. Однако в этом сообщении он дает вам некоторую инструкцию о том, как управлять им.

https://serverfault.com/questions/251832/sql-server -bulk-вставка-физическая память, проблема

Редактирование распределения памяти

Память не freed, потому что она выделяет память так же, как приложение .NET. Поскольку выделение памяти дорого, оно будет удерживаться до этого выделения, если ОС не запросит его. Но, бойтесь, если ОС хочет, чтобы память получала его, как в .NET-приложении.

ответил Mike Perrenoud 23 J000000Monday12 2012, 16:14:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132