Как Вы справляетесь с задачей изменения схемы производственной базы данных MySQL?

Я устанавливаю Adobe Reader через присвоение программного обеспечения и Групповую политику. Я применял основанные на MSP патчи к своим точкам установки Adobe Reader и затем сообщал, что клиентские компьютеры для переустановки через "Повторно развертывают..." функциональность в Групповой политике. Мне особенно не нравится делать вещи этот путь, но это - наименее трудоемкий метод I, видят.

Этот недавний патч Adobe Reader (9.1.2) основан на MSP, таким образом, я могу развернуть его своей обычной манерой. Если Adobe решает начать распределять основанные на EXE патчи, то я имею проблему и должен начать писать сценарии. (Надо надеяться, они будут придерживаться основанного на Windows Installer режима исправления отсюда на. Мы будем видеть...),

Если они действительно перейдут к основанным на EXE обновлениям, то я запишу сценарии для развертывания их тихо с помощью компьютерных сценариев запуска. (Если у Вас есть деньги пони для Менеджера конфигурации System Center Microsoft, можно использовать Издателя Обновления Центра встроенной системы для развертывания этих типов обновлений.)

Наличие самих клиентских компьютерных патчей загрузки через встроенную updater функциональность в Adobe Reader бесполезно мне. Я должен смочь централизованно управлять развертыванием обновлений, таким образом, что я могу протестировать обновление до развертывания. Пользователи не имеют права "Администратора" на своих компьютерах и не могут установить обновления сами так или иначе. Я отключаю updater как преобразование к MSI для Adobe Reader.


Я никогда не использовал сторонний инструмент управления исправлениями, таким образом, я не могу прокомментировать. Инструменты управления исправлениями, которые утверждают, что автоматизировали процесс исправления, всегда давали мне немного паузы. Инструменты, которые делают "создание снимков", на самом деле не получают логику в установщике и могли сделать неправильную вещь при обстоятельствах, отличающихся чем тогда, когда снимок был взят. Инструменты, которые "тихо устанавливают" патчи часто, требуют того же объема работы, который я поместил в запись сценария для установки патча так или иначе. По сути, я сомнителен из эффективности и надежности инструментов "управления исправлениями" по использованию присвоения программного обеспечения, "Повторно развернитесь...", и рукописные сценарии для развертывания патчей.

2
задан 26 October 2009 в 00:10
2 ответа

Да, MySQL блокирует таблицу полностью, пока это делает оператор ALTER TABLE. Большая часть этого времени проведена в физическом копировании таблицы, которая является, почему рекомендуется соединить все необходимые изменения в одном операторе ALTER TABLE.

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

В первую очередь, много сред имеют тайм-ауты нескольких минут, ожидая таблицы для становления доступными для их запроса и не знают (и действительно трудно проверить), почему таблица заблокирована. Я использовал эту причуду живого веб-сайта, чтобы сделать изменения в таблицах. На сайте я раньше заботился, я полагал, что у нас был допуск приблизительно 7 минут, прежде чем кто-то начал замечать.:-) Это помогает удостовериться, что Ваш босс находится на Вашей стороне.

Другой способ сделать это состоит в том, чтобы сделать прием select-insert-rename. Это работает хорошо, если таблица любой имеет довольно низко UPDATE частота, или просто цель INSERTs. Основные шаги должны скопировать схему таблицы, внести необходимые изменения, ремесло оператор, чтобы сделать a INSERT...SELECT от старого до нового, и переименовывают таблицы (сделайте переименовывание в одном операторе). Вы также должны подготовить заранее оператор для копирования по любым "новым" записям, которые были добавлены или обновили между SELECT и RENAME. Я также сделал это несколько раз в прошлом задании.

Однако существуют, прибывают протесты:

  • У Вас почти наверняка будут проблемы, если исходной таблицей будет MyISAM, если, возможно, таблица почти никогда не пишется в. Это из-за способа, которым блокируют таблицы MyISAM. Это работает лучше с таблицами InnoDB, потому что это может все еще быть считано пока Ваше большое INSERT...SELECT работает.
  • Вам нужен надежный способ выяснить записи, которые были добавлены или изменены между SELECT и RENAME. Для таблиц, которые только используются для INSERT, используйте auto_increment столбец. Для таблиц, которые добираются UPDATEs, Вам будет нужен надежный измененный в последний раз столбец.

Другие способы заняться этой проблемой включают ведомые устройства изменения и обработку отказа приложения. Это более тесно связано с тем, как Ваши базы данных копируют. Я также не сделал этого сам, таким образом, я не могу описать точные шаги.

Наконец, существует дюжина настроек сервера, которые можно вертеть и еще несколько, которые намного более трудно изменить, который будет влиять, сколько времени это берет, чтобы скопировать таблицу. Буфер вида один, но также и сколько MySQL памяти позволяют использовать, другой. (Помните, что можно установить многие из для каждого подключения также вместо того, чтобы установить некоторых из них высоко глобально.) При контакте с большим количеством данных MySQL имеет эффект 'переломного момента', где дела довольно линейны до определенного размера и затем идут к черту внезапно. Это часто придумывает сложные запросы, работающие с большим количеством данных, и связано с внутренними размерами временной таблицы и сколько памяти позволяется использовать, но это может придумать изменения таблицы, потому что они включают переиндексацию данных. Это - одна причина, почему, давая базе данных больше памяти является почти всегда хорошей вещью.

2
ответ дан 3 December 2019 в 11:18

Это - самая большая жалоба, которую Вы услышали о MySQL? Geez, у меня есть блок, полный больших, чем это... (история в течение другого дня, возможно)

Да, MySQL полностью блокирует таблицу при выполнении ALTER TABLE на нем; никакие чтения или записи в течение какого-то времени и запросы, которые пытаются сделать так, не приостанавливаются, пока это не завершено. В нечетном случае я должен изменить схему большой таблицы MySQL (маленькие завершают свое изменение достаточно быстро, что это не вызывает noticable проблему), я обычно просто планирую окно обслуживания и делаю это затем. Не трудно сравнить точно, сколько времени такое изменение возьмет для данной таблицы на копии.

Если у Вас есть одно из тех слабоумных управлений, которое отказывается позволять Вам иметь разумные окна обслуживания (и если так, работайте как ад к другому заданию), затем, я услышал о людях, делающих вещи как создание копии схемы таблицы, изменив пустую таблицу, то, делая выбор копии в новую таблицу (с записью закрепляют для предотвращения изменений), затем переименование таблиц. Походит на слишком большое количество риска для моего вкуса. mk-table-sync Maatkit имеет режим, чтобы сделать это, если Вы предпочли бы мочь обвинить кого-то еще, когда он умирает.

Пока PostgreSQL не имеет "гигантской блокировки гибели", Вы все еще подвергаетесь значительному хиту производительности для изменения схемы таблицы в PgSQL - это - много диска IO. Я не могу вообразить, как любой RDBMS будет способным избежать этого, все же.

1
ответ дан 3 December 2019 в 11:18
  • 1
    Ваши другие большие проблемы с MySQL. It' s всегда лучше для приобретения знаний обо всех ловушках заранее. –  Continuation 26 October 2009 в 08:41
  • 2
    доля Ваши другие большие проблемы с MySQL –  Continuation 26 October 2009 в 08:42

Теги

Похожие вопросы