|
ExternalFreeze, поделитесь опытом
|
|||
---|---|---|---|
#18+
Добрый день, Уважаемые форумчане. Есть вопросы относительно ##class(Backup.General).ExternalFreeze(). Допустим, ночью я смогу резко снизить активность изменений в БД, путем остановки процессов выполняющих такие изменения. Но все остановить не могу, процессы с низкой активностью должны остаться, их изменения БД незначительны по отношению к штатной работе. Могу увеличить таймаут со стандартных 10 минут на большее значение. И выполняю копирование БД по своему списку на отдельный диск. Все это я могу, но боюсь напороться на всяческие подводные камни. Пошли вопросы: 1. До какого значения можно увеличивать таймаут, чтобы у Каше крыша все-таки не поехала, или же он просто проигнорирует мое значение, а подставит свое максимальное или свое по умолчанию? 2. Если у меня кэш глобалов был практически полный и я вызываю метод ExternalFreeze(), то перед заморозкой Каше все-таки выполняет сброс кэша глобалов на диск, или просто ждет его переполнения, которое может наступить буквально через пару минут? 3. Как лучше всего выводить из ступора Каше, если метод ExternalThaw() выполнится с ошибкой, бывало ли у кого такое? (перезапуск - понятно) 4. Если необходимо копировать несколько файлов БД, то как лучше поступать, для каждого копируемого файла БД применять обрамление ExternalFreeze()---ExternalThaw(), или для всех сразу? Очень надеюсь на Ваше понимание, богатый опыт и хорошее расположение звезд в мою сторону. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 10:35 |
|
ExternalFreeze, поделитесь опытом
|
|||
---|---|---|---|
#18+
AlexKB, Первое, о чем нужно понимать перед началом работы с таким бэкапом, это сколько времени вы потратите на сам бэкап одной базы или всех сразу. Это вы и сами понять можете, зная размеры БД, и скорость дисков, примерно расчитать. Можно и на практике проверить. До фриза не сохраненные в БД данные хранятся не в кеше глобалов, а в файле WIJ. Думаю, что буфер просто будет высвобожден если надо. И размер кеша глобалов стоит постаратся увеличить, если БД большая. Увеличение таймаута нужно, если вы не успеете забэкапить базу пока действует фриз по записи, иначе после таймаута произодет фриз всей системы. Для каждой отдельной базы имеет смысл если они у вас большие, только нужно выжидать время перед фризами, чтобы предыдущий этап записался (это кстати можно и отследить, например через mgstat). Потому как фриз сработает на всю запись. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 11:20 |
|
ExternalFreeze, поделитесь опытом
|
|||
---|---|---|---|
#18+
DAiMor, Что-то я сомневаюсь, чтобы не сохраненные данные накапливались не в кэше глобалов, а в журнале до записи...? Журнал до записи необходим для краткосрочного хранения, чтобы обеспечить три фазы самого сохранения в файл БД из кэша глобалов...А иначе как то не логично получается... Я конечно же буду экспериментировать, буду отслеживать времена. Но чувствую, что может наступить момент, когда нужно будет замораживать и отпускать сервер не для всех копируемых файлов БД, а для каждого в отдельности (или групп файлов БД). Выжидать это понятно, еще лучше бы иметь некий признак. Если бы метод ExternalThaw() возвращал управление после завершения освобождения кэша глобалов, было бы еще лучше... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 12:01 |
|
ExternalFreeze, поделитесь опытом
|
|||
---|---|---|---|
#18+
Попробую дополнить ответ Дмитрия. AlexKB1. До какого значения можно увеличивать таймаут, чтобы у Каше крыша все-таки не поехала, или же он просто проигнорирует мое значение, а подставит свое максимальное или свое по умолчанию?Можно выставить любое значение, контроля нет. Обрати внимание, что там два таймаута, и (для некластерных систем) надо использовать ExternalFreezeTimeOut. В нормальных условиях WRTDMN активируется по истечении 80с или по заполнении 25000 буферов, что наступит раньше. Если же WRTDMN (демон записи) заморожен, заполнение кэша будет продолжаться. См. статистику работы вашей системы (mgstat), насколько интенсивно она пишет в БД, и прикинь, как быстро заполнятся 75% кэша (надо ведь и для чтения что-то оставить) в худших условиях в то время суток, когда выполняется бэкап. AlexKB3. Как лучше всего выводить из ступора Каше, если метод ExternalThaw() выполнится с ошибкой, бывало ли у кого такое? (перезапуск - понятно) Только перезапуск, но вероятность ошибки здесь мала; не видел такого. P.S. ИМХО, попытка использовать заморозку на время внешнего бэкапа, если он идёт десятки минут, добавляет проблем, которых в принципе нет, если использовать он-лайн бэкап Cache, обычно выполняющийся ненамного медленнее внешнего бэкапа. Кстати, придумана была технология заморозки прежде всего для заморозки записи в БД на время создания snapshot'а (о чём недвусмысленно "намёкнуто" в документации), причём подразумевался snapshot на уровне СХД, хотя есть и другие варианты. Создание shapshot'a - быстрая операция, обычно занимает несколько секунд, поэтому 10 минут выбраны с большим запасом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 12:40 |
|
ExternalFreeze, поделитесь опытом
|
|||
---|---|---|---|
#18+
В нормальных условиях WRTDMN активируется по истечении 80с или по заполнении 25000 буферов, что наступит раньше.Поэтому представление, что изменённые данные где-то "накапливаются", неверно. Я не видел более 24000 "грязных" буферов даже на очень загруженных системах, с тысячами пользователей. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 12:45 |
|
ExternalFreeze, поделитесь опытом
|
|||
---|---|---|---|
#18+
Кстати, Murray Oldfield готовит статью о бекапах снепшотами в VMWare с использованием фриза. Статья пока в черновиках, но надеюсь скоро он ее опубликует. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 17:07 |
|
ExternalFreeze, поделитесь опытом
|
|||
---|---|---|---|
#18+
А какие добавляются проблемы при заморозках длительных, скажем 35-45 минут..? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 17:35 |
|
ExternalFreeze, поделитесь опытом
|
|||
---|---|---|---|
#18+
Проблемы видятся как минимум две: при внезапном ("внеплановом") всплеске активности во время бэкапа может не хватить: 1- заданного таймаута или 2- буферов в кэше. Простой пример: допустим, система пишет 20000 буферов 1 раз в 80 секунд. Сколько потребуется кэша, чтобы удержать их в памяти в течение 30 минут? 20000/80*(30*60)*8/1024 ~ 3.4GB Если размер кэша глобалов хотя бы 6GB, пережить заморозку скорее всего удастся. Но допустим БД вдвое выросла, и нам требуется уже 60 минут, а администратор забыл увеличить таймаут? Имеем проблему №1: WRTDMN оттает раньше, чем завершится бэкап, и он у нас будет "грязным". Если же админ увеличил таймаут до 3600 сек, но забыл увеличить кэш, имеем проблему №2: система просто зависнет. Ни одной из этих проблем не просматривается при он-лайн бэкапе Cache. За что ты его так не любишь? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 18:35 |
|
ExternalFreeze, поделитесь опытом
|
|||
---|---|---|---|
#18+
Если есть нежурналируемые БД (отличные от CACHETEMP), данные в которых тем не менее нельзя терять при перезапуске Cache, добавляется проблема №3: если во время заморозки произойдёт "лёгкий" сбой в работе Cache, в результате которого её придётся перезапустить, то все изменения, проделанные в нежурналируемых БД во время заморозки, будут потеряны. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2017, 18:43 |
|
ExternalFreeze, поделитесь опытом
|
|||
---|---|---|---|
#18+
Вот статья сегодня вышла по теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2017, 08:26 |
|
|
start [/forum/topic.php?fid=39&msg=39382067&tid=1556394]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 276ms |
total: | 448ms |
0 / 0 |