Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Большие очереди за памятью.  [new]
STsarionov
Member

Откуда:
Сообщений: 105
Добрый день.
Иногда возникает такая проблема: пользователи резко накидываются на сервер и ему катастрофически начинает нехватать памяти, т.е. появляются запросы (и много) стоящие в очереди за памятью.
Смотрю запросом:
SELECT mg.session_id, (ST.DBID) AS [DATABASENAME],
MG.REQUESTED_MEMORY_KB ,
MG.IDEAL_MEMORY_KB ,
MG.REQUEST_TIME ,
MG.GRANT_TIME ,
MG.QUERY_COST ,
MG.DOP ,
ST.[TEXT],
QP.QUERY_PLAN
FROM SYS.DM_EXEC_QUERY_MEMORY_GRANTS AS MG
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(PLAN_HANDLE) AS ST
CROSS APPLY SYS.DM_EXEC_QUERY_PLAN(MG.PLAN_HANDLE) AS QP
where mg.grant_time is null and mg.granted_memory_kb is null
ORDER BY MG.REQUESTED_MEMORY_KB DESC ;

Все бы ничего.. ну очереди и очереди, но при этом сервер начинает жутко тормозить.
Вопрос: можно ли как-то его настроить так, чтобы очереди запросов к памяти не распространялись на те запросы, которые уже отрабатываются сейчас?
SQL Server 2012 sp1(cu5), 256гб оперативной памяти.
31 июл 13, 16:14    [14643934]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
вася из снегова
Guest
ну что тут можно сказать..надо вам лучше запросы оптимизировать
31 июл 13, 16:17    [14643952]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
STsarionov
Member

Откуда:
Сообщений: 105
запросы строит ERP система, оптимизировать нет возможности. Думал может настройка есть о которой не знаю.
31 июл 13, 16:27    [14644013]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
STsarionov,

1. exec sp_updatestats
2. возможно посмотреть в сторону фильтрованной статистики
3. ну... и оптимизация запросов..
31 июл 13, 16:39    [14644101]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35396
Блог
как вариант, можно попробовать фиксировать планы некоторых запросов,
но с осторожностью
31 июл 13, 16:40    [14644107]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
вася из снегова
Guest
STsarionov
запросы строит ERP система, оптимизировать нет возможности. Думал может настройка есть о которой не знаю.


тогда тут ничем не поможешь
31 июл 13, 16:40    [14644111]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
STsarionov
Member

Откуда:
Сообщений: 105
Доступная и реализованная оптимизация:
-Стоит автообновление статистики+флаг 2371 оптимизирующий это самое автообновление.
-Под многие запросы нет подходящих индексов, постепенно устраняю это упущение для особо тяжелых запросов.

Вопрос тогда такой: раз нельзя предупредить это явление, как на него реагировать? Пока что киляю процессы ожидающие памяти, вполне помогает, но может как-то более гуманно можно это разруливать?
31 июл 13, 16:49    [14644170]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
вася из снегова
Guest
STsarionov
Доступная и реализованная оптимизация:
-Стоит автообновление статистики+флаг 2371 оптимизирующий это самое автообновление.
-Под многие запросы нет подходящих индексов, постепенно устраняю это упущение для особо тяжелых запросов.

Вопрос тогда такой: раз нельзя предупредить это явление, как на него реагировать? Пока что киляю процессы ожидающие памяти, вполне помогает, но может как-то более гуманно можно это разруливать?


Этим всем рулит движок базы данных,там ничего не подправишь и не сделаешь
31 июл 13, 17:02    [14644282]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31978
STsarionov
Вопрос: можно ли как-то его настроить так, чтобы очереди запросов к памяти не распространялись на те запросы, которые уже отрабатываются сейчас?
Может, это из за неправильного распределения данных между нодами NUMA? Поищитен статьи Александра Гладченко, может что то найдётся по этому поводу.

Ещё можно попробовать уменьшить уровень распаралеливания, может помочь. Начните с 8, посмотрите, что получится. Это безопасно, вернуть обратно всегда можно.

