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

Откуда: мск
Сообщений: 1870
Приветствую

Есть такая проблема, при наличии в базе таблиц InMemory (DURABILITY = SCHEMA_ONLY) значительно увеличивается время начального включения базы. Например, база размером в 500 Мб с файловой группой Inmemory (160 пустых таблиц) объемом 30 Мб стартует 11-12 секунд; если дропнуть inmemory таблицы, то практически мгновенно.
Ситуация ухудшается, если на инстансе несколько таких баз и recovery происходит параллельно. До трех баз время старта сервера растёт линейно, начиная с четырех - растёт сразу до десятков минут (на более крупных базах - до часов).

Пока базы не пришли в онлайн, sql server занимает cpu максимально, до 100%. Память свободная при этом есть

Microsoft SQL Server 2017 (RTM-CU9) (KB4341265) - 14.0.3030.27 (X64) 
флаг -t 9944 не помог, права серверу на volume maintenance tasks тоже

В связи с этим два вопроса:
1. как это лечится?
2. так как базы по одной из offline стартовать можно относительно быстро, есть ли способ после выключения сервера указать ему, чтобы на старте некоторые базы сервер сразу выводил в offline?

Спасибо
23 авг 18, 19:05    [21652352]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
https://support.microsoft.com/en-us/help/4090789/in-memory-oltp-database-takes-a-long-time-to-recover-in-sql-server
23 авг 18, 20:57    [21652456]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
Shakill
Member

Откуда: мск
Сообщений: 1870
invm
https://support.microsoft.com/en-us/help/4090789/in-memory-oltp-database-takes-a-long-time-to-recover-in-sql-server

2017 (RTM-CU9)
23 авг 18, 22:02    [21652497]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
invm
Member

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

Там еще TF 9944 упомянут.
23 авг 18, 22:45    [21652519]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
invm
Member

Откуда: Москва
Сообщений: 9114
Не заметил, что TF 9944 не помог...
23 авг 18, 22:45    [21652520]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
Shakill
Member

Откуда: мск
Сообщений: 1870
помогло добавить на виртуалку много ядер, чтоб их стало больше, чем таких баз на инстансе; время старта снова стало примерно как сумма восстановления отдельных баз.
но решение явно не во всех случаях подойдет и не закрыт вопрос с тем, что база с inmemory таблицами сама по себе стартует существенно дольше, чем без них
24 авг 18, 17:55    [21653406]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
Владислав Колосов
Member

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

сервер же должен отгрузить объекты и данные с диска память и скомпилировать процедуры, как я понимаю. Не просто сервис запустить и ждать команд, как с физическими таблицами.
27 авг 18, 13:26    [21654941]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4371
Shakill
помогло добавить на виртуалку много ядер, чтоб их стало больше, чем таких баз на инстансе; время старта снова стало примерно как сумма восстановления отдельных баз.
но решение явно не во всех случаях подойдет и не закрыт вопрос с тем, что база с inmemory таблицами сама по себе стартует существенно дольше, чем без них



InMemory любит процессоры
27 авг 18, 14:41    [21655038]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
Владислав Колосов
сервер же должен отгрузить объекты и данные с диска память и скомпилировать процедуры, как я понимаю. Не просто сервис запустить и ждать команд, как с физическими таблицами.
Только загрузить объекты и скомпилировать процедуры. Без данных, потому что DURABILITY = SCHEMA_ONLY
Не, это ненормально, когда сей процесс длится долго, при увеличении размера время растёт, а после некоего порога размера резко прыгает, и затягивается на часы и дни.
a_voronin
InMemory любит процессоры
А я думаю, программирование любит криворуких программистов.
Видимо, самое правильное, не использовать никакие фичи эдак после 2005го :-)
27 авг 18, 19:59    [21655415]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
Shakill
Member

Откуда: мск
Сообщений: 1870
[quot alexeyvg]
Владислав Колосов
сервер же должен отгрузить объекты и данные с диска память и скомпилировать процедуры, как я понимаю. Не просто сервис запустить и ждать команд, как с физическими таблицами.
Только загрузить объекты и скомпилировать процедуры. Без данных, потому что DURABILITY = SCHEMA_ONLY
[quot]
да, вот именно поэтому и возникают вопросы


a_voronin
InMemory любит процессоры
но странною любовью.

одним из выходов выглядит запретить серверу поднимать базы параллельно. но такого способа тоже не нашел
27 авг 18, 21:22    [21655490]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
Владислав Колосов
Member

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

C# тяжко компилируется, это заметно, когда идет новая установка сервера. Он несколько дней GAC пилит по-моему.
29 авг 18, 13:43    [21657584]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
Владислав Колосов
Shakill,

C# тяжко компилируется, это заметно, когда идет новая установка сервера. Он несколько дней GAC пилит по-моему.
Очевидно, к описанной проблеме это не имеет никакого отношения.
Если один и тот же код компилится разное (в тыщи раз) время, в зависимости от каких то других параметров, то это явный баг программистов, или, в возможно, архитекторов.
29 авг 18, 13:50    [21657601]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
Владислав Колосов
Member

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

а почему Вы решили, что нативные процедуры и "ин-мемори" объекты не компилируются в CLR код?
29 авг 18, 16:07    [21657847]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
Владислав Колосов
alexeyvg,

а почему Вы решили, что нативные процедуры и "ин-мемори" объекты не компилируются в CLR код?
Я так не решил.

Я разве про это писал?

