MySQL Replication - PullRequest
       0

MySQL Replication

1 голос
/ 17 февраля 2011

У нас есть процесс обновления, который в настоящее время занимает более часа и означает, что наша БД не работает в течение этого периода.

Если я настрою репликацию, это решит проблему, или реплицированная БД пострадает именно отта же проблема, что таблицы будут заблокированы во время обновления?

Возможно ли, чтобы реплицированная БД установила приоритет чтения над обновлением?

Спасибо, D

Ответы [ 2 ]

0 голосов
/ 17 февраля 2011

MySQL дает вам возможность выполнять запросы с задержкой. Пример: «INSERT DELAYED INTO ...», это приведет к тому, что запрос будет выполнен только тогда, когда MYSQL успеет принять запрос.

Исходя из вашего ввода, кажется, что вы используете таблицы MyISAM, MyISAM поддерживает только блокировку всей таблицы. Это означает, что одно обновление заблокирует всю таблицу базы данных, пока запрос не будет завершен. InnoDB, с другой стороны, использует блокировку строк, что не заставит запросы SELECT ожидать (зависать) завершения обновлений.

Так что у вас больше шансов на лучшую жизнь сисадмина, если вы перейдете на InnoDB:)

Когда дело доходит до репликации, вполне нормально разделять обновления и выбирать два разных сервера MySQL, и это, как правило, работает очень хорошо. Но если вы используете таблицы MyISAM и делаете много обновлений, проблема с блокировкой все равно останется.

Итак, мои 2 цента: сначала избавьтесь от MyISAM, затем подумайте о репликации или лучше масштабируемом сервере MySQL, если проблема все еще существует. (Ключом к хорошей производительности в MySQL является наличие как минимум размера всех индексов для всех баз данных в виде физической ОЗУ)

0 голосов
/ 17 февраля 2011

Я подозреваю, что с репликацией вы просто дублируете проблему (если большая часть времени не тратится на процессор и приводит только к обновлению нескольких записей).

Не зная намного больше о структуре, распределении и размере данных, а также о процессе обновления, невозможно сказать, как лучше всего решить проблему, но вы могли бы получить некоторое преимущество от использования innodb вместо C-ISAM и убедившись, что что обновление реализовано в виде нескольких отдельных шагов (например, с использованием хранимых процедур), а не в виде одного оператора DML.

...