STsarionov
SQL Server 2012 sp1(cu5), 256гб оперативной памяти.
Надеюсь, сервер эту память потребляет, ему не 4 гб выделено? :-)
31 июл 13, 17:07    [14644316]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
вася из снегова
Guest
alexeyvg
STsarionov
Вопрос: можно ли как-то его настроить так, чтобы очереди запросов к памяти не распространялись на те запросы, которые уже отрабатываются сейчас?
Может, это из за неправильного распределения данных между нодами NUMA? Поищитен статьи Александра Гладченко, может что то найдётся по этому поводу.

Ещё можно попробовать уменьшить уровень распаралеливания, может помочь. Начните с 8, посмотрите, что получится. Это безопасно, вернуть обратно всегда можно.

STsarionov
SQL Server 2012 sp1(cu5), 256гб оперативной памяти.
Надеюсь, сервер эту память потребляет, ему не 4 гб выделено? :-)


Это не поможет гарантия 101 процент
31 июл 13, 17:08    [14644324]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
STsarionov
Member

Откуда:
Сообщений: 105
Память сервер кушает всю с удовольствием:)
Ничего не распаралеливает сервер, отключено, иначе вообще все падает.
31 июл 13, 17:37    [14644461]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
вася из снегова
Guest
STsarionov
Память сервер кушает всю с удовольствием:)
Ничего не распаралеливает сервер, отключено, иначе вообще все падает.


Об чем и речь
31 июл 13, 17:42    [14644483]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
МуМу
Member

Откуда:
Сообщений: 1134
У нас недавно появилось решение. Можно с помощью always on распределять нагрузку по серверам. Также можно запросы на лету оптимизировать, через специальный прокси(даже если нет доступа к коду).
1 авг 13, 11:37    [14647469]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Совет из общей категории. Что бы запросы ели меньше памяти даже если их нет возможности менять - меняйте если не структуру то хотя бы индексы. Надеюсь это ЕРП система позволяет делать?- если нет то ее можно сто процентов обмануть и заставить это делать.
1 авг 13, 11:42    [14647520]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
STsarionov
Member

Откуда:
Сообщений: 105
Индексы и меняю, других рычагов управления к сожалению нет. Настроил еще регулятор ресурсов, возможно поможет.
1 авг 13, 14:34    [14648757]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
специальный прокси
Guest
МуМу
У нас недавно появилось решение. Можно с помощью always on распределять нагрузку по серверам. Также можно запросы на лету оптимизировать, через специальный прокси(даже если нет доступа к коду).

Магнит?
1 авг 13, 15:20    [14649048]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
У вас там OLTP нагрузка? Или куча тяжелых отчетов строится?

STsarionov
Все бы ничего.. ну очереди и очереди, но при этом сервер начинает жутко тормозить.
Вопрос: можно ли как-то его настроить так, чтобы очереди запросов к памяти не распространялись на те запросы, которые уже отрабатываются сейчас?
Очереди не распространяются на те запросы которые уже выполняются.
Но как только начинает не хватать памяти все запросы встают в очередь, это я так понимаю вы и называете сервер начинает тормозить?

STsarionov
Вопрос тогда такой: раз нельзя предупредить это явление, как на него реагировать? Пока что киляю процессы ожидающие памяти, вполне помогает, но может как-то более гуманно можно это разруливать?
Опция 'query wait'. Не гуманно, но зато запросы будет отваливаться автоматически.

STsarionov
Настроил еще регулятор ресурсов, возможно поможет.
Лучше стало? Что конкретно настроили? Memory Grant % ? Я бы выставил 5%-10%, при 256 доступных гигабайтах, даже 5% это весьма прилично. Какой размер базы?

Самые тяжелые по памяти запросы, сколько памяти они реально используют, а не резервируют?
1 авг 13, 23:47    [14651098]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
alexeyvg
STsarionov
Вопрос: можно ли как-то его настроить так, чтобы очереди запросов к памяти не распространялись на те запросы, которые уже отрабатываются сейчас?
Может, это из за неправильного распределения данных между нодами NUMA? Поищитен статьи Александра Гладченко, может что то найдётся по этому поводу.
NUMA тут ни при чем.
1 авг 13, 23:49    [14651100]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35396
Блог
STsarionov,

а что у вас в свойствах сервера у minimum memory per query?
2 авг 13, 09:06    [14651687]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
STsarionov
Member

Откуда:
Сообщений: 105
Mind
У вас там OLTP нагрузка? Или куча тяжелых отчетов строится?

