Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
>Ну не надо неверсионкам лазить в редологи на селектах а "версионкам" значит надо? ЗЫ: и скока мона глупости говорить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2003, 17:03 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
Сорри, конечно сегменты отката. (Концепции. см Глава 10. Одновременный доступ к данным) http://www.kuzbass.ru/docs/ora-rus-all/rdmbs-scm/7013scm.10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2003, 09:14 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
2 Roman Ignatiev >У IB нет блокировок, версионная структура. .... >Две транзакции как правило спокойно могут изменить одну запись, не говоря >уже о чтении. И если одна из них сделает rollback - все будет в порядке, >Разбор начинается при commit... Поставил я IB (Firebird) ради проверки и получил нормальный логичный (для меня) результат: Изменённая запись блокируется. При попытке изменить её другой сессией получаю: "Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. lock conflict on no wait transaction. deadlock." На чтение второй сессией, естественно, блокировка не влияет (на то она и многоверсионность). По другому и быть не могло... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2003, 18:28 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
Да что вы все, сговорились что-ли? А некто Action и Gt не одно лицо случаем? Если по делу. Я так понимаю что к блокировочникам и MSSQL в частности 2 претензии: 1. Эскалация блокировок - suxx 2. А что собственно за минусы есть у версионников? Отвечаю по порядку: 1 - эскалация вовсе на suxx, если посмотреть по ближе и разобраться что же это такое. Для начала по поводу хинтов типа ROWLOCK. Ценность применения его сомнительна, потому как по дефолту и так накладывается Row Level Lock, в случае отсутствия благоприятных условий типа идущих подряд на всю страницу записей нуждающихся в блокировке, ясен перец, что Page Level Lock в этом случае рулит. А в случае неожиданной нехватки ресурсов ROWLOCK идет лесом и сервер все равно эскалирует блокировку до нужного уровня, чтобы все-таки обработать запрос, а не вывалиться с сообщением о нехватке ресурсов. Далее по поводу дедлоков. Эскалация блокировок не может вызвать дедлок сама по себе, сколько бы транзакций не пыталось его провести одновременно на одну и ту же таблицу. По той простой причине, что эапрос на эскалирующую блокировку хитрый, он не ожидает, а сразу возвращает удалась блокировка или нет. Если удалась, то все хорошо, если не удалась - спокойно пыхтим дальше на прежнем уровне. Эскалация блокировок может лишь спровоцировать дедлок потенциально опасных транзакций, которые без эскалации разошлись бы во времени или по записям, но рано или поздно при увеличении нагрузки дедлок все равно бы случился. Так что это уже ошибки проектирования и неча на сервер пенять, коли руки кривы. Небольшая ремарка по поводу Оракла. Там эскалация не введена по той причине, что S блокировки и так табличные, меньше они не умеют, отсюда и ресурсов на блокировки в принципе меньше надо, а значит можно на этом с экономить ну и конкурентов блокировочников пнуть почти не по делу. 2. У версионников минусы примерно такие: (себя же цитирую) Например в версионнике очень сложно реализовать "по честному" Serialisable уровень изоляции. "не зная броду" можно очень легко привести базу в неконсистентное состояние. Что для грамтного разработчика конечно же не является проблемой, как в прочем и реализация беспрепятственного чтения в блокировочнике. Но в любом случае приходится идти на некоторые жертвы. К примеру попытка в Oracle сделать транзакцию Serialisable в некоторых случаях приводит к снижению возможности параллельной обработки транзакций по сравнению с теми же MSSQL и DB2, отсюда и проигрыш в производительности в тяжелых OLTP приложениях с большим количеством R/W запросов. Это если в краце, с примерами лень расписывать, если кому интересно покопайтесь.... (Ну или на http://www.rsdn.ru в форум с вопросами, я там чаще бываю, сюда по случаю только заглянул) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2003, 18:41 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
2 SiDen > При одинаковой реализации (предпологая что дураков нет в командах реализующих)теоретически версионки уступают в скорости. Это да. А ещё многие СУБД теоретически уступят в скорости досовскому foxpro в локальном однопользовательском режиме. Поскольку последнему вообще не надо заботиться не об уровне изоляции не об транзакциях. А на практике, как правило, минимальный режим изоляции пригодный для непротиворечивого представления информации и нормальной работы с данными это Read Commited и при многопользовательской работе с множеством чтений/записей в это режиме версионки своё возьмут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2003, 20:57 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
2 Merle >Небольшая ремарка по поводу Оракла.....S блокировки и так табличные, меньше они не умеют Меньше и не требуется. В них в Оракле как раз не возникает необходимости. При чтении-то он данных не лочит. >в версионнике очень сложно реализовать "по честному" Serialisable уровень изоляции. В чём сложность ? Можно поподробнее? > "не зная броду" можно очень легко привести базу в неконсистентное состояние. Пример пожалуйста! Как это сделать в Oracle? > Что для грамтного разработчика конечно же не является проблемой, как в прочем и реализация беспрепятственного чтения в блокировочнике. >Но в любом случае приходится идти на некоторые жертвы. Это да. Но для беспрепятственного чтения в блокировочнике жертвовать приходится гораздо большим - использовать Dirty Read. А это как раз приводит базу в "неконсистентное состояние". >К примеру попытка в Oracle сделать транзакцию Serialisable в некоторых случаях приводит к снижению > возможности параллельной обработки транзакций по сравнению с теми же MSSQL и DB2 А если в MSSQL и DB2 сделать транзакцию Serialisable это совершенно не приводит к снижению возможности параллельной обработки транзакций ??? В MSSQL даже Read Commited (что для Oracle нормальный режим) приводит к сильному снижению возможности параллельной обработки транзакций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2003, 21:42 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
To Zaxx: точно, а BerkeleyDB вообще рулеззз ЗЫ: Хватит мерять кита со слоном... у одного уши длиньше, а у другого - хвост... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 09:19 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
2Zaxx Да, измененная запись блокируется, разумеется. Но все происходит не совсем так, как кажется - все зависит от параметров транзакции. Суда по всему, делал пробу через BDE? Я еще немного и запутал :-) Объясню подробнее - допустим, одна транзакция изменяет запись и стоит. Во второй транзакции изменяется эта же запись. Если у нее параметр wait - update будет ждать какое-то время (обычно 10 секунд), что сделает первая транзакция, если rollback - все пройдет нормально, commit или кончилось время - конфликт. Именно об этом я и говорил. При nowait - вторая транзакция не ждет, выдает сразу. При этом, если вторая транзакция read committed - она спокойно может повторить попытку после того, как первая завершилась, также все пройдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 11:28 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
Да что вы все, сговорились что-ли? А некто Action и Gt не одно лицо случаем? угу :) сговорились, правда не совсем одно но практически одно ... > "не зная броду" можно очень легко привести базу в неконсистентное состояние. Пример пожалуйста! Как это сделать в Oracle? да у меня тоже чо то с фантазией туго ... можно пример ? сейчас облазил ибм у них по этому поводу сказано лишь, что мы круче мсскл т.к. эскалацией можно управлять и дб2 быстрей оракла. оракл естественно грит, что версионник круче т.к. никто никого не ждет, но тактично молчит о скорости. ИМХО аргумент оракла пока красивей - смысл в скорости если база стоит ? Т.е. клиенты получают отчеты через инет (много клиентов), им естественно нельзя сказать подождите и совсем нельзя давать им мешать операторам ... а как такого добится на дб2 ? надеятся, что клиенты будут успевать проскальзовать между блокировками как-то не серьозно ... к стате оракл красиво рассматривает архитектурные различия (естественно в свою сторону), а ибм, чо то все на деньги перевела и сравнивает только лицензии и индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 11:35 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
2 Roman Ignatiev >Да, измененная запись блокируется, разумеется. Вначале вы вроде как говорили обратное . >Именно об этом я и говорил. Вы говорили что: "Две транзакции как правило спокойно могут изменить одну запись.....Разбор начинается при commit...". Это по моему означает что: две сессии меняют одну запись а потом делают коммиты. Если они меняют её по очереди это уже совсем другое. >Но все происходит не совсем так, как кажется - все зависит от параметров транзакции. Пробовал в режиме Read Commited и Snapshot. >Суда по всему, делал пробу через BDE? Интерестно судя по чему? Нет, это нет так, делал в IBexpert, он работает без BDE. Объясню подробнее - допустим... Не надо объяснять. Я был против вашего поста про то что "в IB совсем нет блокировок". И Вы вроде как со мной уже согласились. >Если у нее параметр wait - update будет ждать какое-то время Где ставить параметр wait ? >При этом, если вторая транзакция read committed - она спокойно >может повторить попытку после того, как первая завершилась Как и в любой СУБД без IB-шной версионности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 12:10 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
>Да, измененная запись блокируется, разумеется. Вначале вы вроде как говорили обратное. Говорил, был не прав, каюсь :-) Просто не приходилось сталкиваться с блокировкой на практике. Вы говорили что: "Две транзакции как правило спокойно могут изменить одну запись.....Разбор начинается при commit...". Это по моему означает что: две сессии меняют одну запись а потом делают коммиты. Если они меняют её по очереди это уже совсем другое. Неточно выразился, теоретически такое, кстати, возможно, практически - неподтвержденной может быть только одна версия записи. Подразумевалось - при wait идет ожидание, и если одна транзакция делает rollback, выражение второй проходит. >Но все происходит не совсем так, как кажется - все зависит от параметров транзакции. Пробовал в режиме Read Commited и Snapshot. Snapshot уж точно выдаст deadlock - она не видит изменений после своего старта. >Суда по всему, делал пробу через BDE? Интерестно судя по чему? Нет, это нет так, делал в IBexpert, он работает без BDE. У нее nowait по-умолчанию. IBExpert - также nowait, а у ISQL - wait. Я был против вашего поста про то что "в IB совсем нет блокировок". И Вы вроде как со мной уже согласились. Согласен. Есть. На конкурентное изменение. >Если у нее параметр wait - update будет ждать какое-то время Где ставить параметр wait ? В IbExpert - Настройки -> свойства среды и там Транзакции. isc_tpb_wait. К базе нужно пересоединиться. Я обычно пользуюсь доступом через IBX для тестов, привычнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 12:46 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
GT: http://www-3.ibm.com/software/data/pubs/papers/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 13:57 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
http://www-3.ibm.com/software/data/pubs/papers/readconsistency/readconsistency.pdf ^^^ наконец нашел внятный ответ, суть я так понял, медленно из-за лишних действий (что как бы проще посмотреть на tcp.org) и главное что юзер получает старые (неправильные) данные которые кто то уже меняет. однако потом они вспоминают про select for update и грят: Note that this last example is the default behavior with DB2. That is, a second transaction will wait for the first transaction to commit before it sees changed data. That way you get current results not old results. If you do not want to wait on a lock then there is the other ANSI standard isolation level called uncommitted read which will see the current value of the data even if that data is not yet committed. т.е. юзая select for update я получаю те же уровни изоляции что и в дб2, но медленей (что сказывается на тяжелых OLPT ), а дб2 в свою очередь в ответ мультиверсионости предлагает грязное чтение. я правильно понял ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 13:34 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
Дорогой друг, Gt. Нет ты до конца не понял. Никого не интересуют как реализован у тебя ACID. Всех интересует сколько транзакций сможет обработать сервер за промежуток времени - это есть критерий выбора системы. А не ЖДЕТ или НЕ ЖДЕТ читатель писателя это уже не столь важно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2003, 09:52 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
мда фокс тогда бы рулил, он знаешь скока могет :) всех интересуют данные, правильные данные, а скорость уже в последнюю очередь (после надежности и возможностей). элементарно мы даем select и получаем разные ответы ! оракл по дефолту не будет ждать всех комитов, дб2 будет - в результате разные ответы на один запрос, это небходимо учитывать. и все таки, я так и не понял как поступит дб2: select * на маленькую табличку которую круглосуточно апдейтят, т.е. в любой момент времени данные таблички модифицируются. То что менеждер блокировок там крутой, эт я уже слышал, меня интеречует как ? Стопорнет все апдейты и пропихнет селект ? И еще, вебная апликуха - тысячи юзеров, все только читают и при этом получается блокируют, дальше кто то открыл карточку (заблокировал пару записей) и уснул ... что будет с вебными юзерами ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2003, 13:17 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
>элементарно мы даем select и получаем разные ответы ! оракл по дефолту не >будет ждать всех комитов, дб2 будет - в результате разные ответы на один >запрос, это небходимо учитывать. И оба этих результата не будут верны уже через минуту. Уже будут другие данные и что. >и все таки, я так и не понял как поступит дб2: select * на маленькую >табличку которую круглосуточно апдейтят, т.е. в любой момент времени >данные таблички модифицируются. То что менеждер блокировок там крутой, >эт я уже слышал, меня интеречует как ? Стопорнет все апдейты и пропихнет >селект ? Ну и стопорнет. Oracle надо будет страничку новую создать, это тоже время не забывай. >И еще, вебная апликуха - тысячи юзеров, все только читают и при этом >получается блокируют, дальше кто то открыл карточку (заблокировал пару >записей) и уснул ... что будет с вебными юзерами ? У каждая блокировка характеризуется набором атрибутов которым можно управлять. А ситуация про Web которую ты описал извини но это кривоватые руки разработчика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2003, 17:06 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
Ну и стопорнет. Oracle надо будет страничку новую создать, это тоже время не забывай. какую страничку ??? ты имел ввиду сегмент отката, так и дб2 он нужен наверно ... ОК, с вебной криво, но блин я побозреваю, что такое наследство досталось не только мне ... тогда вот такой пример, как такое надо было правильно делать ? (п.с. пример ораклоида, в дб2 он врядле силен) ok, say you have a 3 "page" or 3 block table. pretend there is 1 row / block. assume the values are: ACCT BALANCE ACCT_TYPE ---- ------- --------- 1 500 savings 2 100 savings 1 1000 checking Obviously -- there is 1600 in the bank there right? Assume the following operations and we are using the default DB2 isolation "read committed". What we need to do is report back "how much money is in the bank". At the same time -- we need to process transactions time operation by query operation by update ------ ------------------------- ----------------------- t1 start query, read block 1 running total = 500, while reading -- we have a shared read lock on the block t2 account 1 pulls up to ATM and tries to take 400 from checking (block 1) but has to wait -- query has block 1 shared locked and we need it exclusive t3 query finished with block 1, released shared lock, moved onto block 2, running total = 600 t4 we get exclusive lock on block 1 and change the value to 100. t5 we are actually doing a transfer, so now we get block 3 and add 400 to it. block 3 has an exclusive lock on it. t6 give up block 2, try to move onto block 3. we cannot - so we wait... t7 we commit -- releasing block 3 t8 move onto block 3, read 1400 -- add to 600 and report back the answer "there be 2,000 in the bank!", hmmm There are other interesting scenarios -- say you want a consistent read -- a correct answer. In db2 -- that is "repeatable read", they achieve that by LEAVING the shared locks on as they read it. So, it the above timeline, the query would have blocked the update until the query finished and committed. Given that block 2 really could represent a TON of blocks in the example, that could be a while (no atm transactions for you)... Or even better if the data were organized: ACCT BALANCE ACCT_TYPE ---- ------- --------- 1 1000 checking 2 100 savings 1 500 savings now what happens is: query starts -- gets and keeps shared lock on block 1 (1000,checking). Update starts -- gets x-lock on block 3 (500,savings -- updated to 100,savings) and keeps it. query keeps running.... update tries to get block 1 but cannot, query has it locked. update blocks. query runs and gets to block 3, cannot get a shared lock. We now have a deadlock. In order to get the right answer, we had to lock, but by locking -- we deadlock. catch 22 -- what do we do? This is why db2 supports dirty read (forget about locks, what a waste of time right? who cares if you get the right answer, just blow through them). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2003, 18:42 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
2Gt http://rsdn.ru/Forum/?mid=363428 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2003, 18:03 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
2bgru\r \r /topic/45859 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 11:33 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
to Gt_ Ну в итоге они согласились с http://rsdn.ru/Forum/?mid=363428 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 17:08 |
|
||
|
Блокировки MSSQL, Oracle, IB
|
|||
|---|---|---|---|
|
#18+
И вот кстати: http://www.rsdn.ru/?Forum/?mid=372904 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2003, 20:13 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=32165010&tid=1554292]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 454ms |

| 0 / 0 |
