Миграция с MS SQL на DB2

zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Re: Миграция с MS SQL на DB2

Post by zVlad »

Sabina wrote:
zVlad wrote:[Sabina, ИБМ - это как партком в советские времена - никогда не подведет. Надежный как ... я не знаю что..


Влад, вы не смотрели фильм Pirates of Silicon Valley? Он тут был по телеку несколько лет назад, муж где-то в И-нете купил его недавно на VHS.
Я в это фильм просто влюбилась. Он о временах начала Apple и Microsoft. Любопытно что Джобс и Гейтс сказали посмотрев этот фильм :mrgreen:
Так вот там очень любопытный образ IBM нарисован.



Sabina, Образ ИБМ написаный в том фильме - ложный. Я наслышан о том фильме, но не видел. Уж если мы профи - нам неслед формировать наши чувства под то что дает Hollywood!!!! Yeach...... I like Hollywood but..... you know.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: Миграция с MS SQL на DB2

Post by Sabina »

zVlad wrote:
Sabina wrote:
zVlad wrote:[Sabina, ИБМ - это как партком в советские времена - никогда не подведет. Надежный как ... я не знаю что..


Влад, вы не смотрели фильм Pirates of Silicon Valley? ...
Так вот там очень любопытный образ IBM нарисован.


Sabina, Образ ИБМ написаный в том фильме - ложный. Я наслышан о том фильме, но не видел. Уж если мы профи - нам неслед формировать наши чувства под то что дает Hollywood!!!! Yeach...... I like Hollywood but..... you know.


А там как раз ИБМ и изображена наподобие компартии, только вместо френчей и красных звезд - business suits.
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Re: Миграция с MS SQL на DB2

Post by zVlad »

Sabina wrote:
zVlad wrote:[Sabina, ИБМ - это как партком в советские времена - никогда не подведет. Надежный как ... я не знаю что..


Влад, вы не смотрели фильм Pirates of Silicon Valley? Он тут был по телеку несколько лет назад, муж где-то в И-нете купил его недавно на VHS.
Я в это фильм просто влюбилась. Он о временах начала Apple и Microsoft. Любопытно что Джобс и Гейтс сказали посмотрев этот фильм :mrgreen:
Так вот там очень любопытный образ IBM нарисован.


Об ИБМ написано немало книг, из которых можно составить об образе ИБМ более правильное представление. Когда то давно я читал перевод одной такой книги. Кажется называлась она "ИБМ - самая успешная компания в мире". Точно не помню. Вот там образ ИБМ более полно и верно представлен.
Образ ИБМ в упомянутом Вами фильме - это образ с позиции молодых, начинающих бизнесменов, пытающихся заскочить в новое направления в уже, вообщем то сложившийся, на тот момент бизнес программного обеспечения.
Очевидно, что ИБМ несколько недопоняла специфику этого нового направления, которая (теперь это очевидно - тогда было несовсем) состоит в парадоксе когда для коммерческого успеха вовсе не обязательно быть лучшим, достаточно нравиться и удовлетворять сиюминутные запросы широких масс не всегда достаточно образованных пользователей ПК.
Затем в 90е ИБМ сново недооценила влияние "дешевых" решений на базе RISC и UNIX.
Когда затрагивается тема ИБМ мне всегда вспоминается как один сотрудник ИБМ-Россия рассказывал со слов более заграничного ИБМ-ера, что ИБМ имела и всегда будет иметь до 60% компьтерного бизнеса. Это было сказано в начале 90-х. Возможно сейчас это и не так, но мне тем не менее сдается ИБМ работает над этим недостатком и работает очень упорно. И не уверен, что ИБМ не сможет вернуть себе те 60%.
Возьмеv тот же вопрос о базах данных. Оракл был фактически монополистом на платформе Unix к середине 90х. ИБМ-а в этом секторе вообще не было. ИБМ конкурировал своими ОС-ами и DB2 с других платформ - МФ, AS/400, ПК. Думается мне в то время ИБМ вообще не собирался появляться с Unix-ом. И вот DB2, как многоплатформенная БД (включая Unix), начата с середины 90х (на ПК имелась к тому времени уже). И смотрите она не плохо смотрится на маркете (последние годы показывала очень не плохой рост внедренийю Конечно этому поспособствовала и покупка Informix-a) не говоря уже о чисто технических аспектах. Причем ИБМ конкурирует как с Оракл на платформах Unix/Windows, так и с MS SQL на Windows. И не только по базам данных, но практически по всем направлениям (за исключением игр).
hren
Уже с Приветом
Posts: 507
Joined: 15 May 2002 13:30
Location: Moscow, Russia

Post by hren »

zVlad wrote: Мне кажется это одна из самых типичных задач. Возьмем систему резервирования билетов (на что угодно). Что надо сделать? Получить какое-то представление о том что доступно, выбрать, подержать, и ... или отпустить или забрать одно из мест. Что мы можем сделать в Оракле? Прочитать не учитывая, что кто-то уже меняет (резервирует) места, но еще не закомиттел. Порешать, выбрать .... и узнать, что это место уже взято. Oh, sorry, let's try again. Нет конечно так на Оракл такой приклад не пишется (я думаю). В прикладе сразу выдается ... что? Правильно SELECT ..... FOR UPDATE. И во что после этого превращается Оракл? А Оракл после этого превращается ....опять правильно - "в элегантные шорты", т.е. в блокировочник. Я не прав?
В DB2 для таких задач имеется Isolation Level Cursor Stability! Я знаю точно что я не прав, но не сильно.
Мы говорим о больших системах с высокой степенью конкурентности? Тогда возможностей уровня изоляции CS явно недостаточно для того, чтобы обеспечить правильное поведение приложения в описанной Вами ситуации. Длительность такой временной блокировки должна быть ограничена, причем не настройками СУБД, а программно, поскольку пользователь должен быть уведомлен о приближающемся времени снятия блокировки. Для систем кассового обслуживания (as apposed to self service) кассир должен видеть статусы заблокированных, но не проданных объектов отдельно, как кратковременно заблокированные. Да и для self service это может быть полезно. Кроме того, автоматическая блокировка только одной записи далеко не всегда желательна, гораздо полезнее подвергать такой блокировке произвольные наборы, определяемые клиентом (представьте продажу мест в зале кинотеатра). Если же все это делать, то лучше реализовать все эти вещи руками и уж конечно не с помощью select for update - это уже техника лома. Вы не согласны? Мне кажется, что Ваш пример неудачен.

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

Я видел здесь очень интересные обсуждения версионников и блокировочников, но они похоже умерли во время сбоя Привета и я не успел их внимательно прочитать. Очень жаль и простите за повтор.
sp123
Уже с Приветом
Posts: 1961
Joined: 24 Feb 2001 10:01
Location: Челябинск -> Everett, WA

Post by sp123 »

hren,

После прочтения вот этого короткого документа у меня отпали все вопросы, очень рекомендую: http://www7b.software.ibm.com/dmdd/libr ... ilkins.pdf
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

hren wrote:
zVlad wrote: Мне кажется это одна из самых типичных задач. Возьмем систему резервирования билетов (на что угодно).
........
В DB2 для таких задач имеется Isolation Level Cursor Stability! Я знаю точно что я не прав, но не сильно.

Мы говорим о больших системах с высокой степенью конкурентности?
........

Если же все это делать, то лучше реализовать все эти вещи руками и уж конечно не с помощью select for update - это уже техника лома. Вы не согласны? Мне кажется, что Ваш пример неудачен.

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

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


Hren, я не такой уж крутой прикладной програмере - больше админ, чтобы на равных спрорить по вопросам реализации. Ваша мысль о показе в приложении того что на данный момент модифицированно но не зафиксированно, оказалась для меня откровением - никогда не приходило в голову такого подхода. Одно можно сказать с большой степенью вероятности - в БД-ых нет системной возможности напрямую (без вспомогательных столбцов) узнать модифицуеруется запись в данный момент или нет.
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

zVlad wrote:
tengiz wrote:
zVlad wrote:но хочется все таки добавить для полноты изложения, что ANSI's READ COMMITTED представлен в DB2 двумя уровнями - Cursor Stability and Read Stability. И они безусловно хоть как-то но отличаются.

DB2 REPEATABLE READ == ANSI SERIALIZABLE
DB2 READ STABILITY == ANSI REPEATABLE READ
DB2 CURSOR STABILITY == ANSI READ COMMITTED


Cогласен (в смысле у меня на данный момент нет возражений и я не вижу смысла возражать в контексте более важной темы, а скорее всего Вы просто правы. Прямо сейчас, не знаю).


Проверил в надежном источнике - так оно и есть, Tengiz. Позволь лишь один уточняющий вопрос? В случае READ COMMITTED в MS SQL оператор FETCH блокирует следующую запись и ...(внимание вопрос) снимает блокировку с предыдущей?
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

tengiz wrote:zVlad,

Я думаю, что у Вас закончились бы вопросы и претензии к ORACLE по поводу атнинаучной еретической лженауки про многоверсионность, если бы Вы наконец прочитали что-нибудь толковое по теме. Например, вот этот классический учебник по обработке транзакций, написанный в середине 80-х, когда теория многоверсионности уже была в очень зрелом состоянии и ссылку на который я уже пару раз здесь выкладывал: Concurrency Control and Recovery in Database Systems by Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman. И в частности главу 4 (Non-locking schedulers) и главу 5 (Multiversion concurrency control).

Желаю Вам приятного чтения!


Ну Вы шутник, Tengiz, Вы что думаете в моем возрасте (48 ) можно такое читать без риска повредить головной мозг? Я конечно постараюсь, но на первый взгляд мне уже этого не осислить. Мне бы что-нибудь попроще, подушевнее. Типа:

http://www-3.ibm.com/software/data/pubs ... extech.pdf

Кстати рекомендую это как дополнительное чтение к тому что порекомендовал sp123 (кстати, Hren, в этой статье есть несколько фраз о сравнеии DB2 и Оракл на приложениях типа что Вас особо интересуют, прочтите до конца). А еше там есть например вот такое:

"Oracle Locking
In contrast to DB2, Oracle doesn't acquire read locks when they process a SELECT statement. Instead, they guarantee that the application will always see the data as it existed when the OPEN CURSOR was performed. If they don't acquire locks and yet still allow changes to the data, how can they make that guarantee?
During FETCH, Oracle must examine each row that was previously part of the OPEN to determine if it was changed between the time it was opened and the time it was fetched. If the row was modified by another user, Oracle has to search through rollback segments to find the row image that existed during the OPEN. In a high-volume, high-concurrency update workload, this algorithm can introduce extremely high CPU and I/O costs."

А что если на момент OPEN имелась транзакция модификации, которая в дальнейшем откатится. Получается что моментом начала для FETCH должен быть самый близкий момент, когда никаких незакомиченных модификаций не было, т.е. даже раньше чем момент OPEN. Пролейте свет, Оракловцы!
Last edited by zVlad on 15 Oct 2003 01:27, edited 1 time in total.
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

zVlad wrote:В случае READ COMMITTED в MS SQL оператор FETCH блокирует следующую запись и ...(внимание вопрос) снимает блокировку с предыдущей?

Да, это делается и для курсора, и для незнакомых DB2 и ORACLE "толстого" курсора, а также сущности, которая называется firehose - результата оператора SELECT без явного создания курсора. Что является функциональным аналогом FORWARDONLY READONLY CURSOR, но работает заметно эффективнее.
Cheers
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

zVlad wrote:Ну Вы шутник, Tengiz, Вы что думаете в моем возрасте (48 ) можно такое читать без риска повредить головной мозг? Я конечно постараюсь, но на первый взгляд мне уже этого не осислить.

zVlad - ну у Вас же техническое образование. Должны осилить. Но только читать эту книгу нужно с самого начала. Иначе будут проблемы с нотацией. Эта книга - университетский учебник. Толковые студены CS отделений спокойно её воспринимают за семестр.
Кстати рекомендую это как дополнительное чтение к тому что порекомендовал sp123. Там есть например вот такое:

zVlad, к сожалению, и то, что выложит sp123 и много другое что я видел на сайте IBM (для других, разумеется, это тоже в общем верно) - довольно поверхностный материал. В общем, то, что называют "полупопулярной полуграмотной полуправдой". Откровенного вранья, как правило, там очень мало (хотя периодически и попадается), но полезных сведений тоже кот наплакал. В итоге у читающего возникает довольно кривое представление о предмете изложения. В общем все эти статьи, говоря откровенно, техническая халтура.
Cheers
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

tengiz wrote:
zVlad wrote:В случае READ COMMITTED в MS SQL оператор FETCH блокирует следующую запись и ...(внимание вопрос) снимает блокировку с предыдущей?

Да, это делается и для курсора, и для незнакомых DB2 и ORACLE "толстого" курсора, а также сущности, которая называется firehose - результата оператора SELECT без явного создания курсора. Что является функциональным аналогом FORWARDONLY READONLY CURSOR, но работает заметно эффективнее.


"Толстого" - значит одиним FETCH некоторое количество записей извлекающего? Что то такое объявлено было в версии 8. Завтра уточню. А как насчет scrolable cursor-a? Который взад-вперед ходить умеет?
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

tengiz wrote:
zVlad wrote:Ну Вы шутник, Tengiz, Вы что думаете в моем возрасте (48 ) можно такое читать без риска повредить головной мозг? Я конечно постараюсь, но на первый взгляд мне уже этого не осислить.

zVlad - ну у Вас же техническое образование. Должны осилить. Но только читать эту книгу нужно с самого начала. Иначе будут проблемы с нотацией. Эта книга - университетский учебник. Толковые студены CS отделений спокойно её воспринимают за семестр.
Кстати рекомендую это как дополнительное чтение к тому что порекомендовал sp123. Там есть например вот такое:

zVlad, к сожалению, и то, что выложит sp123 и много другое что я видел на сайте IBM (для других, разумеется, это тоже в общем верно) - довольно поверхностный материал. В общем, то, что называют "полупопулярной полуграмотной полуправдой". Откровенного вранья, как правило, там очень мало (хотя периодически и попадается), но полезных сведений тоже кот наплакал. В итоге у читающего возникает довольно кривое представление о предмете изложения. В общем все эти статьи, говоря откровенно, техническая халтура.


На сайте ИБМ можно много что найти. Мне например как раз нравятся такие короткие статейки по узкому вопросу. Если пропускать чисто рекламную шелуху можно достаточно быстро извлечь небольшие зернышки истины. Наиболее серьезные работы я думаю на публик-сайте вообще не должны лежать.
Кстати, положа руку на сердце, Вы ведь, Tengiz, даже не потрудились окинуть взором приведенные sp123 и мной ссылки, иначе заметили бы что это две совершенно разные по всем параметрам вещи.
Sp123 привел ссылку на сугубо технический отчет об опыте перевода приложений с Оракл на DB2. Удивляет, что на публик-сайте вообще свободно лежит такая объемная работа, должная быть закрытой для внутренненго пользования (мои попытки найти что-либо подобное на Оракл не увенчались успехом. После бодрых призивов переходить на Оракл там дается телефон службы, которая все это сделает в лучшем виде. А что предлагает (открыто) MS по вопросу перевода с DB2 на MS SQL? Можно посмортеть?) Ссылка приведенная мною я думаю - ответ фирме Оракл на их измышления по поводу DB2 sharing-groups. Не более того. Для меня ценность этой статьи в кратком, достаточно техничном изложении недостатков Оракловского построения кластеров, и что особенно важно для темы блокинг/версионник - это связь проблем Оракл кластера версионостью. Как, Вы Tengiz, относитесь к мысли о которой я постоянно долдоню - что версионность может быть для кого-нибудь и украшает фасад Оракл, но портит многие его внутренние помещения?
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

zVlad wrote:Кстати, положа руку на сердце, Вы ведь, Tengiz, даже не потрудились окинуть взором приведенные sp123 и мной ссылки, иначе заметили бы что это две совершенно разные по всем параметрам вещи.
Sp123 привел ссылку на сугубо технический отчет об опыте перевода приложений с Оракл на DB2.

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

А что предлагает (открыто) MS по вопросу перевода с DB2 на MS SQL? Можно посмортеть?)

Не знаю, никогда не интересовался. Если чего найду, поделюсь. Так как DB2 и MS SQL ближе друг к другу, чем ORACLE к любому из них, то и намного больше рекомендаций по переходам ORACLE <-> DB2/SQL Server.

Как, Вы Tengiz, относитесь к мысли о которой я постоянно долдоню - что версионность может быть для кого-нибудь и украшает фасад Оракл, но портит многие его внутренние помещения?

Версионность ORACLE - это очень удобно для разработчиков обычных нехитрых приложений баз данных. Хотите Вы этого или нет - не считаться с этим нельзя. Внутренние помещения тоже, на мой взгляд, вполне добротные. Насколько я успел познакомиться с внутренним устройством ORACLE - там многое тщательно продумано и последовательно реализовано. Даже больше могу сказать - для разработки, которой уже больше 10 лет это просто отлично сделанная инженерная работа.
Cheers
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

[quote="tengiz"] ......... Я имею в виду то, что в этом материале относится собственно к обработке транзакций - именно эти сведения чисто технического характера я и считаю халтурой. Это очень поверхностный и поэтому очень некачественный материал, который годится разве что для технической врезки в журнальной статье рекламного характера.

[quote]

Мне показалось, что те статьи были вовсе не о транзакционных механизмах. :pain1:
Кстати, халтура - недобросовестная работа, выдача одного за совсем другое, иначе - ложь, обман. Не могли бы Вы, Tengiz, открыть мне глаза и указать на ложь (обман), имеющие место быть в тех статьях.
User avatar
camel
Новичок
Posts: 86
Joined: 06 Dec 2002 18:21

Post by camel »

zVlad wrote:
tengiz wrote:zVlad,

Я думаю, что у Вас закончились бы вопросы и претензии к ORACLE по поводу атнинаучной еретической лженауки про многоверсионность, если бы Вы наконец прочитали что-нибудь толковое по теме. Например, вот этот классический учебник по обработке транзакций, написанный в середине 80-х, когда теория многоверсионности уже была в очень зрелом состоянии и ссылку на который я уже пару раз здесь выкладывал: Concurrency Control and Recovery in Database Systems by Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman. И в частности главу 4 (Non-locking schedulers) и главу 5 (Multiversion concurrency control).

Желаю Вам приятного чтения!


Ну Вы шутник, Tengiz, Вы что думаете в моем возрасте (48 ) можно такое читать без риска повредить головной мозг? Я конечно постараюсь, но на первый взгляд мне уже этого не осислить. Мне бы что-нибудь попроще, подушевнее. Типа:

http://www-3.ibm.com/software/data/pubs ... extech.pdf

Кстати рекомендую это как дополнительное чтение к тому что порекомендовал sp123 (кстати, Hren, в этой статье есть несколько фраз о сравнеии DB2 и Оракл на приложениях типа что Вас особо интересуют, прочтите до конца). А еше там есть например вот такое:

"Oracle Locking
In contrast to DB2, Oracle doesn't acquire read locks when they process a SELECT statement. Instead, they guarantee that the application will always see the data as it existed when the OPEN CURSOR was performed. If they don't acquire locks and yet still allow changes to the data, how can they make that guarantee?
During FETCH, Oracle must examine each row that was previously part of the OPEN to determine if it was changed between the time it was opened and the time it was fetched. If the row was modified by another user, Oracle has to search through rollback segments to find the row image that existed during the OPEN. In a high-volume, high-concurrency update workload, this algorithm can introduce extremely high CPU and I/O costs."

А что если на момент OPEN имелась транзакция модификации, которая в дальнейшем откатится. Получается что моментом начала для FETCH должен быть самый близкий момент, когда никаких незакомиченных модификаций не было, т.е. даже раньше чем момент OPEN. Пролейте свет, Оракловцы!

элементарно - все FETCH возвращают данные на момент OPEN CURSOR, причем незафиксированные изменения данных от других сессий не видны - ибо грязного чтения в оракле нет

вообще-то это fundamentals - азы оракла. ИМХО следовало бы их знать прежде чем критиковать техническую сторону субд оракл
User avatar
Митяй
Уже с Приветом
Posts: 10000
Joined: 16 Jul 2003 18:47
Location: CA->AZ->DE->NJ-> AZ->GA->AZ

Post by Митяй »

hren wrote:Для систем кассового обслуживания (as apposed to self service) кассир должен видеть статусы заблокированных, но не проданных объектов отдельно, как кратковременно заблокированные. Да и для self service это может быть полезно. Кроме того, автоматическая блокировка только одной записи далеко не всегда желательна, гораздо полезнее подвергать такой блокировке произвольные наборы, определяемые клиентом (представьте продажу мест в зале кинотеатра). Если же все это делать, то лучше реализовать все эти вещи руками и уж конечно не с помощью select for update - это уже техника лома. Вы не согласны? Мне кажется, что Ваш пример неудачен.


Для системы с хотя бы тысячью конечных пунктов все эти сообщения "я заблокирован/я разблокирован", передаваемые КАЖДОМУ кассиру, забьют сеть почище любой DoS атаки. "Реализовывать эти вещи руками" - верный способ изобрести велосипед, при том неездящий. Оставьте работу с блокировками профессионалам.
А пристыдишь их - и сальцо найдется, и горилочка...
User avatar
Митяй
Уже с Приветом
Posts: 10000
Joined: 16 Jul 2003 18:47
Location: CA->AZ->DE->NJ-> AZ->GA->AZ

Post by Митяй »

camel wrote:
zVlad wrote:
tengiz wrote:zVlad,

Я думаю, что у Вас закончились бы вопросы и претензии к ORACLE по поводу атнинаучной еретической лженауки про многоверсионность, если бы Вы наконец прочитали что-нибудь толковое по теме. Например, вот этот классический учебник по обработке транзакций, написанный в середине 80-х, когда теория многоверсионности уже была в очень зрелом состоянии и ссылку на который я уже пару раз здесь выкладывал: Concurrency Control and Recovery in Database Systems by Philip A. Bernstein, Vassos Hadzilacos, Nathan Goodman. И в частности главу 4 (Non-locking schedulers) и главу 5 (Multiversion concurrency control).

Желаю Вам приятного чтения!


Ну Вы шутник, Tengiz, Вы что думаете в моем возрасте (48 ) можно такое читать без риска повредить головной мозг? Я конечно постараюсь, но на первый взгляд мне уже этого не осислить. Мне бы что-нибудь попроще, подушевнее. Типа:

http://www-3.ibm.com/software/data/pubs ... extech.pdf

Кстати рекомендую это как дополнительное чтение к тому что порекомендовал sp123 (кстати, Hren, в этой статье есть несколько фраз о сравнеии DB2 и Оракл на приложениях типа что Вас особо интересуют, прочтите до конца). А еше там есть например вот такое:

"Oracle Locking
In contrast to DB2, Oracle doesn't acquire read locks when they process a SELECT statement. Instead, they guarantee that the application will always see the data as it existed when the OPEN CURSOR was performed. If they don't acquire locks and yet still allow changes to the data, how can they make that guarantee?
During FETCH, Oracle must examine each row that was previously part of the OPEN to determine if it was changed between the time it was opened and the time it was fetched. If the row was modified by another user, Oracle has to search through rollback segments to find the row image that existed during the OPEN. In a high-volume, high-concurrency update workload, this algorithm can introduce extremely high CPU and I/O costs."

А что если на момент OPEN имелась транзакция модификации, которая в дальнейшем откатится. Получается что моментом начала для FETCH должен быть самый близкий момент, когда никаких незакомиченных модификаций не было, т.е. даже раньше чем момент OPEN. Пролейте свет, Оракловцы!

элементарно - все FETCH возвращают данные на момент OPEN CURSOR, причем незафиксированные изменения данных от других сессий не видны - ибо грязного чтения в оракле нет

вообще-то это fundamentals - азы оракла. ИМХО следовало бы их знать прежде чем критиковать техническую сторону субд оракл


Camel, вы не согласны с тем, что просмотреть таблицу блокировок, расположенную в памяти - на несколько порядков легче и быстрей, чем просмотреть и откатить транзакции, часть из которых уже могут быть сброшены на диск ?
А пристыдишь их - и сальцо найдется, и горилочка...
hren
Уже с Приветом
Posts: 507
Joined: 15 May 2002 13:30
Location: Moscow, Russia

Post by hren »

Митяй wrote:Для системы с хотя бы тысячью конечных пунктов все эти сообщения "я заблокирован/я разблокирован", передаваемые КАЖДОМУ кассиру, забьют сеть почище любой DoS атаки. "Реализовывать эти вещи руками" - верный способ изобрести велосипед, при том неездящий. Оставьте работу с блокировками профессионалам.
Это Вы очень сильно высказались. Сеть, естественно, ничего не забьет, поскольку объем сервисного трафика, расходуемый на подобный обмен - это о-малое по сравнению со штатным обменом данными между кассиром и сервером, при разумной реализации, конечно (вообще-то, говоря о реализации "руками", я имел в виду относительно прямые руки).

Впрочем, вероятно у Вас есть основания делать такие определенные утверждения. Объясните, как Вы предлагаете делать описанные мной вещи с использованием только штатных средств блокировки СУБД (любой).
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

zVlad wrote:Мне показалось, что те статьи были вовсе не о транзакционных механизмах. :pain1:
Кстати, халтура - недобросовестная работа, выдача одного за совсем другое, иначе - ложь, обман. Не могли бы Вы, Tengiz, открыть мне глаза и указать на ложь (обман), имеющие место быть в тех статьях.

В тексте по ссылке sp123, раздел Concurrency Control:

1 - страница 50, первый абзац из Concurrency and Locks: "For both Oracle and DB2, a transaction is an atomic unit of work, in which all changes are either committed or rolled back. However, while both DB2 and Oracle have row-level locking (as opposed to page-level locking, as in SQL Server), there are differences in when the locks are acquired."

Ложь и обман: в статье 2002 года писать о page-level locking в SQL Server.

2 - страница 50, последний абзац из Concurrency and Locks: "Due to these differences, ported applications that have updaters and readers accessing the same data concurrently from the same table may experience more lock wait time in DB2, but with a more consistent view of the data."

Искажение: у автора довольно своеобразное нестандартное представление о том, что такое consistent view.

3 - страница 50, середина третьего абзаца в Isolation Levels: "For example, when an Oracle application starts an update transaction, the old version of the data is kept in the rollback segment. When any other application makes a read request for the data, it gets the version from the rollback segment. Once the update transaction commits, the rollback segment version is erased and all other applications see the new version of the data."

Ложь и обман: версии не удаляются из rollback segment при окончании транзакций из создавших.

4 - страница 50, четвёртый абзац в Isolation Levels: "To ensure read consistency in Oracle, the application must issue SELECT FOR UPDATE. In this case, all other readers and updaters are blocked."

Ложь и обман: следствие уже рассмотренного искажения, описанного в пункте (2).

5 - страница 51, пятый абзац с конца в Isolation Levels: "Oracle's implementation most resembles Read Stability (RS) in DB2 UDB for writers and most resembles Uncommitted Read (UR) for readers."

На такое ученику в школы бы сказали: "Ich gehbe dir die Note Zwei" или просто - "Садись, два".

6 - страница 51, четвёртый абзац с конца в Isolation Levels: "With the exception of UR transactions, DB2 UDB can guarantee that the data an application reads does not change under it. "

Ложь и обман: автор не сказал, что не только UR но и CS не гарантирует, что данные (для CS кроме тех, на которых находится курсор), прочитанные в транзакции могут быть изменены другими транзакциями.

7 - страница 52, конец второго абзаца в Lock Escalation: "Oracle does not have the concept of lock escalation; the application is blocked if there is insufficient memory to acquire the lock."

Не правда и не ложь, что на самом деле даже ещё хуже, потому что похоже на правду. С одной стороны, согласно материалов IBM - ORACLE хранит информацию о блокировках на диске, с другой стороны, почему-то может не хватить памяти на блокировки? На самом деле всё несколько сложнее - а упрощение здесь хуже вранья.

8 - страница 52, четвёртый абзац в Deadlock: "Oracle does not have a deadlock detector to resolve deadlocks. Applications can use the NOWAIT clause or set a time-out for the session to avoid deadlocks."

Ложь и обман в чистом виде.

9 - страница 53, первый абзац в How to Improve Concurrency: "To maximize concurrency in DB2 UDB, keep the following in mind:... - Use Uncommitted Read (UR) and Cursor Stability (CS) whenever possible."

За одно только это статью можно сразу засовывать в шреддер.

И это всего лишь на 4 страницах.
Cheers
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

hren wrote:...Объясните, как Вы предлагаете делать описанные мной вещи с использованием только штатных средств блокировки СУБД (любой).

На ORACLE или MS SQL это делается при помощи штатного стредства - abstract locking manager, базовые возможности которого доступны прикладным программистам. В SQL Server это пара процедур sp_getapplock/sp_releaseapplock. В ORACLE это - dbms_lock.allocate_unique/dbms_lock.request/dbms_lock.release.
Cheers
User avatar
camel
Новичок
Posts: 86
Joined: 06 Dec 2002 18:21

Post by camel »

Митяй wrote:
camel wrote:
zVlad wrote: А что если на момент OPEN имелась транзакция модификации, которая в дальнейшем откатится. Получается что моментом начала для FETCH должен быть самый близкий момент, когда никаких незакомиченных модификаций не было, т.е. даже раньше чем момент OPEN. Пролейте свет, Оракловцы!

элементарно - все FETCH возвращают данные на момент OPEN CURSOR, причем незафиксированные изменения данных от других сессий не видны - ибо грязного чтения в оракле нет

вообще-то это fundamentals - азы оракла. ИМХО следовало бы их знать прежде чем критиковать техническую сторону субд оракл


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

с чего вы это взяли? я просто объяснил zVladу, как работает FETCH в оракле - ни больше ни меньше

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

к счастью для девелоперов, оракл посложнее сделал ... :)
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

tengiz wrote:
zVlad wrote:Мне показалось, что те статьи были вовсе не о транзакционных механизмах. :pain1:
Кстати, халтура - недобросовестная работа, выдача одного за совсем другое, иначе - ложь, обман. Не могли бы Вы, Tengiz, открыть мне глаза и указать на ложь (обман), имеющие место быть в тех статьях.

В тексте по ссылке sp123, раздел Concurrency Control:

.........


1. What can I say, this article is about Oracle to DB2, so I don't really understand why they touch SQL Server. Besides, despite this article was marked by May 2002, I guess it was written earlier. When row level locking was first introduced for SQL Server?.
2. No comments. In some cases it could be true.
3. Let’s remove sub phrase with word “erased”: “Once the update transaction commits…… all other applications see the new version of the data." – is this correct statement? In this edition
4. There are two statements here. 1- “To ensure read consistency in Oracle, the application must issue SELECT FOR UPDATE.”, and 2- “In this case, all other readers and updaters are blocked." I disagree that item 2 is totally “Искажение”.
5. It says “most” not “always”. If somebody read entire segment he/she will see more:
“…Oracle's implementation most resembles Read Stability (RS) in DB2 UDB for writers and most resembles Uncommitted Read (UR) for readers. Note that DB2 UDB UR is not the same as Oracle's versioning. UR reads uncommitted data if there is a transaction in progress, as opposed to the last version of the data read by Oracle. Suppose an application is reading a column from a row that has being modified by another transaction from a value of 3 to a value of 5. In Oracle, the application reads 3. In DB2 UDB, UR reads 5. If the update transaction commits, then DB2 has the right data. If the update transaction rolls back, then Oracle has the right data.”
Looks different, isn’t it?
6. Would you mind read about CS again:
“ Cursor Stability (CS)
This level guarantees only that a row of a table cannot be changed by another application while your cursor is positioned on that row. This means the application can trust the data it reads by fetching from the cursor and updating it. This is the default.”
Authors are absolutely correct when they say: “With the exception of UR transactions, DB2 UDB can guarantee that the data an application reads does not change under it. The application can trust the data it fetched. This behavior can simplify the application design.”

Lock prevents access from anybody to update data during lock life.

7. My understanding is that acticle says about “insufficient memory to acquire the lock.” It means memory on disks. It is clear from other publications. I gave you link, and you agreed that time. Tengiz, remember MAXTRANS parameter?
Question here is: “Does Oracle have the concept of lock escalation?”

8. I can add here. “DB2 UDB returns an error code (SQLCODE -901, SQLSTATE 40001)
indicating a rollback due to deadlock.” - Ложь и обман в чистом виде. A correct SQLCODE in this case will be –911. I remember, you and vc discussed deadlock detection problem in Oracle. I didn’t read it carefully. But from this portion, I’ve realized that my application on Oracle wouldn’t be able to see I was killed due to deadlock. Please, correct me if I’m wrong.

9. There are also other recommendations there. Keep in mind that CS is a default IL in DB2.

You read just 4 pages of 89 pages article. You convinced me in there are some “unclear” statements. But, in deed, it is unclear how DB2 and Oracle relate to each other. I believe this 89 pages manual could be still useful for those how move from Oracle to DB2.
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

camel wrote:
Митяй wrote:
camel wrote:
zVlad wrote: А что если на момент OPEN имелась транзакция модификации, которая в дальнейшем откатится. Получается что моментом начала для FETCH должен быть самый близкий момент, когда никаких незакомиченных модификаций не было, т.е. даже раньше чем момент OPEN. Пролейте свет, Оракловцы!

элементарно - все FETCH возвращают данные на момент OPEN CURSOR, причем незафиксированные изменения данных от других сессий не видны - ибо грязного чтения в оракле нет

вообще-то это fundamentals - азы оракла. ИМХО следовало бы их знать прежде чем критиковать техническую сторону субд оракл


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

с чего вы это взяли? я просто объяснил zVladу, как работает FETCH в оракле - ни больше ни меньше
.....
к счастью для девелоперов, оракл посложнее сделал ... :)


