|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
Интересует одновременное выполнение транзакций с разными уровнями изоляции. Если одну транзакцию выполнить с уровнем изоляции ReadCommited, а другую одновременно с первой с уровнем изоляции Serializable, то с каким уровнем каждая из них выполниться. Т.е. что происходит когда одна транзакция запускается с одним уровнем изоляции, а другая после изменения уровня, но их выполнение пересекается? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2012, 18:15 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
Одновременное выполнениеИнтересует одновременное выполнение транзакций с разными уровнями изоляции. Если одну транзакцию выполнить с уровнем изоляции ReadCommited, а другую одновременно с первой с уровнем изоляции Serializable, то с каким уровнем каждая из них выполниться. Т.е. что происходит когда одна транзакция запускается с одним уровнем изоляции, а другая после изменения уровня, но их выполнение пересекается? в промышленных субд каждая со своим. транзакции могут натыкаться на блокировки друг друга, что задержит выполнение, но выполняться будет каждая со своим уровнем ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2012, 18:36 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
Yo.!Одновременное выполнениеИнтересует одновременное выполнение транзакций с разными уровнями изоляции. Если одну транзакцию выполнить с уровнем изоляции ReadCommited, а другую одновременно с первой с уровнем изоляции Serializable, то с каким уровнем каждая из них выполниться. Т.е. что происходит когда одна транзакция запускается с одним уровнем изоляции, а другая после изменения уровня, но их выполнение пересекается? в промышленных субд каждая со своим. транзакции могут натыкаться на блокировки друг друга, что задержит выполнение, но выполняться будет каждая со своим уровнем Каждая со своим в смысле: 1. Что транзакция в соответствии со своим уровнем будет видеть другие транзакции? Т.е. если Serializable завершилась, то в ReadCommited будут видны данные первой, но не наоборот. или 2. Что данные транзакции в соответствии со своим уровнем будут доступны другим? Т.е. если есть в Oracle хотя бы одна активная транзакция Serializable, то пока она не завершиться будут храниться все старые версии данных на момент её старта, даже если остальные транзакции ReadCommited? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2012, 18:53 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
Одновременное выполнение, первое. в оракле сериализабле смотрит на SCN блока, если он старше времени старта сериализабл транзакции он возьмет ту версию блока которая была актуальна на момент старта сериализабл транзакции. хранит оракл блоки как минимум на время указанное в переменной UNDO_RETENTION, если там дано 24 часа, значит будет 24 часа держать, не зависимо нужны ли какой-либо транзакции эти блоки. данные из UNDO для flash back наворотов используются. если транзакция длялась дольше времени UNDO_RETENTION, то получит ошибку ORA-1555 и получит rollback насильно. блокировочники будут расставлять блокировки, там восновном проблема дедлока, когда одна транзакция понаставила локи на одну часть базы, другая на другую. если ни та не другая дальше продвинуться не может, сервер насильно делает rollback одной из них. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2012, 19:29 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
Yo.!Одновременное выполнение, первое. в оракле сериализабле смотрит на SCN блока, если он старше времени старта сериализабл транзакции он возьмет ту версию блока которая была актуальна на момент старта сериализабл транзакции. хранит оракл блоки как минимум на время указанное в переменной UNDO_RETENTION, если там дано 24 часа, значит будет 24 часа держать, не зависимо нужны ли какой-либо транзакции эти блоки. данные из UNDO для flash back наворотов используются. если транзакция длялась дольше времени UNDO_RETENTION, то получит ошибку ORA-1555 и получит rollback насильно. блокировочники будут расставлять блокировки, там восновном проблема дедлока, когда одна транзакция понаставила локи на одну часть базы, другая на другую. если ни та не другая дальше продвинуться не может, сервер насильно делает rollback одной из них. А нельзя сделать чтобы не было жесткого UNDO_RETENTION, а блоки удалялись по мере отсутствия их необходимости? И кстати как Oracle себя поведет? если была таблица T с одной строкой и полем a=1 и Serializable выполнит: Код: plsql 1.
А ReadCommited : Код: plsql 1.
Причем WHERE a = 1 отработало до завершения Serializable-транзакции, а SET a = 2 после завершения Serializable-транзакции. Блокировочник очевидно выполнит все без ошибок и будет a=2. А если с дополнительной U-блокировкой, то a=0. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2012, 19:58 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
Одновременное выполнениеА нельзя сделать чтобы не было жесткого UNDO_RETENTION, а блоки удалялись по мере отсутствия их необходимости? нет. можно создавать отдельные сегменты отката под тяжелые транзакции и потом их грохать руками, но по сути нет. да и нафиг не нужно, эти блоки потом очень пригождаются когда начинаются разборы полета и нужно поглядеть как база выглядела в какой-то момент в прошлом. Одновременное выполнениеИ кстати как Oracle себя поведет? если была таблица T с одной строкой и полем a=1 и Serializable выполнит: Код: plsql 1.
А ReadCommited : Код: plsql 1.
Причем WHERE a = 1 отработало до завершения Serializable-транзакции, а SET a = 2 после завершения Serializable-транзакции. Блокировочник очевидно выполнит все без ошибок и будет a=2. А если с дополнительной U-блокировкой, то a=0. то же самое будет. на модифицирующие запросы оракл ставит эксклюзивные блокировки. U-блокировки тоже есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2012, 20:13 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
Yo.!Одновременное выполнениеА нельзя сделать чтобы не было жесткого UNDO_RETENTION, а блоки удалялись по мере отсутствия их необходимости? нет. можно создавать отдельные сегменты отката под тяжелые транзакции и потом их грохать руками, но по сути нет. да и нафиг не нужно, эти блоки потом очень пригождаются когда начинаются разборы полета и нужно поглядеть как база выглядела в какой-то момент в прошлом. А для unlogged tables я так понимаю не выполняется ни одно свойство из ACID? Т.е. для этих таблиц не хранятся версии и доступ к ним всегда осуществляется как к грязным данным. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2012, 22:21 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
unlogged tablesYo.!пропущено... нет. можно создавать отдельные сегменты отката под тяжелые транзакции и потом их грохать руками, но по сути нет. да и нафиг не нужно, эти блоки потом очень пригождаются когда начинаются разборы полета и нужно поглядеть как база выглядела в какой-то момент в прошлом. А для unlogged tables я так понимаю не выполняется ни одно свойство из ACID? Т.е. для этих таблиц не хранятся версии и доступ к ним всегда осуществляется как к грязным данным.Я не знаю, что такое unlogged tables, но если вы о таблицах в режиме NOLOGGING, то вы путаете функции журналов и табличного пространства undo. В журнал пишутся все транзакции, а undo хранит предыдущие версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2012, 22:59 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
Alexander Ryndinunlogged tablesпропущено... А для unlogged tables я так понимаю не выполняется ни одно свойство из ACID? Т.е. для этих таблиц не хранятся версии и доступ к ним всегда осуществляется как к грязным данным.Я не знаю, что такое unlogged tables, но если вы о таблицах в режиме NOLOGGING, то вы путаете функции журналов и табличного пространства undo. В журнал пишутся все транзакции, а undo хранит предыдущие версии. Т.е. NOLOGGING исключительно только на журнал влияет, т.е. из ACID, только Durability не соблюдается, а ACI соблюдаются в полном объеме? И при нештатном shootdown сервера все NOLOGGING-таблицы будут очищены. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2012, 23:14 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
unlogged tablesAlexander Ryndinпропущено... Я не знаю, что такое unlogged tables, но если вы о таблицах в режиме NOLOGGING, то вы путаете функции журналов и табличного пространства undo. В журнал пишутся все транзакции, а undo хранит предыдущие версии. Т.е. NOLOGGING исключительно только на журнал влияет, т.е. из ACID, только Durability не соблюдается, а ACI соблюдаются в полном объеме? И при нештатном shootdown сервера все NOLOGGING-таблицы будут очищены.В целом да, но еще нужно понимать, что NOLOGGING не влияет на обычные INSERT, UPDATE, DELETE. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2012, 00:49 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
Alexander Ryndinunlogged tablesпропущено... Т.е. NOLOGGING исключительно только на журнал влияет, т.е. из ACID, только Durability не соблюдается, а ACI соблюдаются в полном объеме? И при нештатном shootdown сервера все NOLOGGING-таблицы будут очищены.В целом да, но еще нужно понимать, что NOLOGGING не влияет на обычные INSERT, UPDATE, DELETE. В смысле только CREATE TABLE AS работает? А ещё есть варианты вставить данные в не пустую таблицу но без записи в журнал транзакций? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2012, 03:36 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
unlogged tablesAlexander Ryndinпропущено... В целом да, но еще нужно понимать, что NOLOGGING не влияет на обычные INSERT, UPDATE, DELETE. В смысле только CREATE TABLE AS работает? А ещё есть варианты вставить данные в не пустую таблицу но без записи в журнал транзакций?С помощью direct load (INSERT /*+APPEND*/, SQL Loader) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2012, 07:39 |
|
Одновременное выполнение транзакций с разными уровнями изоляции.
|
|||
---|---|---|---|
#18+
Одновременное выполнениеА нельзя сделать чтобы не было жесткого UNDO_RETENTION, а блоки удалялись по мере отсутствия их необходимости? Необходимость - понятие философское. До той поры, пока есть место "куда писать версии", удалить версию сейчас или позже - в общем-то внутреннее дело сервера. Поведение начинает быть значимым, когда место кончается (чего, конечно, в отстроенной системе происходить не должно). Когда место кончается, у сервера есть выбор из следующих вариантов: Найти ещё место Грохнуть часть старых версий Остановить поток новых версий Этот выбор таков не для оракла, а для любого версионника. Так вот, UNDO_RETENTION грубо говоря, регулирует, какой из вариантов сервер будет склонен выбирать. Если можно побить старые версии, он их побьёт, если сказано их сохранить - попытается расширить файл, и при невозможности скажет пишущим транзакциям out of space ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2012, 18:17 |
|
|
start [/forum/topic.php?fid=35&msg=37601708&tid=1552605]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 141ms |
0 / 0 |