Dead Lock происходит даже обновление на разных полях

Я пытался разработать репликацию из базы данных Firebird в другую. Я просто добавляю новое поле в таблицы с именем replication_flag,

Моя программа репликации запускает транзакцию на чтение, выбирает строки, обновляет это replication_flag поле строк затем фиксирует или откатывает.

Мои производственные клиенты не обновляют это replication_flag поле и использует чтение зафиксированной изоляции. Мой единственный клиент репликации только обновить это replication_flag поле и не обновляет другие поля.

Я до сих пор вижу мертвые замки и не понимаю почему. Как я могу избежать мертвых замков?

1 ответ

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

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

Интересное слайд-шоу: http://slideplayer.us/slide/1651121/

Другие вопросы по тегам