Ещё раз:
Я написал о том, что если у вас 2 базы, в каждой по одному пустому "ин-мемори" объекту, и в одной бавзе ещё есть табличка с заказами на 100 заказов, а в другой табличка с миллионом счетов-фактур, то эти базы должны стартовать одинаково.
Потому что количество и размер "ин-мемори" объектов одинаковые.

Но почему то вторая база стартует медленнее.

Это было признано МС багом, был выпущен фикс, но в данном случае он не подействовал.
Может, в следующем кумулятивном апдэйте его просто не добавили, может, это потерянный фикс?
29 авг 18, 16:57    [21657904]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4371
alexeyvg
Владислав Колосов
alexeyvg,

а почему Вы решили, что нативные процедуры и "ин-мемори" объекты не компилируются в CLR код?
Я так не решил.

Я разве про это писал?

Ещё раз:
Я написал о том, что если у вас 2 базы, в каждой по одному пустому "ин-мемори" объекту, и в одной бавзе ещё есть табличка с заказами на 100 заказов, а в другой табличка с миллионом счетов-фактур, то эти базы должны стартовать одинаково.
Потому что количество и размер "ин-мемори" объектов одинаковые.

Но почему то вторая база стартует медленнее.

Это было признано МС багом, был выпущен фикс, но в данном случае он не подействовал.
Может, в следующем кумулятивном апдэйте его просто не добавили, может, это потерянный фикс?


Код "нативных процедур" показывали в одном из видосов Майкрософт. Конкретно нативные процедуры компилируются в C++.
29 авг 18, 17:14    [21657929]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
a_voronin
Код "нативных процедур" показывали в одном из видосов Майкрософт. Конкретно нативные процедуры компилируются в C++.
Это как связано с вопросом? Сиквел компилирует счета-фактуры, написанные бухгалтерами на С++ ? :-)
29 авг 18, 17:18    [21657935]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
Rankatan
Member

Откуда:
Сообщений: 250
a_voronin
Конкретно нативные процедуры компилируются в C++.

C++ ведь не низкоуровневый язык как в него может копулироваться. Может преобразовывается в C++ а потом уже компилируется?
29 авг 18, 17:19    [21657937]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4371
Rankatan
a_voronin
Конкретно нативные процедуры компилируются в C++.

C++ ведь не низкоуровневый язык как в него может копулироваться. Может преобразовывается в C++ а потом уже компилируется?


Сначала в С++, потом в ассемблер.

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

Вот здесь есть инфа о том, как добраться до кода и как он выглядит.
https://www.mssqltips.com/sqlservertip/3394/debugging-nativelycompiled-stored-procedures-statements/
29 авг 18, 17:37    [21657968]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
Shakill
Member

Откуда: мск
Сообщений: 1870
alexeyvg
Но почему то вторая база стартует медленнее.

Это было признано МС багом, был выпущен фикс, но в данном случае он не подействовал.
Может, в следующем кумулятивном апдэйте его просто не добавили, может, это потерянный фикс?


более того, фиксов по похожим проблемам с разными причинами было несколько
https://support.microsoft.com/en-us/help/4055727/recovering-a-database-with-memory-optimized-tables-takes-a-long-time
https://support.microsoft.com/en-hk/help/4090789/in-memory-oltp-database-takes-a-long-time-to-recover-in-sql-server
https://support.microsoft.com/en-us/help/3171001/fix-slow-database-recovery-in-sql-server-2016-due-to-large-log-when-yo
возможно, есть ещё какой-то не покрытый заплатками случай
29 авг 18, 18:28    [21658025]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
Shakill
более того, фиксов по похожим проблемам с разными причинами было несколько
...
возможно, есть ещё какой-то не покрытый заплатками случай
Да уж...
Тогда только писать про баг, и трясти МС...
29 авг 18, 22:35    [21658146]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
Shakill
В связи с этим два вопроса:
1. как это лечится?
Если это действительно критично для бизнеса, можно дропать таблицы перед перезагрузкой (вручную, или как то автоматизировать), и создавать при старте базы.
Получится хоть как то решить проблему, пока МС будет править баг :-)
29 авг 18, 22:49    [21658149]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
alexeyvg
или как то автоматизировать
Например, попробовать половить серверным триггером на событие DROP_EVENT_SESSION, для дефаултной сессии...
В общем, тут придётся подумать...
29 авг 18, 22:54    [21658151]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30702
Shakill
2. так как базы по одной из offline стартовать можно относительно быстро, есть ли способ после выключения сервера указать ему, чтобы на старте некоторые базы сервер сразу выводил в offline?
Можно сделать отдельный мастер файл, с нужными базами в оффлайн, и стартовать сервер с ним (опции -d, -l).
Но, конечно, тогда придётся возиться с поддержкой его правильной версии.
29 авг 18, 23:06    [21658156]     Ответить | Цитировать Сообщить модератору
 Re: база с таблицами InMemory долго стартует  [new]
Shakill
Member

Откуда: мск
Сообщений: 1870
alexeyvg
Shakill
В связи с этим два вопроса:
1. как это лечится?
Если это действительно критично для бизнеса, можно дропать таблицы перед перезагрузкой (вручную, или как то автоматизировать), и создавать при старте базы.
Получится хоть как то решить проблему, пока МС будет править баг :-)

если перезагрузка плановая, то это решается выведением баз в оффлайн перед выключением сервера
а вот если с сервером что-то случилось, то выходит, что момент упущен и получаем долгий старт
спасибо за вариант с мастерфайлом, посмотрю, насколько это может быть удобно в использовании
4 сен 18, 14:55    [21664113]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить