Алло,
Я пишу приложение для базы данных, которое выполняет множество вставок и обновлений с поддельным serialisable
уровнем изоляции (snapshot isolation
).
Чтобы не делать тонны сетевых обращений, я пакетирую вставки и обновления в одной транзакции с PreparedStatement
с. Они должны выходить из строя очень редко, потому что вставки предварительно проверяются и почти не конфликтуют с другими транзакциями, поэтому откат не происходит часто.
Наличие больших транзакций должно быть хорошо для WAL, потому что он может сбрасывать большие куски и не должен сбрасывать для мини-транзакций.
1.) Я вижу только положительный эффект от крупной сделки. Но я часто читаю, что они плохие. Почему они могут быть плохими в моем случае использования?
2.) Сколько стоит проверка конфликтов, когда local snapshots
объединяется с реальной базой данных? База данных должна будет сравнить все наборы записи возможных конфликтов (параллельная транзакция). Или это делает какой-то высокоскоростной ярлык? Или это все равно довольно дешево?
[ РЕДАКТИРОВАТЬ ] Может быть интересно, если кто-то может внести некоторую ясность в то, как база данных изоляции моментальных снимков проверяет, проверяются ли транзакции, имеющие перекрывающиеся части на временной шкале, на несвязанные наборы записи. Потому что это то, что является ложным сериализуемым уровнем изоляции.