Управление параллелизмом с низкими накладными расходами


Спекулятивная обработка многораздельных транзакций


Рассмотрим похожий пример, в котором система выполняет транзакции A, B1, потом новую многораздельную транзакцию C, увеличивающую на единицу значения и x, и y, и, наконец, транзакцию B2. Система выполняет транзакцию A так же, как и раньше, и в разделе P1 спекулятивным образом выполняется транзакция B1. В разделе P2 спекулятивным образом может выполняться соответствующий фрагмент C, вычисляющий y = 6. При использовании описанной выше локальной схемы спекулятивного выполнения транзакций процесс этого раздела должен ждать фиксации A до возврата этого результата координатору, потому что, если A завершится аварийным образом, этот результат будет некорректным. Однако поскольку у A и C имеется один и тот же координатор, процесс раздела P2 может возвратить координатору результат своего фрагмента транзакции C с дополнительным указанием того, что он зависит от транзакции A. Аналогично, в разделе B1 может спекулятивно выполняться его фрагмент транзакции C, вычисляющий и возвращающий x = 17 вместе с указанием, что этот результат зависит от A. В этом разделе также спекулятивно выполняется транзакция B2, вычисляющая x = 18. Однако процесс раздела не может послать этот результат, поскольку он направлялся бы прямо к клиенту, который ничего не знает про предыдущие транзакции, поскольку однораздельные транзакции не проходят через центральный координатор. Когда многораздельные транзакции зафиксируются, и очередь незафиксированных транзакций станет пустой, процессы разделов смогут возобновить не спекулятивное выполнение транзакций.

После того как координатор фиксирует A, он анализирует результаты C. Поскольку C зависит от A, и A зафиксирована, спекулятивные результаты являются корректными, и C можно зафиксировать. Если бы A завершилась аварийным образом, координатор послал бы сообщение об аварийном завершении A процессам разделов P1 и P2, а затем отбросил бы некорректные результаты, полученные по поводу C. Как и раньше, сообщение об аварийном завершении привело бы к откату процессами разделов всех транзакций, находящихся в очереди незафиксированных транзакций. Транзакция A была бы аварийно завершена, но другие транзакции были бы перемещены в очередь невыполненных транзакций и повторно выполнены в том же порядке. Псевдокод для этой схемы показан на рис. 3.




Начало  Назад  Вперед



Книжный магазин