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


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


Transaction Fragment Arrives if no active transaction: if single partition: execute fragment without undo buffer commit else: execute fragment with undo buffer else if fragment continues active multi-partition transaction: continue transaction by executing fragment if transaction is finished locally: speculate queued transactions else if tail transaction in uncommitted queue is finished locally: execute fragment with undo buffer same_coordinator ← false if all txns in uncommitted queue have same coordinator: same_coordinator ← true if transaction is multi-partition and same coordinator: record dependency on previous multi-partition transaction send speculative results else if: queue fragment

Commit/Abort Decision Arrives if abort: undo and re-queue all speculative transactions undo aborted transaction else: while next speculative transaction is not multi-partition: commit speculative transaction send results execute/speculate queued transactions

Рис. 3. Псевдокод спекулятивного выполнения транзакций

Эта схема позволяет без блокирования выполнять последовательность многораздельных транзакций, в каждой из которых имеется по одному фрагменту для каждого раздела, если все эти транзакции фиксируются. Мы называем такие транзакции простыми многораздельными транзакциями. Транзакции этого вида довольно распространены. Например, если имеется некоторая таблицы, над которой в основном выполняются операции чтения, то может оказаться полезно реплицировать ее по всем разделам. Тогда операции чтения могут выполняться локально, в составе какой-либо однораздельной тразакции. Случайные операции модификации этой таблицы выполяются в виде простой многораздельной транзакции над всеми разделами. Другой пример представляет таблица, разделенная по столбцу x, доступ к записям которой основывается на значении столбца y. Такой доступ может быть обеспечен за счет обращения ко всем разделам этой таблицы, что также является простой многораздельной транзакцией. Третий пример составляют распределенные транзакции из тестового набора TPC-C, которые все являются простыми многораздельными транзакциями [26]. Таким образом, эта оптимизация расширяет виды рабочих нагрузок, для которых полезно спекулятивное выполнение.




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



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