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

       

Спекулятивное выполнение


При применении этой схемы управления параллелизмом транзакции из очереди выполняются спекулятивным образом в то время, когда применение блокирующей схемы привело бы к простою. Более точно, после выполнения последнего фрагмента многораздельной транзакции процесс раздела должен ждать, чтобы узнать фиксируется транзакция или же откатывается. В большинстве случаев она будет фиксироваться. Поэтому при использовании спекулятивной схемы во время ожидания завершения 2PC выполняются транзакции из очереди. Результаты этих спекулятивно выполненных транзакций нельзя пересылать за пределы базы данных, поскольку если первая транзакция откатится, результаты спекулятивно выполненных транзакций могут оказаться некорректными. Для спекулятивных транзакций должна накапливаться информация, позволяющая в случае необходимости их откатить. Если первая транзакция фиксируется, все спекулятивно выполненные транзакции немедленно фиксируются. Таким образом, спекулятивный подход позволяет скрыть задержку, порождаемую 2PC, путем выполнения во время ожидания полезной работы.

Спекулятивная схема приводит к сериализуемому плану выполнения транзакций, поскольку, когда транзакция t завершает выполнение всех своих операций чтения и записи, и процесс раздела просто ожидает, чтобы узнать, фиксируется t или откатывается, мы можем быть уверены, что любая транзакция t*, использующая результаты t в разделе p, окажется в сериальном плане раздела p после t. Однако t* может читать данные, записанные t, так что, если откатывается t, придется откатить и t*, чтобы избежать проявления "грязных" (откаченных) данных t.

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



Содержание раздела