powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сервер выделяет процессам слишком мало памяти
18 сообщений из 18, страница 1 из 1
Сервер выделяет процессам слишком мало памяти
    #39595149
gpav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Далек от DBA, но приходится разбираться. Поиском пока не осилил.

Итак, переехали недавно с сервера SQL 2005 на 2016 Standard Edition (64-bit) на Windows Server 2016. Есть несколько тяжелых периодически выполняемых запросов (со времен 2005), которые нормально работали до и после переезда. Через пару месяцев после переезда запросы стали неожиданно зависать до бесконечности. Т.е. выполняются по нескольку часов без ошибок, пока их не убиваем. Раньше в пределах минуты или нескольких минут выполнялись. Легкие запросы продолжают нормально работать. Некоторое время помогала перезагрузка сервера. Сейчас - нет.

Пытаясь понять причину зависаний, пока проверил/сделал следующее (2016-й SQL):
1. SQL Server отжирает немного ресурсов у ОС. Task Manager показывает использование памяти 39% и проца 17% всеми процессами ОС суммарно.
2. Параметры управления памятью SQL Server:
min server memory = 0 MB
max server memory = 52000 MB
Это нормально, насколько понимаю, т.к. ОЗУ ОС = 64 GB.
Есть еще пара второстепенных (думаю) параметров:
память для создания индекса = 0
минимальный объем памяти для запроса = 1024 KB
3. Когда все висит, смотрю Активитити монитор и sys.dm_exec_sessions. И тут видно, что то сервер выделяет на запросы очень мало памяти, а именно:
max(memory_usage) = 4 (32 KB?)
sum(memory_usage) = 1073 (8584 KB?)
При этом доступной памяти у SQL Server ~22 GB (dm_os_process_memory.physical_memory_in_use_kb/1024 = ~22000), т.е. гораздо больше, чем съедают процессы.
4. Почистил процедурный кэш, но не помогло. Команды:
Код: sql
1.
2.
DBCC FREEPROCCACHE
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE


Где еще искать проблему? Или что пробовать делать (авось, поможет)?

P.S. Еще пару моментов:
1. SQL сервер запущен на локальной виртуалке. ОЗУ ОС = 64 GB вижу по RDP. Это ведь память вируталки?
2. Настроена репликация. Она продолжает нормально работать, данные на реплике обновляются.
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39595160
AlanDenton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все таки стоит посмотреть на планы выполнения проблемых запросов. Обновить статистику в таблицах, если это требуется. Помочь оптимизатору получить верную кардинальность и соотвественно точнее сделать грант памяти для того или иного запроса
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39595163
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы бы лучше написали, когда вы последний раз статистику обновляли.
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39595165
AlanDenton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможна ситуация когда SQL Server сильно недооуенил кол-во строк и в зависимости от удачи. Запрос скатится в NestedLoops и будет убиваться проц либо пойдут спилы в tempdb. Опять же лучше всего посмотреть на планы выполнения, чтобы понять проблему
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39595211
gpav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlanDenton,
Гавриленко Сергей Алексеевич,

Явно обновление статистики никто не делает. Глянул сейчас в dm_db_stats_properties статистику по самым крупным таблицам с множеством индексов. По всем обновление статистики было сегодня, не более 5 часов назад.

Запросы кривые, конечно. Переписываем их потихоньку. С индексами далеко не все в порядке.

Рекомендации? Может, статистику по всей базе грохнуть и создать заново?
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39595217
gpav,

как именно переезжали? может в процессе переезда "потерялись" планы обслуживания базы (дефрагментация индексов, пересчет статистики, перенос неактуальных данных в архивные таблицы)?
Попробуйте принудительно пересобрать статистику (хотя бы по таблицам из проблемных запросов) с опцией FULLSCAN. Возможно, автоматический сбор статистики делает недостаточно аккуратный и точный расчет...
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39595219
gpav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UPD
Нашел таблицы, по которым статистики не было, вообще!
Запустил EXEC sp_updatestats по всей базе без удаления имеющейся статистики.
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39595221
Фотография SomewhereSomehow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpav,

Уровень совместимости БД поставьте минимальный 100-110 (не помню, какой там минимальный в 2016), либо включите опцию LEGACY_CARDINALITY_ESTIMATION . Этим вы исключите проблемы производительности из-за нового механизма оценки. Далее, включаете Query Store, копите статистику, потом переходите на последний уровень совместимости. После этого, смотрите регрессировавшие планы и решаете, как действовать дальше.

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

Но мне почему-то кажется, что проблема у вас в том, что я обозначил первым пунктом. Если нет - нужно обсуждать предметно и подробно.
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39595230
gpav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EXEC sp_updatestats (без аргументов) отработала за 8 минут. Про таблицы без статистики в предыдущем посте я наврал. Это были таблицы, в которых потерлась старая статистика в процессе пересборки сейчас. Увы, ничего не изменилось, - запросы висят.