Camel, you call this "объяснил zVladу". Why? What did you explain me? I knew about it much more before your explanations. Anyway, thank you.
User avatar
Митяй
Уже с Приветом
Posts: 10000
Joined: 16 Jul 2003 18:47
Location: CA->AZ->DE->NJ-> AZ->GA->AZ

Post by Митяй »

hren wrote:
Митяй wrote:Для системы с хотя бы тысячью конечных пунктов все эти сообщения "я заблокирован/я разблокирован", передаваемые КАЖДОМУ кассиру, забьют сеть почище любой DoS атаки. "Реализовывать эти вещи руками" - верный способ изобрести велосипед, при том неездящий. Оставьте работу с блокировками профессионалам.
Это Вы очень сильно высказались. Сеть, естественно, ничего не забьет, поскольку объем сервисного трафика, расходуемый на подобный обмен - это о-малое по сравнению со штатным обменом данными между кассиром и сервером, при разумной реализации, конечно (вообще-то, говоря о реализации "руками", я имел в виду относительно прямые руки).

Впрочем, вероятно у Вас есть основания делать такие определенные утверждения. Объясните, как Вы предлагаете делать описанные мной вещи с использованием только штатных средств блокировки СУБД (любой).


1000 терминалов, допустим, 1 транзакция в минуту. Допустим, в одной транзакции лочится 100 записей. Допустим, сообщение о блокировке занимает 0.5 кб со всей служебной информацией. Получаем 1000 * 100 *2 (залочить / разлочить) = 200,000 сообщений и 100 Mb в минуту, примерно 30,000 / 1.5MByte в секунду. 10Mbit сеть такого точно не потянет, 100MBit будет загружена на 20% _теоретического_ предела (который весьма теоретичен для мелких сообщений).