STsarionov
Все бы ничего.. ну очереди и очереди, но при этом сервер начинает жутко тормозить.
Вопрос: можно ли как-то его настроить так, чтобы очереди запросов к памяти не распространялись на те запросы, которые уже отрабатываются сейчас?
Очереди не распространяются на те запросы которые уже выполняются.
Но как только начинает не хватать памяти все запросы встают в очередь, это я так понимаю вы и называете сервер начинает тормозить?

STsarionov
Вопрос тогда такой: раз нельзя предупредить это явление, как на него реагировать? Пока что киляю процессы ожидающие памяти, вполне помогает, но может как-то более гуманно можно это разруливать?
Опция 'query wait'. Не гуманно, но зато запросы будет отваливаться автоматически.

STsarionov
Настроил еще регулятор ресурсов, возможно поможет.
Лучше стало? Что конкретно настроили? Memory Grant % ? Я бы выставил 5%-10%, при 256 доступных гигабайтах, даже 5% это весьма прилично. Какой размер базы?

Самые тяжелые по памяти запросы, сколько памяти они реально используют, а не резервируют?


- Нагрузка OLTP+отчеты
- По поводу query wait подумаю.. возможно мой вариант решения
- Размер базы 8Тб+, средний отчет реально использует 45-50гб памяти
- а регулятору ресурсов просто поставил 95% на использование памяти самым загруженным пулам. Ограничение по памяти(Memory Grant %) мне некоторые запросы вообще не пускало запускаться


>>а что у вас в свойствах сервера у minimum memory per query?
по умолчанию стоит.
2 авг 13, 09:50    [14651852]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
STsarionov
- Размер базы 8Тб+, средний отчет реально использует 45-50гб памяти.
это вы в в каком поле посмотрели?
У вас там сканы таблиц, хэш джойны и сортировки огромных объемов данных? Если запросы реально используют столько памяти, то еще может быть проблема с нехваткой памяти под кэш данных, он просто очищается чтобы отдать память под запросы, изза этого тормоза. PLE сильно падает в момент когда вырастают очереди?

Правильное решение это конечно же оптимизировать ваши отчеты. Начните хотя бы с missing indexes.
2 авг 13, 18:51    [14656258]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
STsarionov
Member

Откуда:
Сообщений: 105
Mind
STsarionov
- Размер базы 8Тб+, средний отчет реально использует 45-50гб памяти.
это вы в в каком поле посмотрели?
У вас там сканы таблиц, хэш джойны и сортировки огромных объемов данных? Если запросы реально используют столько памяти, то еще может быть проблема с нехваткой памяти под кэш данных, он просто очищается чтобы отдать память под запросы, изза этого тормоза. PLE сильно падает в момент когда вырастают очереди?

Правильное решение это конечно же оптимизировать ваши отчеты. Начните хотя бы с missing indexes.


PLE не смотрел в моменты таких падений, если честно. Да и после настройки регулятора ресурсов что-то больше падений пока не было, возможно помогло.
А запросы реально используют такие объемы памяти, смотрю поле used_memory_kb
5 авг 13, 14:13    [14664026]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
STsarionov
Member

Откуда:
Сообщений: 105
PLE падает с 215 до 39-40. Попался сегодня запрос требующий от системы 389гб памяти, убил без зазрения совести. Индексы под каждый отчет сделать очень дорого, таблица 800гб.. очень большие индексы получаются.
6 авг 13, 14:39    [14669745]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 17423
STsarionov
PLE падает с 215 до 39-40. Попался сегодня запрос требующий от системы 389гб памяти, убил без зазрения совести. Индексы под каждый отчет сделать очень дорого, таблица 800гб.. очень большие индексы получаются.

отдельный сервер OLAP вас спасет
6 авг 13, 17:59    [14671509]     Ответить | Цитировать Сообщить модератору
 Re: Большие очереди за памятью.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31978
STsarionov
Индексы под каждый отчет сделать очень дорого, таблица 800гб.. очень большие индексы получаются.
Ну не совсем под каждый отчёт будет куча индексов.

А для ваших масштабов создать для 800гб таблицы ещё терабайт инедксов нормально. Если у вас памяти 256 гигов, процессоров наверное штуки 4 - так и дисков наверное несколько сотен, десятки тб под данные? вот и заполняйте.
6 авг 13, 18:15    [14671606]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить