Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
При выполнении некоего скрипта, sql сервер бывает использует много оперативной памяти. Можно ли после выполнения скрипта, как-то очистить неиспользуемые ресурсы с помощью t-sql? У меня получается почистить только с помощью перезапуска сервиса SQL Server.
16 мар 12, 16:08    [12261632]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3637
А когда ему понадобится, опять отдавать ?
Если Вы, такой жадный, и не хотите давать бедному серверу много памяти, ограничите ее в настройках.
16 мар 12, 16:16    [12261715]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
я думал, может таким образом можно ускорить обработку запросов
16 мар 12, 16:19    [12261748]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
выполнил одну хранимую процедуру, почистил память, потом выполнил другую - или это не ускорит??
16 мар 12, 16:20    [12261763]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3637
Dmitry_Minsk
выполнил одну хранимую процедуру, почистил память, потом выполнил другую - или это не ускорит??


У Вас нехватка памяти сильная ? То что Вы бы почистили, сразу будет использоваться другими системами ?

Ведь если серверу не дать памяти, которое ему требуется, то эффект будет прямо противоположный ожидаемому.

Какая Ваша цель ? что бы было много свободной памяти или что бы ее другие системы использовали ?
16 мар 12, 16:27    [12261854]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
1. Если мне нужно выполнить например 2 хранимых процедуры, одну за другой. Каждая из них требует больших ресурсов. Будет ли выигрыш в производительности, если мы почистим память после вызова 1-ой хранимой процедуры?
2. Память неплохо было бы освободить для других программ, когда, например, нужно выполнить раз в день требующую много ресурсов скрипт.

Вопрос в том, если ли средства t-sql почистить память или нет?
16 мар 12, 16:38    [12261991]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitry_Minsk
выполнил одну хранимую процедуру, почистил память, потом выполнил другую - или это не ускорит??

Ага. Вернул память оп.системе. Через пару минут попросил снова. А оп.система в ответ - а вот нету памяти.
16 мар 12, 16:45    [12262076]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitry_Minsk
Вопрос в том, если ли средства t-sql почистить память или нет?

Опрелитесь с понятиями сначала.
Вернуть память оп.системе - это вовсе не "почистить" ее
16 мар 12, 16:46    [12262094]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
Извиняйте, я имел ввиду вернуть системе.
16 мар 12, 16:49    [12262125]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitry_Minsk
Извиняйте, я имел ввиду вернуть системе.

При динамическом выделении памяти MSSQL вернет свобную для него память оп.системе, если последняя обратится с таким запросом.
16 мар 12, 16:51    [12262143]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Ozerov
Member

Откуда: Москва
Сообщений: 3637
Ну если так хотите, хотя я все же уверен, что Ваш подход методологически не верен.

перед запуском скрипта выполняем

EXEC sys.sp_configure N'max server memory (MB)', N'470000'
GO
RECONFIGURE WITH OVERRIDE
GO


Ну там сами определите максимальное кол-во памяти
После отработки, опять тот же скрипт, но уже с нижним пределом памяти :)
16 мар 12, 16:52    [12262150]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
То есть выходит на t-sql такого сделать нельзя?
16 мар 12, 16:54    [12262161]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
Ozerov
Ну если так хотите, хотя я все же уверен, что Ваш подход методологически не верен.

перед запуском скрипта выполняем

EXEC sys.sp_configure N'max server memory (MB)', N'470000'
GO
RECONFIGURE WITH OVERRIDE
GO


Ну там сами определите максимальное кол-во памяти
После отработки, опять тот же скрипт, но уже с нижним пределом памяти :)


Так нет, это же не то, так мы просто ограничиваем количество памяти для использования, а я хотел бы вернуть системе ту память, которая уже не нужна.
16 мар 12, 16:56    [12262184]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
Dmitry_Minsk
То есть выходит на t-sql такого сделать нельзя?

Не то что нельзя, не нужно этого делать.
16 мар 12, 16:57    [12262197]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
хотя нет все правильно
16 мар 12, 16:57    [12262198]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
Ну ясно, спасибо за разъяснение
16 мар 12, 16:59    [12262208]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35390
Блог
Dmitry_Minsk
Так нет, это же не то, так мы просто ограничиваем количество памяти для использования, а я хотел бы вернуть системе ту память, которая уже не нужна.


попробуйте так
EXEC sys.sp_configure N'max server memory (MB)', N'2048'
GO
RECONFIGURE WITH OVERRIDE

