Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
 Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
Одновременное выполнение
Guest
Интересует одновременное выполнение транзакций с разными уровнями изоляции.
Если одну транзакцию выполнить с уровнем изоляции ReadCommited, а другую одновременно с первой с уровнем изоляции Serializable, то с каким уровнем каждая из них выполниться.
Т.е. что происходит когда одна транзакция запускается с одним уровнем изоляции, а другая после изменения уровня, но их выполнение пересекается?
3 янв 12, 18:15    [11856201]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
Yo.!
Guest
Одновременное выполнение
Интересует одновременное выполнение транзакций с разными уровнями изоляции.
Если одну транзакцию выполнить с уровнем изоляции ReadCommited, а другую одновременно с первой с уровнем изоляции Serializable, то с каким уровнем каждая из них выполниться.
Т.е. что происходит когда одна транзакция запускается с одним уровнем изоляции, а другая после изменения уровня, но их выполнение пересекается?

в промышленных субд каждая со своим. транзакции могут натыкаться на блокировки друг друга, что задержит выполнение, но выполняться будет каждая со своим уровнем
3 янв 12, 18:36    [11856262]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
Одновременное выполнение
Guest
Yo.!
Одновременное выполнение
Интересует одновременное выполнение транзакций с разными уровнями изоляции.
Если одну транзакцию выполнить с уровнем изоляции ReadCommited, а другую одновременно с первой с уровнем изоляции Serializable, то с каким уровнем каждая из них выполниться.
Т.е. что происходит когда одна транзакция запускается с одним уровнем изоляции, а другая после изменения уровня, но их выполнение пересекается?

в промышленных субд каждая со своим. транзакции могут натыкаться на блокировки друг друга, что задержит выполнение, но выполняться будет каждая со своим уровнем

Каждая со своим в смысле:
1. Что транзакция в соответствии со своим уровнем будет видеть другие транзакции?
Т.е. если Serializable завершилась, то в ReadCommited будут видны данные первой, но не наоборот.
или
2. Что данные транзакции в соответствии со своим уровнем будут доступны другим?

Т.е. если есть в Oracle хотя бы одна активная транзакция Serializable, то пока она не завершиться будут храниться все старые версии данных на момент её старта, даже если остальные транзакции ReadCommited?
3 янв 12, 18:53    [11856313]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
Yo.!
Guest
Одновременное выполнение,

первое. в оракле сериализабле смотрит на SCN блока, если он старше времени старта сериализабл транзакции он возьмет ту версию блока которая была актуальна на момент старта сериализабл транзакции. хранит оракл блоки как минимум на время указанное в переменной UNDO_RETENTION, если там дано 24 часа, значит будет 24 часа держать, не зависимо нужны ли какой-либо транзакции эти блоки. данные из UNDO для flash back наворотов используются. если транзакция длялась дольше времени UNDO_RETENTION, то получит ошибку ORA-1555 и получит rollback насильно.
блокировочники будут расставлять блокировки, там восновном проблема дедлока, когда одна транзакция понаставила локи на одну часть базы, другая на другую. если ни та не другая дальше продвинуться не может, сервер насильно делает rollback одной из них.
3 янв 12, 19:29    [11856393]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
Одновременное выполнение
Guest
Yo.!
Одновременное выполнение,

первое. в оракле сериализабле смотрит на SCN блока, если он старше времени старта сериализабл транзакции он возьмет ту версию блока которая была актуальна на момент старта сериализабл транзакции. хранит оракл блоки как минимум на время указанное в переменной UNDO_RETENTION, если там дано 24 часа, значит будет 24 часа держать, не зависимо нужны ли какой-либо транзакции эти блоки. данные из UNDO для flash back наворотов используются. если транзакция длялась дольше времени UNDO_RETENTION, то получит ошибку ORA-1555 и получит rollback насильно.
блокировочники будут расставлять блокировки, там восновном проблема дедлока, когда одна транзакция понаставила локи на одну часть базы, другая на другую. если ни та не другая дальше продвинуться не может, сервер насильно делает rollback одной из них.

А нельзя сделать чтобы не было жесткого UNDO_RETENTION, а блоки удалялись по мере отсутствия их необходимости?

И кстати как Oracle себя поведет?
если была таблица T с одной строкой и полем a=1

и Serializable выполнит:
UPDATE t SET a = 0;


А ReadCommited :
UPDATE t SET a = 2 WHERE a = 1;

Причем WHERE a = 1 отработало до завершения Serializable-транзакции, а SET a = 2 после завершения Serializable-транзакции.


Блокировочник очевидно выполнит все без ошибок и будет a=2. А если с дополнительной U-блокировкой, то a=0.
3 янв 12, 19:58    [11856428]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
Yo.!
Guest
Одновременное выполнение
А нельзя сделать чтобы не было жесткого UNDO_RETENTION, а блоки удалялись по мере отсутствия их необходимости?

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


Одновременное выполнение
И кстати как Oracle себя поведет?
если была таблица T с одной строкой и полем a=1

и Serializable выполнит:
UPDATE t SET a = 0;


А ReadCommited :
UPDATE t SET a = 2 WHERE a = 1;

