|
|
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
ЛПОткуда взялось "достаточно откатить только последнюю операцию DML", что за мифические сейф-поинты на ровном месте выросли - загадка. Думаю, непонимание связано с тем, что oracle никогда не падает по "конфликтам" на commit . Ну если быть точным - то кроме случаев deferred constraints. Так сделано :) На счет отката DML и savepoints вот Вам пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 19:53 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
ЛПЕсли у Вас "пакет" не есть что-то обязательно целостное для коммита или роллбака - то и не надо называть этот "пакет" транзакцией :). Оно определению противоречит. понятно, что противоречит, но никто ж не запрещает. однако самостоятельное завершение транзакций сервером (по rollback) я не одобряю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 20:29 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
kdvРазумеется, в версионнике есть блокировки на уровне страниц, но это "не те" блокировки. они нужны только для сериализации изменений в пределах одной страницы, и пользователь их ни в каком виде не наблюдает. Вы наверное имели в виду Oracle Latches ? Это работает немного не так, как вы себе это представляете, но в целом идея вам понятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 21:58 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Anton Demidov kdvРазумеется, в версионнике есть блокировки на уровне страниц, но это "не те" блокировки. они нужны только для сериализации изменений в пределах одной страницы, и пользователь их ни в каком виде не наблюдает. Вы наверное имели в виду Oracle Latches ? Это работает немного не так, как вы себе это представляете, но в целом идея вам понятна.Поздравляю - вы по одной фразе в состоянии понять весь объём представлений говорящего :) Page latches есть везде - и что ? Когда речь идёт о блокировках и архитектуре СУБД, то как правило подразумевают именно блокирование выполнения операторов другими операторами . Page latches здесь не имеют никакого отношения к архитектуре СУБД. Впрочем так же как и любые другие ср-ва мультипоточной синхронизации Если под "чистым версионником" кто-то понимает СУБД, в которой вообще никто никого никогда не блокирует, то такого не бывает. Вообще. Да и не надо - если разрешить редактировать одну запись всем одновременно, то ну его нафиг такой "сервер". В FB, например, менеджер блокировок есть, но он никогда не используется для блокирования записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 22:54 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
[quot hvlad]по одной фразе в состоянии понять весь объём представлений говорящего :) Page latches есть везде - и что ?[quot hvlad] Вообще говоря в Вашем случае - да :) Когда человек, рассуждая про oracle, произносит слово "page" - с этого момента уже становится понятно, что конкретно oracle он не владеет. Ну нет там такого понятия, просто нет... :) При этом, разумеется , никто не ставит под сомнение "весь объем представлений". Что же до "в чистом версионнике не бывает блокировок" - то это не более чем смешение понятий. Где, простите, хоть намек на "без блокировок" в слове "версионник"? "Версия" - вижу, а вот "без блокировок" - не вижу, хоть тресните :) Разрешение конфликтов встречных обновлений - обязанность СУБД и требует синхронизации доступа к данным, т.е. тех самых блокировок. Альтернатив что-то не просматривается даже на горизонте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 23:18 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
hvladPage latches здесь не имеют никакого отношения к архитектуре СУБД. Впрочем так же как и любые другие ср-ва мультипоточной синхронизации Похоже, что у вас пока ещё весьма туманные представления о внутренней кухне СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2006, 23:57 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Anton Demidov hvladPage latches здесь не имеют никакого отношения к архитектуре СУБД. Впрочем так же как и любые другие ср-ва мультипоточной синхронизации Похоже, что у вас пока ещё весьма туманные представления о внутренней кухне СУБД.Да конечно - я тут так - погулять вышел ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 01:06 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
автори требует синхронизации доступа к данным, т.е. тех самых блокировок. никто не спорит, однако под "блокировкой" обычно имеют в виду блокирование строки по чтению, строки по записи и т.п. То есть, когда сервер где-то в памяти запоминает, кто чего читает и пишет. И такая трактовка термина "блокировки" привычна большинству, в силу массового использования этих самых "блокировочников". То есть, когда человек произносит "блокировки", непонятно, что он имеет в виду: а) в терминах операций над строками, высокоуровнево, без подробностей сервера б) в терминах "блокировка по чтению/записи", то бишь запоминание "номера" записи для предотвращения каких-либо операций с ней. в) блокировка страниц БД г) другие блокировки, которые я не знаю. в IB/FB есть еще например блокировка таблиц целиком, но не об этом речь. Так что, ну есть в Оракле какой-то там latch. речь-то не про него. p.s. и с наездами поаккуратнее. ну не знает человек про latch, и что? А вы например знаете внутреннее устройство InterBase или Firebird? И какие там где блокировки происходят? IB/FB до лампочки? Ну так и нам Оракл аналогично, в этом самом смысле, по поводу специфических особенностей или глубочайших деталей реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 01:54 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
kdv автори требует синхронизации доступа к данным, т.е. тех самых блокировок. никто не спорит, однако под "блокировкой" обычно имеют в виду блокирование строки по чтению, строки по записи и т.п. И такая трактовка термина "блокировки" привычна большинству, в силу массового использования этих самых "блокировочников". Ну такая трактовка, вообще говоря, ничему не противоречит. Да, действительно, "версионник" имеет возможность обойтись без блокирования строк и может игнорировать dml-блокировки при чтении. Именно ввиду того, что может реконструировать "снимок" (snapshot) данных на некоторый момент времени, индивидуальный для каждого из параллельно выполняющихся запросов. Но это совсем не значит, что "чистота" версионника определяется наличием или отсутствием механизмов блокирования. Oracle - "чистый" версионник. В последних релизах - просто неправдоподобно "чистый", ибо может вернуть консистентный набор данных даже из дропнутых таблиц :) kdvв IB/FB есть еще например блокировка таблиц целиком, но не об этом речь.И в oracle есть, ну и что? kdvТак что, ну есть в Оракле какой-то там latch. речь-то не про него.Совершенно с Вами согласен. К обсуждаемому вопросу эти механизмы не имеют никакого отношения. kdv p.s. и с наездами поаккуратнее. ну не знает человек про latch, и что? Мнэээ... А я разве на кого-то наезжал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 02:32 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
ЛПСейв-поинты - сейв-поинтами Они не только в оракле есть. В аксесе так вообще есть полноценные многоуровневые транзакции. Но откатываются то они целиком :). На счет Accsess-а не скажу, а то недоразумение, что в MS SQL 2000 называется вложенными транзакциями, путать с SavePoint-ами никак не следует. SavePoint дает ИМЕННО возможность ЧАСТИЧНОГО отката транзакции до указанной точки (разумеется пока транзакция не завершена). Это позволяет выполнять в транзакции действия типа "ах так не получилось ? пойдем по другому". В Oracle каждый DML предваряется неявным savepoint-ом, и если оператор валится, АВТОМАТИЧЕСКИ происходит частичный откат к последнему SavePoint-у. Это не плохо и не хорошо, это ЕСТЬ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 08:38 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)а то недоразумение, что в MS SQL 2000 называется вложенными транзакциями, путать с SavePoint-ами никак не следует. Я смотрю, Вы большой знаток MS SQL. :) Можно с этого момента по-подробнее про "недоразумение с вложенными транзакциями в MS SQL"??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 08:56 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous Oracle - "чистый" версионник. В последних релизах - просто неправдоподобно "чистый", ибо может вернуть консистентный набор данных даже из /дропнутых/ таблиц :) Охотно поверю в это если Вы скажете сколько таких (разных) консистентных наборов он в состоянии вернуть одновременно. Т.е. есть таблица в миллион строк которую проапдейтили в 128 подключениях, но транзакции не закоммитили. Потом каждое из подключений выполняет селект в своей транзакции. Что увидит каждое из подключений? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 09:43 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovОхотно поверю в это если Вы скажете сколько таких (разных) консистентных наборов он в состоянии вернуть одновременно. Т.е. есть таблица в миллион строк которую проапдейтили в 128 подключениях ... Есть такой хороший старый анекдот. У попа спрашивают: "Батюшка, а вот сколько Вы можете выпить водки?". Продолжение напомнить? Dimitry SibiryakovЧто увидит каждое из подключений? Консистентный для себя набор данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 10:19 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
pkarklin Gluk (Kazan)а то недоразумение, что в MS SQL 2000 называется вложенными транзакциями, путать с SavePoint-ами никак не следует. Я смотрю, Вы большой знаток MS SQL. :) Можно с этого момента по-подробнее про "недоразумение с вложенными транзакциями в MS SQL"??? мненежалка(с) БОЛMarks the end of a successful implicit or explicit transaction. If @@TRANCOUNT is 1, COMMIT TRANSACTION makes all data modifications performed since the start of the transaction a permanent part of the database, frees the resources held by the transaction, and decrements @@TRANCOUNT to 0. If @@TRANCOUNT is greater than 1, COMMIT TRANSACTION decrements @@TRANCOUNT only by 1 and the transaction stays active. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 10:46 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
2 Gluk (Kazan) Спасибо, но BOL я и без Вашей ссылки не плохо знаю. ;) Меня интересует, что для Вас является "недоразумение"? Т.е. какого поведения Вы бы хотели? Чтобы вложенный коммит коммитил перманентно? Gluk (Kazan)SavePoint дает ИМЕННО возможность ЧАСТИЧНОГО отката транзакции до указанной точки (разумеется пока транзакция не завершена). Это позволяет выполнять в транзакции действия типа "ах так не получилось ? пойдем по другому". ЛП правильно подметил, что Savepointы не только в Oracle есть. SAVE TRANSACTION (Transact-SQL) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 10:55 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
IMHO Блокировка - это приостановление текущего процесса(транзакции) до завершения работы в некотором другом процессе(транзакции). В это смысле у "чистого версионника" действительно нет никаких блокирок. Транзакция (логически) выполняется без прерываний другими транзакциями. Просто при коммите может возникнуть исключение. У "блокировочника" транзакция может быть заблокирована даже при операции чтения. У "нечистого блокировочника" чтение никогда не блокируется, а запись блокируется как у "блокировочника". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 11:01 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
pkarklinЛП правильно подметил, что Savepointы не только в Oracle есть. SAVE TRANSACTION (Transact-SQL) а что, по ЭТОМУ поводу я возражал ??? не заметил :( я сказал, только то, что в Oracle ЕСТЬ SavePoint-ы и благодаря ИМ возможен автоматический откат последнего DML при возникновении исключения (что исключения ПОЯВИЛИСЬ в TSQL я ТОЖЕ знаю, не трудитесь). Что тут непонятно. В отношении ВЛОЖЕННЫХ транзакций, я заметил, что @@TRANCOUNT не стоит путать с SavePoint-ами, это разные вещи (эмоцирнальную окраску оставим в стороне, на вкус и цвет ...) Я ясно изложил свою точку зрения ? P.S. А что, в Access-е SavePoint-ы таки тоже появились ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 11:31 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
xIMHO Блокировка - это приостановление текущего процесса(транзакции) до завершения работы в некотором другом процессе(транзакции). В это смысле у "чистого версионника" действительно нет никаких блокирок. Транзакция (логически) выполняется без прерываний другими транзакциями. Просто при коммите может возникнуть исключение. У "блокировочника" транзакция может быть заблокирована даже при операции чтения. У "нечистого блокировочника" чтение никогда не блокируется, а запись блокируется как у "блокировочника". Команда или вся транзакция (в зависимости от уровня изолированности) должна видеть данные на момент своего старта. Это правило для транзакции. Значит, select видит свой собственный, согласованный на момент старта, набор данных. Другое дело, как технологически обеспечивается это согласование. Либо появляется новая версия данных где-нибудь в кеше, восстановленная из информации для отката ("версионники"). Либо просто селект не дает менять данные никому, блокируя строки ("блокировочники"). Для упрощения многих задач в "версионниках" дополнительно вводятся блокирующие select'ы (select for update), в то время как обычный select ничего и никого не блокирует. А вот dml работает с последней (current) версией данных. Именно поэтому для предотвращения одновременного обновления и вводятся блокировки. Иначе придется потратить кучу ресурсов на разбор версий и разрешение конфликтов (как правило на commit'е), что недопустимо в промышленной эксплуатации. Пусть теоретики трындят о "предательстве чистых идеалов мировой революции" и отсутствии "чистых версионников". Опять-таки, технологически можно проверять какие-то правила либо сразу после выполнения команды с откатом аварийно завершившейся команды, либо только в момент фиксации транзакции с откатом всей транзакции. Здесь все зависит от производителей СУБД и разработчиков приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 11:41 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Привет, AI! Ты пишешь: AIA> Команда или вся транзакция (в зависимости от уровня изолированности) A> должна видеть данные на момент своего старта. Это правило для транзакции.в библятеку! с Гарей вместе. читать книжки. он знает какие. (наверное) hint: Read Committed about... -- With best regards, Мимопроходящий. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 11:56 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous[quot hvlad]по одной фразе в состоянии понять весь объём представлений говорящего :) Page latches есть везде - и что ?[quot hvlad] Вообще говоря в Вашем случае - да :) Когда человек, рассуждая про oracle, произносит слово "page" - с этого момента уже становится понятно, что конкретно oracle он не владеет. Ну нет там такого понятия, просто нет... :)От того, что вместо слова page ораклисты употребляют слово block , ничего не меняется. СУБД по-прежнему общается с файлами данных блоками\страницами и по-прежнему нуждается в механизме синхронизации доступа к страницам из разных потоков. И от версионной\блокировочной архитектуры СУБД этот факт никак не зависит. Записи, транзакции со своими уровнями изоляции, dml\ddl блокировки - это совершенно другие слои абстракции (и реализации тоже). Так шта... не надо путать понятия, ни конкретно , ни абстрактно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 12:12 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)а что, по ЭТОМУ поводу я возражал ??? не заметил :( я сказал, только то, что в Oracle ЕСТЬ SavePoint-ы и благодаря ИМ возможен автоматический откат последнего DML при возникновении исключения (что исключения ПОЯВИЛИСЬ в TSQL я ТОЖЕ знаю, не трудитесь). Что тут непонятно. В отношении ВЛОЖЕННЫХ транзакций, я заметил, что @@TRANCOUNT не стоит путать с SavePoint-ами, это разные вещи (эмоцирнальную окраску оставим в стороне, на вкус и цвет ...) Я ясно изложил свою точку зрения ? P.S. А что, в Access-е SavePoint-ы таки тоже появились ??? Ну, относительно ясно. Хотя по предыдущему посту посторонним действительно могло показаться, что у MS SQL со влеженными транзакциями действительно "недоразумение." Ибо упомянув про @@trancount и не упомянув про SAVE TRANSACTION - картина получилась неполной. На счет Аксесса, сорри, не в курсе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 12:47 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
2 kdv ЛПЕсли у Вас "пакет" не есть что-то обязательно целостное для коммита или роллбака - то и не надо называть этот "пакет" транзакцией :). Оно определению противоречит. понятно, что противоречит, но никто ж не запрещает. Здравствуй жопа новый год :) Определение запрещает, а кроме него - нет, никто не запрещает :)) Еще раз. Если у вас есть "нечто" ("например обновление прайса"), состоящее из отдельных блоков, успешность или неуспешность которых не зависит друг от друга, то нафига это "нечто" засовывать в транзакцию? Чтобы потом с ненужной атомарностью бороться, писать код, который позволит этому "нечту" быть неатомарным набором блоков? Создали себе проблему, а потом мужыствина её решаем ------------------ 2 Gluk (Kazan) На счет Accsess-а не скажу, а то недоразумение, что в MS SQL 2000 называется вложенными транзакциями, путать с SavePoint-ами никак не следует. В MS SQL Server'е и в Oracle - одинаковые "недоразумения". Сейв-поинты есть и там, и там, вложенных транзакций нет ни там, ни там. Сравнивать то, чего нет, с тем, что есть (хоть и в убогеньком виде) - можете хоть на примере сиквела, хоть на примере оракла. Результат один. P.S. А что, в Access-е SavePoint-ы таки тоже появились ??? Я по-моему русским по белому написал, что в аксесе есть полноценные вложенные транзакции. Для тупых повторяю - в аксесе есть вложенные транзакции. Соответственно нет нужды в паллиативах типа сейв-поинтов (и "неявных сейв-поинтов перед началом каждого стейтмента"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 14:55 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
ЛПДля тупых повторяю Ну ежель ты такой умный, почему у тебя вызвал вопрос частичный откат изменений, выполненных последним DML ??? Кстати, мог бы дать сцылку на это чудо в документации. От многократного повторения что "ОНИ ЕСТЬ", собеседнику ни тепло ни холодно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 15:03 |
|
||
|
Версионники и блокировочники
|
|||
|---|---|---|---|
|
#18+
2 Gluk (Kazan) Ну ежель ты такой умный, почему у тебя вызвал вопрос частичный откат изменений, выполненных последним DML ??? Если для тупых надо повторять по два раза, то для некоторых ораклоидов - по три :) Итак. Рассматривался случай, когда транзакция рушится на коммите. Соответственно надо её откатывать. Тут выползает какое-то чудо, и говорит, что откатывать транзакцию целиком не надо, а надо откатить её неполностью, типо только последний DML-стейтмент. Ахуеть. Я ж не виноват, что некоторые ораклоиды не понимают, что падение может быть не только по последнему стейтменту, что никаких сейв-поинтов может не быть установлено (да собственно изначально про них ни слова и не было), и то, что паллиативные сейв-поинты тут вообще не при делах :). Нет, блин, начинается цирк "можно написать приладу", "каждый стейтмент с неявным сейв-поинтом", "ах так не получилось ? пойдем по другому". Кстати, мог бы дать сцылку на это чудо в документации. У тебя есть документация по аксесу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2006, 15:49 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=34014022&tid=1553078]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 150ms |

| 0 / 0 |
