?

Log in

No account? Create an account

[icon] 64 -> 32 -> 14 - Lorem Ipsum igitur, juvenes dum sumus
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.
View:Website (Мой сайт).

Tags:, , , ,
Security:
Subject:64 -> 32 -> 14
Time:09:52 pm
Помните, может быть, я рассказывал про волшебный сервер, с которым мне случайно довелось столкнуться, и чьи вычислительные мощности я пробовал использовать для своих расчетов?
Сегодня я снова на него зашел, чтобы еще кое-чего пересчитать.
Расчеты предполагали работу с достаточно большой БД (40Гб примерно), поэтому я предполагал, что SQL Server 2008 R2, там установленный, эту БД максимально закэширует. Я даже открыл Task Manager, чтобы посмотреть, с какой скоростью он будет загружать данные и поглощать память.
Каково же было моё удивление, когда я увидел, что процесс sqlservr.exe кушает всего 170Мб, и не хочет увеличивать потребление ни на метр. Я проверил, не почудилось ли мне, не Compact-ли это Edition, не приведи господь. Нет. Написал мега-запрос, который читает почти 10% данных из базы, запустил. SQL увеличил потребление до уровня 250Мб и там остался. Если что, у меня на ноуте в idle он больше потребляет.
Стал смотреть дальше, и заметил странное. Сколько бы приложений я не запускал, как бы не загружал сервер, общий уровень загрузки памяти не поднимался выше 14,2Гб (из доступных 32Гб).

Если честно, я такого никогда раньше не видел. Похоже на какое-то квотирование, как будто сервак заточен под Terminal Services и много юзеров, но таких настроек я на нём не нашёл. Есть какие-нибудь идеи, что это вообще может быть?

UPD:

MSSQL doesn't properly report its memory allocation in Task Manager with the default configuration. Evidently Microsoft uses some low level allocation techniques that perform well but do not show up in Task Manager. If you configure it to have a max of 8GB, it will eventually use that 8GB even though you don't see it directly in Task Manager.

You can see it indirectly in Task Manager because the page file usage will go up by the amount of memory you configure for MSSQL. It's kind of like trying to see a black hole. You can't actually see them, but you can figure out they there by the gravitational tug they put on the objects near them. Ok, maybe not.

If you're interested in viewing the actual memory usage of MSSQL, you can get very detailed info by executing DBCC MEMORYSTATUS from SQL Server Management Studio. If you don't care to have that level you detail, you can run perfmon and add the SQLServer:Memory Manager/Total Server Memory(KB) performance counter.

So for your process, rest assured that if you configured MSSQL to have 8GB max and there is 32GB of physical memory available, it will use all 8GB if it has to load that much data from the disk.
comments: Оставить комментарий Previous Entry Поделиться Next Entry


dbms
Link:(Link)
Time:2012-12-11 09:48 am
а ты не смотрел доли cache hit и cache miss? возможно ему вполне хватает небольшого кэша для удовлетворения твоих мега-запросов :)
(Ответить) (Thread)


torrio
Link:(Link)
Time:2012-12-11 03:36 pm
Не смотрел. По опыту знаю, что такой запрос увеличивает потребление памяти сиквелом примерно на 5Гб.
(Ответить) (Parent) (Thread)


dbms
Link:(Link)
Time:2012-12-11 03:58 pm
а сиквел что, вот так запросто динамически отжирает память под запрос до упора, сколько есть в системе?
(Ответить) (Parent) (Thread)


torrio
Link:(Link)
Time:2012-12-11 04:16 pm
Ну, в соответствии с конфигурацией памяти. На данном сервере лимит памяти для SQL установлен на 8Гб.
(Ответить) (Parent) (Thread)

(Anonymous)
Link:(Link)
Time:2012-12-11 08:50 pm
Вероятно, скуль достаточно умный, чтобы понять что память отданная файловому кэшу винды в данном случае эффективней, чем память потраченная на буфферы. Ты в домашних условиях можешь воспроизвести запрос на этих данных и посмотреть расход?

МАО
(Ответить) (Thread)


torrio
Link:(Link)
Time:2012-12-11 09:00 pm
В домашних условиях и на всех доступных серверах, MS SQL 2008 R2 с этой базой и с этими запросами кушает от 500Мб памяти (без нагрузки вообще, без запросов к базе) до 27Гб (под нагрузкой).

На сервере о котором идёт речь SQL кушает 170-250Мб, но при этом неимоверно много читает с диска (87 терабайт прочитано по счётчику). Т.е., очевидно, вместо кэширования данных, он каждый раз читает их заново...
(Ответить) (Parent) (Thread)

[icon] 64 -> 32 -> 14 - Lorem Ipsum igitur, juvenes dum sumus
View:Свежие записи.
View:Архив.
View:Друзья.
View:Личная информация.
View:Website (Мой сайт).