А стандартными средствами это делается (в Информиксе)-
set wait to 10 -- seconds
set isolation to repeatable read
begin
select ... -- records locked by share lock, if anybody updates record
we wait for 10 sec
update ... -- if somebody locked this record we wait for 10 sec
commit
А пристыдишь их - и сальцо найдется, и горилочка...
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

zVlad,

Позволю себе оставить без комментариев большую часть Ваших замечаний. Повторяться мне не хотелось бы. Насчёт остального:

- Полноценный RLL (row level locking) в SQL Server появился в версии 7 (1998), после того, как размер страницы стал 8K (был 2K), а в версии 6.5 (1995) был ограниченный вариант - insert row level locking.

- Честное слово, неудобно задавать этот вопрос, но, теме не менее - что такое, по-Вашему, deadlock detection?

- когда в CS курсор сходит со строки - может ли она быть изменена другими транзакциями? Дополнительный вопрос - зачен нужен курсор, если читается ровно одна строка?

- наличие или отсутствие эскалации блокировок никого по большому счёту не интересует. Главный вопрос в том, заткнётся ли сервер от недостатка ресурсов если почему-то понадобится наложить очень много блокировок? И здесь нет однозначного ответа, какой сервер лучше. Во-первых, ORACLE накладывает только X блокировки, в отличие от DB2. Во-вторых, у ORACLE действительно есть ограничение на максимальное количество транзакций, интересующихся строками в одной и той же странице. Но зато отсутствуют физические ограничения на общее количество X блокировок. У DB2 - всё наоборот: есть физической ограничение на общее количество блокировок, причём любых видов, а не только X, но нет никаких ограничений страничного уровня. И что по-Вашему лучше? Автор намекет, что DB2, разумеется лучше - вот это и есть поверхностный халтурный анализ.

Насчёт 4 страниц из 80 с лишним - да я на самом деле внимательно прочитал только эти 4, просто потому что остальное лично мне уже мало интересно. Как Вы думате, концентрация ляпов на оставшихся страницах намного ниже или мне просто невероятно повезло нарваться на самый смак?
Cheers

Return to “Вопросы и новости IT”