Добрый Э - Эх ,
До переезда из обслуживания было только реиндексирование всех таблиц раз в сутки джобом. После переезда продолжаем делать реиндексацию в том же режиме. Но последняя реиндексация, сегодня ночью, не прошла. А проблемы начались вчера днем. Когда была последняя успешная реиндексация, не известно (трутся логи давностью более суток). Перестроить индексы первым делом?

SomewhereSomehow ,
гляну уровни совместимости, спасибо!
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39596162
nvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nvv
Гость
gpav,
из практики - минимальную память нужно обязательно ограничивать. SQL сервер не должен конкурировать с другими приложениями за ресурсы. Иначе лихо теряется буфер, который заполняется с большими тормозами. И уж точно не стоит на 2016 чистить кэши, даже кэши планов. В тяжелом продакшене минут 15-20 все будут жестко тупить. Чистятся отдельные планы.
Проверяйте время жизни страниц в буфере. При нехватке памяти - сделайте файл расширенного буфера на ССД. 2016 версия это позволяет.
Вы ничего не написали о размере базы. Может у вас терабайт >>? Тогда нужно думать хотя бы о 256Гб оперативы для СУБД. Видал я базы 600 Гб с 0-8Гб памяти ((
Что является узким местом по железу в момент торможения запросов? Может физические чтения есть? Может время доступа большое?
Или все же планы шалят?
Все нужно смотреть. Гадать не стоит.
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39596218
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nvvgpav,
из практики - минимальную память нужно обязательно ограничивать.Лучше не трогать стандартные настройки, можно сделать серверу хуже. Память можно трогать, только если на сервере кроме сиквела ещё что то установлено.
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39596257
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpav,

наблюдал подобное при переезде 2012 -> 2016.
В проблемных запросах случаем не используются CTE?
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39596261
nvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nvv
Гость
alexeyvg,
Неееенене!!!! Это всегда приводит к проблемам. На любых тренингах, вебинарах, выступлениях по хайлоаду даётся вполне четкая по этим параметрам рекомендация.
Нижнюю желательно ограничивать и делать равной верхней. Верхняя рассчитывается: отдается часть памяти системе + 1/16 от занимаемой sql. (Говорю про памяти, информация с вебинаров, выступлений).
Другим приложениям на этой машине делать нечего, это плохая практика.
Если другие приложения все же есть - нужно подбирать верхнюю планку так чтобы конкуренции никогда не было. Начинается конкуренция - начинаются тормоза. И что интересно не в СУБД, а в приложениях и системе.
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39596653
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nvvНижнюю желательно ограничивать и делать равной верхней
непонятно только, почему же сделали 2 границы
и про каждую еще написали,
когда именно ее надо менять.

надо оставить одну настройку и вперед!
вы уж не забудьте MS-овцам сообщить,
как они лоханулись, сделав все же 2 настройки
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39597079
gpav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Диклевич Александрgpav,
наблюдал подобное при переезде 2012 -> 2016.
В проблемных запросах случаем не используются CTE?
Активно используются, причем в критически важном тормозном запросе!
Речь про SP, в которой табличная переменная заполняется из CTE. Число записей единовременно в переменной не более 5000. При этом кол-во полей приличное - от 120 до 130. Но сильно тяжелых полей нет - максимально varchar(1024). Запрос зависал намертво при заполнении табличной переменной (на 2005 сервере годами проблем не было в этом месте). Месяц назад (на 2016) в качестве эксперимента заменил табличную переменную на постоянную таблицу (которая чистится на старте SP). Это помогло на пару недель. Потом опять началось описанное в исходном посте. Теперь табличных переменных нет совсем в SP. Но CTE остались.

P.S. Когда писал исходный пост, не заметил, что реиндексация базы а плане обслуживания не выполнялась несколько дней. Т.е. выполнение падало на реиндексации. Займемся в ближайшее время этим вопросом (с правами что-то, думаю). А пока раз в сутки запускаю руками реиндексацию. И это помогает. Описанные сбои прекратились. Понаблюдаем еще...
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39597093
nvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nvv
Гость
Yasha123,
вроде уважаемый человек на форуме, а такой неадекватный сарказм. Пересказал, то что слышал на выступлениях практиков крупных проектов и от MS-овцев в том числе. Вынужден поверить столь положительному опыту.
Ключевой момент конкуренция за ресурсы. Если что-то отжимает память у СУБД - это уже нехорошо.
А вообще идея интересная. Поставил один параметр и все, чего заморачиваться )))

Какое ваше мнение по поводу вилки памяти? Что нам дает, что у нас вилка будет не 150-200, а 50-200? Или тем более 0-200Гб ?
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39597324
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторраз в сутки запускаю руками реиндексацию


Тем самым вы удаляете кешированные планы запросов.
...
Рейтинг: 0 / 0
Сервер выделяет процессам слишком мало памяти
    #39597327
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Вас плохая архитектура и плохие запросы, как следствие.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сервер выделяет процессам слишком мало памяти
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]