Причем WHERE a = 1 отработало до завершения Serializable-транзакции, а SET a = 2 после завершения Serializable-транзакции.


Блокировочник очевидно выполнит все без ошибок и будет a=2. А если с дополнительной U-блокировкой, то a=0.

то же самое будет. на модифицирующие запросы оракл ставит эксклюзивные блокировки. U-блокировки тоже есть.
3 янв 12, 20:13    [11856450]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
unlogged tables
Guest
Yo.!
Одновременное выполнение
А нельзя сделать чтобы не было жесткого UNDO_RETENTION, а блоки удалялись по мере отсутствия их необходимости?

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

А для unlogged tables я так понимаю не выполняется ни одно свойство из ACID?
Т.е. для этих таблиц не хранятся версии и доступ к ним всегда осуществляется как к грязным данным.
3 янв 12, 22:21    [11856733]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4919
Блог
unlogged tables
Yo.!
пропущено...

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

А для unlogged tables я так понимаю не выполняется ни одно свойство из ACID?
Т.е. для этих таблиц не хранятся версии и доступ к ним всегда осуществляется как к грязным данным.
Я не знаю, что такое unlogged tables, но если вы о таблицах в режиме NOLOGGING, то вы путаете функции журналов и табличного пространства undo. В журнал пишутся все транзакции, а undo хранит предыдущие версии.
3 янв 12, 22:59    [11856856]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
unlogged tables
Guest
Alexander Ryndin
unlogged tables
пропущено...

А для unlogged tables я так понимаю не выполняется ни одно свойство из ACID?
Т.е. для этих таблиц не хранятся версии и доступ к ним всегда осуществляется как к грязным данным.
Я не знаю, что такое unlogged tables, но если вы о таблицах в режиме NOLOGGING, то вы путаете функции журналов и табличного пространства undo. В журнал пишутся все транзакции, а undo хранит предыдущие версии.

Т.е. NOLOGGING исключительно только на журнал влияет, т.е. из ACID, только Durability не соблюдается, а ACI соблюдаются в полном объеме?
И при нештатном shootdown сервера все NOLOGGING-таблицы будут очищены.
3 янв 12, 23:14    [11856911]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4919
Блог
unlogged tables
Alexander Ryndin
пропущено...
Я не знаю, что такое unlogged tables, но если вы о таблицах в режиме NOLOGGING, то вы путаете функции журналов и табличного пространства undo. В журнал пишутся все транзакции, а undo хранит предыдущие версии.

Т.е. NOLOGGING исключительно только на журнал влияет, т.е. из ACID, только Durability не соблюдается, а ACI соблюдаются в полном объеме?
И при нештатном shootdown сервера все NOLOGGING-таблицы будут очищены.
В целом да, но еще нужно понимать, что NOLOGGING не влияет на обычные INSERT, UPDATE, DELETE.
4 янв 12, 00:49    [11857121]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
unlogged tables
Guest
Alexander Ryndin
unlogged tables
пропущено...

Т.е. NOLOGGING исключительно только на журнал влияет, т.е. из ACID, только Durability не соблюдается, а ACI соблюдаются в полном объеме?
И при нештатном shootdown сервера все NOLOGGING-таблицы будут очищены.
В целом да, но еще нужно понимать, что NOLOGGING не влияет на обычные INSERT, UPDATE, DELETE.

В смысле только CREATE TABLE AS работает?
А ещё есть варианты вставить данные в не пустую таблицу но без записи в журнал транзакций?
4 янв 12, 03:36    [11857224]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
Alexander Ryndin
Member

Откуда:
Сообщений: 4919
Блог
unlogged tables
Alexander Ryndin
пропущено...
В целом да, но еще нужно понимать, что NOLOGGING не влияет на обычные INSERT, UPDATE, DELETE.

В смысле только CREATE TABLE AS работает?
А ещё есть варианты вставить данные в не пустую таблицу но без записи в журнал транзакций?
С помощью direct load (INSERT /*+APPEND*/, SQL Loader)
4 янв 12, 07:39    [11857266]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение транзакций с разными уровнями изоляции.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67390
Блог
Одновременное выполнение
А нельзя сделать чтобы не было жесткого UNDO_RETENTION, а блоки удалялись по мере отсутствия их необходимости?

Необходимость - понятие философское. До той поры, пока есть место "куда писать версии", удалить версию сейчас или позже - в общем-то внутреннее дело сервера. Поведение начинает быть значимым, когда место кончается (чего, конечно, в отстроенной системе происходить не должно).

Когда место кончается, у сервера есть выбор из следующих вариантов:

  • Найти ещё место
  • Грохнуть часть старых версий
  • Остановить поток новых версий

    Этот выбор таков не для оракла, а для любого версионника. Так вот, UNDO_RETENTION грубо говоря, регулирует, какой из вариантов сервер будет склонен выбирать. Если можно побить старые версии, он их побьёт, если сказано их сохранить - попытается расширить файл, и при невозможности скажет пишущим транзакциям out of space
  • 4 янв 12, 18:17    [11858588]     Ответить | Цитировать Сообщить модератору
    Все форумы / Сравнение СУБД Ответить