EXEC sys.sp_configure N'max server memory (MB)', N'20480'
GO
RECONFIGURE WITH OVERRIDE


но если вы хотите что-то оптимизировать, то лучше посмотрите в сторону индексов, или, еще лучше, ничего не трогайте))
16 мар 12, 17:01    [12262227]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
Кстати, таким способом память не возвращается системе
16 мар 12, 17:06    [12262274]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
Вопрос был - можно или нет, а не в том зачем это нужно
16 мар 12, 17:07    [12262288]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Dmitry_Minsk,

обычно при написании ПО не сильно заморачиваются придумыванием механизмов, которые нафиг не нужны. Так что прежде, чем упираться в вопрос "как", попытайтесь ответить на вопос "зачем".
16 мар 12, 17:50    [12262629]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Dmitry_Minsk
Member

Откуда:
Сообщений: 112
Думал, может есть аналог принудительного сбора мусора, как в .net. Но видимо такого нету.
16 мар 12, 18:52    [12262961]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Dmitry_Minsk
Думал, может есть аналог принудительного сбора мусора, как в .net. Но видимо такого нету.
Есть, но он запускается, когда от ОС приходит запрос на освобождение памяти. Пока память никому не нужна, ее можно не освобождать, потому что ее освобождение - это лишняя нагрузка на процессор и контроллер памяти.
16 мар 12, 18:59    [12262996]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Dmitry_Minsk
Думал, может есть аналог принудительного сбора мусора, как в .net. Но видимо такого нету.

Вам же уже сказали
16 мар 12, 20:38    [12263431]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Dmitry_Minsk
Ozerov
Ну если так хотите, хотя я все же уверен, что Ваш подход методологически не верен.

перед запуском скрипта выполняем

EXEC sys.sp_configure N'max server memory (MB)', N'470000'
GO
RECONFIGURE WITH OVERRIDE
GO


Ну там сами определите максимальное кол-во памяти
После отработки, опять тот же скрипт, но уже с нижним пределом памяти :)


Так нет, это же не то, так мы просто ограничиваем количество памяти для использования, а я хотел бы вернуть системе ту память, которая уже не нужна.

Вы можете дать определение что такое "память, которая уже не нужна" серверу? Боюсь что нет. А если сможете, то значит слабо представляете себе зачем вообще серверу память. Больше всего память расходуется на кэш данных + кэш запросов. Вы можете со 100% уверенностью сказать какие именно таблицы можно выкинуть из кэша потому что они в ближайшее время не понадобятся? Это вам не .Net приложение, где если объект удалили, то через какое то время сборщик мусора очистит память и вернет её системе.
А если вас очень таки интересует вопрос, как, то вам уже предложили вариант, его еще можно дополнить вот так:

DBCC DROPCLEANBUFFERS
EXEC sp_configure N'max server memory (MB)', N'1024'
GO
RECONFIGURE WITH OVERRIDE

Наслаждайтесь. Кэши данных и запросов будут очищены. Почти гарантированно вернет память системе. Можете хоть после каждой процедуры вызывать. Для, так сказать, стопроцентных тормозов и убиения дисковой подсистемы.
16 мар 12, 21:21    [12263614]     Ответить | Цитировать Сообщить модератору
 Re: Как почистить ненужную память?  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Dmitry_Minsk
Думал, может есть аналог принудительного сбора мусора, как в .net. Но видимо такого нету.

На самом деле и сборщик мусора не отдает операционной системе память сразу, а только по лишь по запросу. Сборщик мусора всего лишь вычищает кеш приложения для того, что бы оно могло использовать его повторно. Перечитайте Рихтера! Ну или тут

Основы сборки мусора
В среде CLR сборщик мусора выполняет функции автоматического диспетчера памяти.Это предоставляет следующие преимущества:
>Позволяет разрабатывать приложение без необходимости освобождать память.
>Эффективно выделяет память для объектов в управляемой куче.
>Уничтожает объекты, которые больше не используются, очищает их память и сохраняет память доступной для будущих распределений.Содержимое создаваемых управляемых объектов автоматически оказывается очищенным, чтобы их конструкторам не было нужно инициализировать каждое поле данных.
>Обеспечивает безопасность памяти, гарантируя, что объект не сможет использовать содержимое другого объекта.

И заметьте, ни слова о возврате памяти ОС, пока та не запросит.
18 мар 12, 10:59    [12268466]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить