Dead Lock происходит даже обновление на разных полях
Я пытался разработать репликацию из базы данных Firebird в другую. Я просто добавляю новое поле в таблицы с именем replication_flag
,
Моя программа репликации запускает транзакцию на чтение, выбирает строки, обновляет это replication_flag
поле строк затем фиксирует или откатывает.
Мои производственные клиенты не обновляют это replication_flag
поле и использует чтение зафиксированной изоляции. Мой единственный клиент репликации только обновить это replication_flag
поле и не обновляет другие поля.
Я до сих пор вижу мертвые замки и не понимаю почему. Как я могу избежать мертвых замков?
1 ответ
Похоже, что ваше приложение репликации использует большую транзакцию, обновляющую каждую запись каждой таблицы. Возможно, в итоге вся база данных была "заблокирована".
Вы должны рассмотреть возможность использования транзакций по таблице или записи пакетов. также возможно использовать транзакцию только для чтения для чтения и использовать другую транзакцию для записи с частой фиксацией, которая позволяет другим транзакциям обновлять запись.
Интересное слайд-шоу: http://slideplayer.us/slide/1651121/