У нас есть несколько машин, на которых мы предварительно выделили размер журнала транзакций в 50 ГБ. Размер таблицы, которую я пытаюсь реорганизовать, составляет 55 - 60 ГБ, но будет постоянно увеличиваться. Основная причина, по которой я хочу реорганизоваться, заключается в том, чтобы освободить место и получить какую-либо выгоду от производительности, потому что это дополнительный бонус.
Уровень фрагментации таблицы составляет 30 - 35%. На некоторых из этих машин я получаю сообщение об ошибке «Журнал транзакций заполнен» и реорганизация завершается неудачно. Размер журнала транзакций достигает 48 ГБ. Какой хороший способ противостоять этому? У нас не включено автоматическое увеличение, и я не хочу этого делать.
Я могу увеличить размер журнала до большего значения, но по мере увеличения размера таблицы в будущем этого значения может быть недостаточно. Кроме того, это не дает возможности сделать реорганизацию, чтобы освободить место, если я собираюсь увеличить размер журнала в равной степени. Любые идеи о том, как я могу эффективно противостоять этому? Использование массового режима не вариант, так как потеря данных недопустима.
источник
REORGANIZE (как в ALTER INDEX ... REORGANIZE) - это очень быстрая операция (ну, в основном ...), которая требует небольшого количества журнала, может быть прервана в любой момент и возобновлена позже, и работает внутри в небольших пакетных транзакциях :
Вы уверены, что не говорите о восстановлении ? Индекс REBUILD медленный, дорогой, потребляет огромное количество журналов (если он не находится в автономном режиме и не может быть минимально зарегистрирован , для онлайн-перестроения не может быть минимально зарегистрирован), представляет собой одну гигантскую транзакцию и не может быть прервана без потери всей работы.
Мне кажется, что вы делаете перестройку, что является действительно исключительной операцией, которую вы не должны делать, если у вас нет очень хорошо продуманной причины. Какого рода космическое освоение вы прыгаете? Все, что
DBCC CLEANTABLE
не справится? Вы проверили физическую структуру таблицы, не сместилась ли она от логической структуры (подробности см. В столбцах таблицы SQL Server под капотом )?Если вам действительно нужно перестроить таблицу, то, боюсь, у вас нет другого выбора, кроме как откусить пулю и выделить необходимый журнал. Не позволяйте этому автоматически расти, это только замедлит процесс. Предварительно вырастите его в 2,5 раза больше размера стола.
Если таблица секционирована, то вы можете перестроить в автономном режиме (и реорганизовать) по одному разделу за раз. Перестроение в режиме онлайн можно выполнить только на уровне всей таблицы.
источник
У меня была эта проблема раньше.
Это немного нелогично, потому что вы знаете, что если вы прервете реорганизацию, она может продолжаться с того места, где она остановилась, просто прерывание фиксирует транзакцию, а не откатывается назад.
Вот что ты делаешь. Это немного долго, но просто.
Создайте предупреждение WMI агента («Reorganize Relief Valve») о состоянии производительности.
Создать работу («Реорганизовать проверку»)
Протестируйте все это где-нибудь, даже в изолированной программной среде разработки, чтобы убедиться, что она работает правильно, прежде чем прикреплять ее на свой рабочий сервер.
Вы увидите, что задание «Реорганизация» запускается и начинает заполнять журнал. Когда журнал достигает процента заполнения, он запускает предупреждение WMI (в течение примерно 30 с), которое запускает другое задание, которое видит, что задание «Реорганизация» выполняется и, вероятно, ошибочно. Затем он останавливает «Реорганизацию», выполняет резервное копирование, подтверждает, что свободное место в журнале вернулось к разумному значению, а затем снова запускает задание «Реорганизация», которое выполнит его с того места, где оно остановилось.
Поэтому, как вы можете сделать, причина, по которой вы предварительно изменили размер своего журнала до разумного значения в этом сценарии, состоит в том, чтобы уменьшить число операций увеличения / запуска / задания / остановки / перезапусков, чтобы сделать их более эффективными, а также сохранить достаточно места для случайные наросты, которые не успевают вовремя.
Это своего рода странный сценарий. Я почти уверен, что бы ошибся в этом несколько лет назад, и, очевидно, здесь есть фундаментальные проблемы. Но если вы имеете дело с сотнями серверов, возникнет несколько таких крайних случаев, которые никак не могут быть решены по какой-либо бизнес-причине, кроме как с помощью MacGyvering временного решения, которое выполняет свою работу.
Пока это безопасно, логично, проверено и хорошо документировано, проблем не должно быть.
источник
Это то, что я обычно делал (у меня также есть несколько таблиц размером 80 + ГБ каждая) для реорганизации индекса (потому что реорганизацию индекса можно остановить в любое время без потери предыдущей работы по реорганизации).
В моей структуре обслуживания индексов я делю индексы на две группы: одна для перестройки индекса, а другая для переоценки индекса. Для перестроения индекса я буду использовать несколько иной подход, потому что я не хочу останавливать сеанс перестройки индекса (что приведет к откату и потере всей предыдущей работы). Во время перестроения индекса, если мой сеанс мониторинга обнаружит сценарий использования свободного места в файле tlog, сеанс мониторинга автоматически предварительно увеличит файл tlog, а в худшем случае (т. Е. Диск заполнен) мой сеанс мониторинга создаст другой файл журнала ( но позже я его уроню) на другой диск (резервный диск)
источник
У меня была та же проблема, что и у автора вопроса, и, глядя на его комментарии, могу сказать, что у меня была такая же настройка. Пока я пытался сделать
REORGANIZE
, журнал становится полным, независимо от размера, даже в несколько раз превышающий размер всей таблицы.Проблема была вызвана репликацией транзакций . Очевидно, что журнал не может быть сохранен до
REORGANIZE
операции. Я где-то читал, что это известная проблема Microsoft, но я не уверен, где.После того как я отключил репликацию транзакций, резервные копии журналов снова работали нормально, и создание резервных копий журналов каждые 30 секунд при реорганизации работало хорошо для меня.
источник
Я предполагаю, что вы управляете чем-то вроде:
ИЗМЕНЕНИЕ ИНДЕКСА НА РЕОРГАНИЗАЦИЮ
К сожалению, нет возможности запустить частичную организацию (например, вы можете частично сжать файл журнала). Я могу обдумать эту проблему следующим образом:
1) при выполнении реорганизации установите базу данных в простой режим восстановления, но вы сказали, что это неприемлемо
2) разделить индекс - если вы можете придумать способ разделить индекс, чтобы получить примерно одинаковые по размеру разделы, вы сможете затем реорганизовать (или перестроить с помощью онлайн-опции) каждый раздел независимо и таким образом ограничить рост файла журнала.
Я уверен, что вы делаете это, но если вы этого не сделаете, вы можете инициировать резервное копирование файла журнала до и после выполнения каких-либо оптимизаций индекса, что позволит ему освободить использованное пространство.
источник