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

Откуда: С-Петербург
Сообщений: 902
Добрый день.
Столкнулся с такой проблемой: при трудоемких операциях вставки (когда активно пересчитываются индексы), юзается, понятно дело, очень сильно память. Но когда операция уже закончена, то она, память, согласно ТаскМенеджеру, не освобождается ни на грамм. Пока не перезагрузишься.
Ничего не понимаю. Спасите.
AMD 900, 512M. Памяти, конечно, не хватает пока, часто свопится. Но даже когда хватает, картина та же.
24 апр 03, 12:49    [183201]     Ответить | Цитировать Сообщить модератору
 Re: Освобождение памяти  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Но когда операция уже закончена, то она, память, согласно ТаскМенеджеру, не освобождается ни на грамм. Пока не перезагрузишься.

А она должна освобождаться. Если другой задаче памяти не надо, то сервак ее и не отдаст. Использование памяти на автомате стоит.
24 апр 03, 12:56    [183219]     Ответить | Цитировать Сообщить модератору
 Re: Освобождение памяти  [new]
BootMaker
Member

Откуда: С-Петербург
Сообщений: 902
То есть вы хотите сказать, что SQL-сервер как при случае забрал для своих нужд некий кусок памяти, так его и будет держать, что называется, про запас. И менеджер покажет, что этот кусок юзается кем-то. То есть это в порядке вещей?
Сие есть приятная новость, хоть и неожиданная:)
24 апр 03, 13:09    [183256]     Ответить | Цитировать Сообщить модератору
 Re: Освобождение памяти  [new]
JibSkeart
Member

Откуда: Из далекой галактики
Сообщений: 19870
Вроде бы да
там же даже в настройках есть сколько памяти юзать ...
24 апр 03, 13:16    [183270]     Ответить | Цитировать Сообщить модератору
 Re: Освобождение памяти  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
И менеджер покажет, что этот кусок юзается кем-то.

Не кем-то а SQL Serverом

То есть это в порядке вещей?

А то.

Сие есть приятная новость, хоть и неожиданная:)

Ну какая ж новость.

Dynamically Managing Memory on Windows NT and Windows 2000
When running on Microsoft® Windows NT® or Windows® 2000, the default memory management behavior of the SQL Server database engine is not to acquire a specific amount of memory, but to acquire as much memory as it can without generating excess paging I/O. The database engine does this by acquiring as much memory as is available, while leaving enough memory free to prevent the operating system from swapping memory.

When an instance of SQL Server starts, it typically acquires 8 to 12 MB of memory to complete the initialization process. After the instance has finished initializing, it acquires no more memory until users connect to it and start generating a workload. The instance then keeps acquiring memory as required to support the workload. As more users connect and run queries, SQL Server acquires the additional memory required to support the demand. The instance will keep acquiring memory until it reaches its memory allocation target, it will not free any memory until it reaches the lower limit of the target.

To acquire as much memory as possible without generating excess paging I/O, each instance of SQL Server sets a target of acquiring memory until free physical memory on the computer is in the range of 4 MB to 10 MB. This range was chosen because testing has shown that Windows NT and Windows 2000 have minimal memory swapping until the memory allocations equal the available physical memory minus 4 MB. An instance of SQL Server that is processing a heavy workload keeps the free physical memory at the lower end (4 MB) of the range; an instance that is processing a light workload keeps the free memory at the higher end of the range (10 MB).

An instance of SQL Server will vary its target as the workload changes. As more users connect and generate more work, the instance will tend to acquire more memory to keep the available free memory down at the 4 MB limit. As the workload lightens, the instance will adjust its target towards 10 MB of free space, and will free memory to the operating system. Keeping the amount of free space between 10 MB and 4 MB keeps Windows NT or Windows 2000 from paging excessively, while at the same time allowing SQL Server to have the largest buffer cache possible that will not cause extra swapping.

The target memory setting for an instance is related to the demand for pages in the database buffer pool relative to the size of the available pool. At any point in time, the overall demand for buffer pages is determined by the number of data pages required to satisfy all of the currently executing queries. If the demand for data pages is large relative to the number of pages in the buffer cache, then each page currently in the buffer is likely to be replaced by a new page in a relatively short time. This is measured by the page life expectancy performance counter of the Buffer Manager object. Having a high demand against a relatively small buffer generates a short life expectancy, the net effect is that I/O is increased because pages tend to be overwritten before they can be referenced by multiple logical reads. The database engine can alleviate this by acquiring more memory to increase the size of the buffer cache. The database engine will target free memory at the high end of the target (10 MB) when the page life expectancy is long, and at the low end of the target range (4 MB) when the page life expectancy is short.

As other applications are started on a computer running an instance of SQL Server, they consume memory and the amount of free physical memory drops below the SQL Server target. The instance of SQL Server then frees enough memory from its address space to raise the amount of free memory back to the SQL Server target. If another application is stopped and more memory becomes available, the instance of SQL Server increases the size of its memory allocation. SQL Server can free and acquire several megabytes of memory each second, allowing it to quickly adjust to memory allocation changes.
24 апр 03, 13:18    [183277]     Ответить | Цитировать Сообщить модератору
 Re: Освобождение памяти  [new]
Andrei Koshelap
Member

Откуда:
Сообщений: 7
У меня сервак сделан на обычном третьем пентиуме. Если кто-то засыпает данные в текстовых файлах на винт этого сервера, то все остальные сервисы тихо помирали. То есть происходили синхронно события - долгое горение лампочки Hard Disk и TimeOutы на некоторых задачах, особенно Visual Basicо-вых.
И вот я, сегодня, по совету друзей, в SQL propeties ->Memory -уменьшил Maximum Dynamycally configure SQL Server memory до 350Мб, (всего оперативки 512) то есть запретил, как я понимаю, своп. И это кажется приносит дивиденты. Тьфу-тьфу, никто не жалуется, да и сам я вижу что работает быстрее.
Может кто-нить решится и последует моему примеру, не откажите в откликах - как прошло.
24 апр 03, 17:27    [183799]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить