|
|
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
Ораклисты постоянно говорят о принципе "Читатели не блокирубт писателей, а писатели не блокируют читателей" и что это возможность только в оракле(из-за версионности)! Применим ли этот принцип и к ASE? Помоему жанглируя уровнями изоляции можно добиться таковоже эффекта! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2008, 13:05 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
В оракле этот принцип хорошо применим только к построению некоторых отчетов поверх OLTP систем. А для транзакций, где нужно согласованное чтение (например вычисление текущего остатка на счете перед вводом новой проводки) используется такое-же как и у всех блокировочников блокирующее чтение (SELECT FOR UPDATE). Т.е. наличие фичи неблокируещго чтения - это хорошо, но только для ограниченного числа задач, чудес не бывает. В ASA10 такая фича появилась (Snapshot isolation), но это не панацея. все наши на www.corba.kubsu.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2008, 15:14 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
тоесть если я читаю данные с уровнем изоляции 0 или приписываю noholdlock, то получаю тотже эффект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2008, 16:48 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
cherrex_Denтоесть если я читаю данные с уровнем изоляции 0 или приписываю noholdlock, то получаю тотже эффект? Я бы не был так категоричен, отвечая "да" - чтение с уровнем изоляции 0 - это грязное чтение. Т.е. если предположить что в один момент времени один коннект делает вставку/изменения в таблицу а другой читает из нее с isolation level 0, то читатель может увидеть не зафиксированные (без сommit) данные. В версионике такого не будет никогда. Читатель всегда будет видеть закомиченные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2008, 18:21 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
автор Читатель всегда будет видеть закомиченные данные. а если данные не закоммичены? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2008, 19:43 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
cherrex_Den пишет: > Ораклисты постоянно говорят о принципе "Читатели не блокирубт писателей, > а писатели не блокируют читателей" и что это возможность только в > оракле(из-за версионности)! Применим ли этот принцип и к ASE? Нет, не применим. в ASE в общем случае Читатели блокируют писателей писатели блокируют читателей >Помоему жанглируя уровнями изоляции можно добиться таковоже эффекта! Жонглируя уровнями изоляции можно вообще всего чего угодно добиться в ORACLE это на всех уровнях, исключая 3-ий. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2008, 20:13 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
cherrex_Den пишет: > тоесть если я читаю данные с уровнем изоляции 0 или приписываю > noholdlock, то получаю тотже эффект? Нет, не получаете. Кстати, уровень изоляции 0 и noholdlock -- это не одно и то же. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2008, 20:15 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
cherrex_Den пишет: > Читатель всегда будет видеть закомиченные данные. > а если данные не закоммичены? Тогда ничего не увидит. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2008, 20:16 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
cherrex_Den пишет: > тоесть если я читаю данные с уровнем изоляции 0 Немного неправильно написал. Такого же эффекта не будет, как на оракле, понятно, потому что там обеспечивается уровень 1 как минимум. А тут - 0. Но на 0 -е в ASE Читатели не блокируют писателей писатели не блокируют читателей Т.е. с учётом того, что считанные данные могут быть грязными, да,эффект тот же. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2008, 20:19 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
Все понял! И последний глупый вопрос: В ase можно определить грязная строка или нет, при уровне 0 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2008, 20:44 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
cherrex_DenВ ase можно определить грязная строка или нет, при уровне 0 ? нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2008, 11:28 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
я так и думал! А что произойдет если откроиться транзакция, сделаеться инсерт и до коммита или ролбэка кто-то сделает селект? таблица с построчной схемой блокировки а селект с уровнем изоляции 1! Будет ли ждать селект пока транзакция с инсертом закроиться или селект вернет данные без этой вставляемой строки? P.S речь идет об ASE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2008, 18:18 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
cherrex_DenВсе понял! И последний глупый вопрос: В ase можно определить грязная строка или нет, при уровне 0 ? Конечно же нет ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2008, 21:58 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
А что произойдет если откроиться транзакция, сделаеться инсерт и до коммита или ролбэка кто-то сделает селект? Зависит от схемы блокирования таблицы (DOL/APL) таблица с построчной схемой блокировки а селект с уровнем изоляции 1! Будет ли ждать селект пока транзакция с инсертом закроиться или селект вернет данные без этой вставляемой строки? Нет, не будет. Но это - особый случай, можно сказать - исключение. В ASE на DOL таблицах вставки проходят вообще незаметно для всех остальных транзакций. Как-то ASE их прячет от всех, магическим образом (на самом деле не знаю даже как, но это ОЧЕНЬ ЗДОРОВО !) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2008, 22:16 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
MasterZivКак-то ASE их прячет от всех, магическим образом (на самом деле не знаю даже как, но это ОЧЕНЬ ЗДОРОВО !) ASE не прячет их, а просто когда идет select (c уровнем изоляции не равным 3), ASE делает попытки захватить LOCKи shared page/row, и когда видит что локи на уровне страницы/строки захватить не удается , то просто пропускает эти залоченные строки. Пример Допустим в некой сессии идет вставки и 2 строки залочены эксклюзивной блокировкой fid spid loid locktype table_id page row dbname class context ----------- ----------- ----------- -------- ----------- ----------- ----------- ------ ----- ------- 0 25 50 Ex_intent 1632005814 0 0 ABC Non Cursor Lock 0 25 50 Ex_row 1632005814 55145 8 ABC Non Cursor Lock 0 25 50 Ex_row 1632005814 55145 9 ABC Non Cursor Lock В другой сессии при select c isol level <>3 выборка, будет постранично/построчно проходится по таблице и обнаружит 2 залоченные строки. Далее она их просто пропустит и пойдет далее lock_multiple shared intent db=4 obj=1632005814 splk=0x200c44e0 suff=0 LOCK_GRANTED ... lock_logical shared row db=4 obj=1632005814 pg=55145 row=8 ctx=0x0 suff=0 pspid=24 LOCK_DIDNTQUEUE lock_logical shared row db=4 obj=1632005814 pg=55145 row=9 ctx=0x0 suff=0 pspid=24 LOCK_DIDNTQUEUE ... lm_internal_ctxchain_release shared intent obj=1632005814 db=4 ctx=0x1 suff=0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 12:25 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
moris пишет: Ну в общем, всё очень классно в ASE с этим ! Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 16:46 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
cherrex_DenОраклисты постоянно говорят о принципе "Читатели не блокирубт писателей, а писатели не блокируют читателей" и что это возможность только в оракле(из-за версионности)! Применим ли этот принцип и к ASE? Помоему жанглируя уровнями изоляции можно добиться таковоже эффекта! Конечно можно, только за счет других sessions/users под isol.level 3 Все будут ждать (locks, deadlocks), пока вы соизволите получить consistent (in time) result of select stmt (A только такой и будет "правильным" (на конец или начало selecta)!, иначе - mess (по времени) как сейчас с обычным level 1 и реализацией ANSI levels блокировками). Реализация ANSI levelov с помощью блокировок - грубая ошибка разработчиков Sybase (и DB2(Gray "ранний")) я думаю, Microsoft (Gray "поздний") осознал это сделав snapshot isolation наконец-тo, Оracle делался "в стороне" от IBM, Sybase, universities,ANSI и обычый здравый смысл ( select result должe быть консисент по времени и его получение не должо мешать другим работать при этом) победил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 18:41 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
2Zhora: Не понял, что вы имели ввиду своим вторым параграфом. Все уровни изоляции давно описаны, не понимаю, какие такие неразрешимые проблемы могут возникать. Выбирайте подходящий уровень изоляции и работайте в нем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 20:12 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
Вопрос о том как эти уровни (в частности 3-ii) реализоваы: с блокировками(=> мешают другим)-Sybase,Db2 или без: Oracle (default snapshot isolation), SQL Server 2005 (snapshot isolation option). K томy же ANSI стандарт "дорос" до snapshot isolation сравнительно недавно. Почитайте эту статью "Critique of Ansi SQL isolation level" http://www.cs.umb.edu/~poneil/iso.pdf. Где то есть русский перевод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 21:21 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
+ Fekete, Alan; Liarokapis, Dimitrios; O'Neil, Elizabeth; O'Neil, Patrick & Shasha, Dennis (2005), “Making Snapshot Isolation Serializable”, ACM Transactions on Database Systems 30 (2): 492-528, ISSN 0362-5915 (собственно Oracle select for update и предназначен для этого (article subject)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 21:50 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
Ggg_old...такое-же как и у всех блокировочников блокирующее чтение (SELECT FOR UPDATE)... все наши на www.corba.kubsu.ru Вот именно этого "чисто" Oracle stmt-a (что позволяет "подтянуть" snapshot isolation до serialazible) y Sybase,DB2 и нет , a lost update anomaly предлагается разрешать (cm.Date) используя select holdlock => "artificial deadlock" (потом 1205 err. - невозможно проверить ни в T-SQL, ни в ODBC !), другой путь: сначала update-om заблокировать запись, чтобы другой select не прошел (ждал) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2008, 22:40 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
На сколько я понимаю(поправте если ошибаюсь), что snapshot - это чтение таблицы и если натыкаемся на строки которые используються в не завершенных транзакциях то беруться значения бывшие, до начало транзакций! То есть кто-то меняет значения в какой-то строке "А" на "Б", и до закрытия транзакции другой делает селект, то селект получит значение "А" и не будет ждать пока первая транзакция закроиться. Скажите это не относиться к такому-же "грязному чтению", как и при уровне изоляции 0! В первом случае произойдет "коммит" и данные будут "грязные", в случае с уровнем 0 произойдет "ролбэк" и данные будут такие-же "грязные". Или я опять что-то напутал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2008, 21:39 |
|
||
|
Применим прицип Oracle к ASE
|
|||
|---|---|---|---|
|
#18+
cherrex_Den пишет: > На сколько я понимаю(поправте если ошибаюсь), что snapshot - это чтение > таблицы и если натыкаемся на строки которые используються в не > завершенных транзакциях то беруться значения бывшие, до начало > транзакций! Ошибаетесь. Вообще все строки, читаемые транзакцией, имеют состояние на начало этой транзакции. Хотя формально это не определено, в стандарте нет такого уровня изоляции. Одно из определений даётся в статье Грея и его коллег (ссылка была в теме). То есть кто-то меняет значения в какой-то строке "А" на "Б", > и до закрытия транзакции другой делает селект, то селект получит > значение "А" и не будет ждать пока первая транзакция закроиться. Это - да. Скажите > это не относиться к такому-же "грязному чтению", как и при уровне > изоляции 0! Нет. Данные, читаемые транзакцией, принадлежат к одному из согласованных состояний БД. При dirty read данные могут быть любыми. В первом случае произойдет "коммит" и данные будут > "грязные", в случае с уровнем 0 произойдет "ролбэк" и данные будут > такие-же "грязные". Если первый случай - это snapshot изоляция, то в ней НЕТ грязных данных, все данные, читаемые транзакцией, принадлежат одному из согласованных состояний БД. В слуючае dirty read данные могут быть любыми. Если интересно, почитайте действительно статью. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2008, 00:13 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=35453163&tid=2011453]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 540ms |

| 0 / 0 |
