powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Oracle vs DB2
66 сообщений из 66, показаны все 3 страниц
Oracle vs DB2
    #38425246
Kid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!

В компании сейчас идет попытка заменить в Проектах и перейти с БД Oracle (11) на DB2.
Интересует мнение тех, кто работал с этими двумя БД... на что требуется обратить внимание, а так же различные показатели и "подводные" камни, сравнение этих БД (администрирование, производительность, требования в аппаратной части и тд)
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425253
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот вопрос задавай тому, кто на этом переходе настаивает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425531
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KidПриветствую!

В компании сейчас идет попытка заменить в Проектах и перейти с БД Oracle (11) на DB2.
Интересует мнение тех, кто работал с этими двумя БД... на что требуется обратить внимание, а так же различные показатели и "подводные" камни, сравнение этих БД (администрирование, производительность, требования в аппаратной части и тд)

обратить внимание следует на того, чья эта инициатива. у этих субд совершенно противоположные идиологии - оракл версионник, дб2 блокировочник. вам не миграция, а полный редизайн понадобиться. администрирование, производительность, требования в аппаратной части дело десятое.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425555
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!обратить внимание следует на того, чья эта инициатива.

Это да. Но мощь и бесплатность DB2 Express-C может быть сильным аргументом, перевешивающим прочие.
у этих субд совершенно противоположные идиологии - оракл версионник, дб2 блокировочник. вам не миграция, а полный редизайн понадобиться. администрирование, производительность, требования в аппаратной части дело десятое.
А это не вполне.
IBM-еры довольно много постарались для совместимости. Вплоть до того, что пустая строка может трактоваться, как NULL, а многие раньше блокирующие вещи теперь не блокируют. Нынешняя DB2 по совместимости... ну... примерно на уровне 9-го Oracle.

Вот вам поддерживаемый PL/SQL: http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.apdv.plsql.doc/doc/c0053607.html
и ещё про compatibility: http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.apdv.porting.doc/com.ibm.db2.luw.apdv.porting.doc-gentopic1.html ;
где-то в глубинах есть список стандартных пакетов типа DBMS_JOB и DBMS_OUTPUT, увы, он невелик.

Не зная, что за проекты вы делаете и на каком уровне используете Oracle, я не могу сказать, на что странное и неприятное для вас вы наткнётесь. Юзера хранятся не в базе или файле, используются те, что в ОС. Инструмент администрирования - IBM DataStudio, не в комплекте, а отдельно, чудовищного размера, но до EMC как до луны пешком. С другой стороны, в отличие от, Index Adviser доступен во всех редакциях...

...
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425560
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Metelitsaмощь и бесплатность DB2 Express-C может быть сильным аргументом,
перевешивающим прочие.
PostgreSQL тоже бесплатен, зато гораздо более совместим с Оракулом. Я бы даже сказал, что
в нём всё делают лишь бы быть похожими на Оракул. Вплоть до копирования его багов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425571
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем же он более похож? Насколько я знаю, там даже пакетов до сих пор нет.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425576
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Victor MetelitsaЭто да. Но мощь и бесплатность DB2 Express-C может быть сильным аргументом, перевешивающим прочие.

мощь на двух ядрах менее 20% современного процессора ...

Victor MetelitsaА это не вполне.
IBM-еры довольно много постарались для совместимости. Вплоть до того, что пустая строка может трактоваться, как NULL,

не смешите, отличие в синтаксисе самая малая из проблем. проблема в том что маскировка синтаксиса не делает дб2 ближе к версионным субд.

Victor Metelitsaа многие раньше блокирующие вещи теперь не блокируют. Нынешняя DB2 по совместимости... ну... примерно на уровне 9-го Oracle.

одна и та же конструкция в оракле получит консистентные данные на момент старта запроса/транзакции, а в дб2 неконсистентную кашу или дедлог в лучшем случае. skip_locked, last_committed и подобные ему хинты не решают проблему, а являются костылями, с моей точки зрения намекающими какой изврат придется использовать эмулируя версионный механизм на блокировочнике
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425580
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!Victor MetelitsaЭто да. Но мощь и бесплатность DB2 Express-C может быть сильным аргументом, перевешивающим прочие.

мощь на двух ядрах менее 20% современного процессора ...

Зависит от задачи.
Victor MetelitsaА это не вполне.
IBM-еры довольно много постарались для совместимости. Вплоть до того, что пустая строка может трактоваться, как NULL,

не смешите, отличие в синтаксисе самая малая из проблем. проблема в том что маскировка синтаксиса не делает дб2 ближе к версионным субд.

Зависит от задачи.
Victor Metelitsaа многие раньше блокирующие вещи теперь не блокируют. Нынешняя DB2 по совместимости... ну... примерно на уровне 9-го Oracle.

одна и та же конструкция в оракле получит консистентные данные на момент старта запроса/транзакции, а в дб2 неконсистентную кашу или дедлог в лучшем случае. skip_locked, last_committed и подобные ему хинты не решают проблему, а являются костылями, с моей точки зрения намекающими какой изврат придется использовать эмулируя версионный механизм на блокировочнике
Зависит от задачи.

Есть много случаев, когда этот пресловутый "версионный механизм" - бессмысленное лишнее отягощение, гири на ногах. Да, и вы не задумывались над тем, что если транзакционные логи содержат не только redo, но и undo, их можно использовать для того, чтобы посмотреть предыдущую версию?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425595
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/index.html - DB2 10: Run Oracle applications on DB2 10 for Linux, UNIX, and Windows
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425598
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Victor MetelitsaЕсть много случаев, когда этот пресловутый "версионный механизм" - бессмысленное лишнее отягощение, гири на ногах.
ерунда. тест TPC-C нарисовали точно под блокировочник, мелкие, не пересекающиеся транзакции, где преимущество неблокируемого чтения оракла не нужно. тем не менее оракл, с писаниной в undo+redo на идентичном железе впереди.

Victor MetelitsaДа, и вы не задумывались над тем, что если транзакционные логи содержат не только redo, но и undo, их можно использовать для того, чтобы посмотреть предыдущую версию?
для этого нужно иметь двунаправленный лог, т.е. заставить дб2 писать заметно больше в транзакшен лог, а это дополнительное i/o. не имеет смысла.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425599
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу DB2 Express-C. Где там у нас бесплатный сыр обычно встречается?
Раньше (может и сейчас) IBM вообще доплачивал компаниям за то, чтобы они софт по DB2 переписывали.
Т.е. даже даром DB2 никому не нужен - приходится доплачивать.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425608
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!Victor MetelitsaЕсть много случаев, когда этот пресловутый "версионный механизм" - бессмысленное лишнее отягощение, гири на ногах.
ерунда. тест TPC-C нарисовали точно под блокировочник, мелкие, не пересекающиеся транзакции, где преимущество неблокируемого чтения оракла не нужно. тем не менее оракл, с писаниной в undo+redo на идентичном железе впереди.

Где?
Victor MetelitsaДа, и вы не задумывались над тем, что если транзакционные логи содержат не только redo, но и undo, их можно использовать для того, чтобы посмотреть предыдущую версию?
для этого нужно иметь двунаправленный лог, т.е. заставить дб2 писать заметно больше в транзакшен лог, а это дополнительное i/o. не имеет смысла.
1) Пишет и всегда писала undo. (Иначе быть не может. Заметим, Oracle пишет redo для undo tablespace, но у DB2 его нет).
2) Объёмы меньше.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425612
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander RyndinПо поводу DB2 Express-C. Где там у нас бесплатный сыр обычно встречается?
Раньше (может и сейчас) IBM вообще доплачивал компаниям за то, чтобы они софт по DB2 переписывали.
Т.е. даже даром DB2 никому не нужен - приходится доплачивать.
Дешёвая демагогия.

Oracle тоже раздаёт бесплатную версию, почему, спрашивается?

а разработчикам не только IBM приплачивает (если IBM приплачивает) - есть примеры и в других областях, и вообще никого не должно удивлять, что чтобы (попытаться) что-то заработать, сперва приходится вложиться.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425625
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Victor Metelitsa1) Пишет и всегда писала undo. (Иначе быть не может. Заметим, Oracle пишет redo для undo tablespace, но у DB2 его нет).

не сочиняйте. для анду дб2 читает лог в обратном порядке, пока не встретит метку транзакции, дальше читает вперед, собирая данные для UNDO.

tpc-c на идентичном железе
http://www.tpc.org/tpcc/results/tpcc_result_detail.asp?id=105080802
http://www.tpc.org/tpcc/results/tpcc_result_detail.asp?id=105101702

казалось бы без писанины в undo db2 должен был бы иметь громадное преимущество на таких транзакциях, но на деле ...
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38425637
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor MetelitsaAlexander RyndinПо поводу DB2 Express-C. Где там у нас бесплатный сыр обычно встречается?
Раньше (может и сейчас) IBM вообще доплачивал компаниям за то, чтобы они софт по DB2 переписывали.
Т.е. даже даром DB2 никому не нужен - приходится доплачивать.
Дешёвая демагогия.

Oracle тоже раздаёт бесплатную версию, почему, спрашивается?Да-да. Oracle тоже раздает бесплатный сыр ;) Любая компания рассчитывает этим привлечь к коммерческой версии.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38426010
DPH3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!мощь на двух ядрах менее 20% современного процессора ...


Ну, вообще-то, уже на 4х (с 10.5). И в заметном количестве сценариев ограничение скорее в объеме памяти, а не в процессорах.

А вот HADR за 2K$ в год - это гораздо более заметный плюс. Сколько там стоит минимальная система на Oracle с Data Guard?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38430569
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На проекте, где я сейчас работаю у нас 72-х нодный кластер на DB2. И я скажу так, различия весьма и весьма существеные, что бы там не говорил гражданин Метелица.
Из плюсов DB2 по сравнению с Ораклом, ну даже не знаю, по функциональности DB2 явно уступает последнему, по простоте обслуживания тоже особых плюсов не заметил - обе СУБД одинаково сложно поддерживать на мой взгляд, но я DB2 толком и не администрировал, скорее как разарботчик выступал, так что к последнему замечанию стоит относится критически.
Сразу скажу, если привыкли к Ораклу, то при переходе на DB2 ломка будет серьезная, она все же другая, и архитектурно, и идеологически. К плюсам можно отнести настоящее MPP, но круг приложений, где это нужно весьма ограничен - обычно это DWH. К тому же там реализация такая дурацкая, что я бы вообще никому не рекомендовал в наше время начинать любой DWH проект на DB2. Еще партиционирование настолько примитивное, что даже матом ругаться нет сил. Собственно покупка IBM'ом Netezza тому лишнее подтверждение.
Так что в сухом остатке из плюсов DB2, пожалуй только цена. С другой стороны, для 90% приложений даже функционала DB2 хватит выше крыши, т.е. если не хотите переплачивать за то, что не используете - то вполне себе аргумент.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38432940
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безусловный плюс DB2 - строгое следование канонам реляционной теории.
Из этого получается множество вкусностей типа стоимостного оптимизатора и просто таки заточенности под крайне редкое пользование хинтами. Честный статический SQL. Натурально таки интегрированные друг с другом (в том числе с точки зрения общей оптимизации и построения плана выполнения) SQL и XQuery (с честно интегрированным в РСУБД XML хранилищем содержащим распарсеный XML в виде нод и т.п.) Сейчас вот поколоночное хранение интегрировали со своими вкусностями для аналитики (бегают флагами размахивают, что у них прям прорыв и т.п.)
То же горизонтальное партиционирование. 2 Apex, а что с ним не так??? Интересно. И ещё раз, в Oracle его попросту нет, так что в контексте темы это просто таки жирный плюс DB2. При этом технология более чем зрелая. На моей памяти (>15 лет) ей вовсю (в том числе в мире VLDB) пользуютя "и не жужжат" ;)

"Догоним и перегоним Oracle", устроенное IBM'ом в последнее время - сомнительное мероприятие, от которого IBM'у никуда, правда, не деться. В Oracle отличные маркетологи, они уже захватили ого-го сколько (этакий Windows в мире СУБД ;))
Например, до определённого времени IBM держался и строго ограничивал всякую процедурную писанину внешними ф-ми/процедурами (что с моей точки зрения правильно). Море сомнительного качества кода лабается на бейсикоподобных PL/SQL и SQL PL, это черезвычайно сомнительный способ работы с data set'ами (это даже не хинты, это план доступа, прописываемый в алгоритме как правило плохо сформатированного кода). Сломались.
То же про всякие identity и т.п. Го... плохо-кодеру удобно, а идеологически крайне криво и чревато дальнейшими проблемами.
С другой стороны, и полезные вещи у Оракла и прочих перенимают. Подчас о-о-оочень медленно.

Говорить же, что Oracle - прям вот свет в окне как минимум некорректно. Всяких несуразностей хватает. Пример - смешно сказать, не умеет для заданного tablespace'а свой bufferpool задать :O Т.е. средств "запинить" определённую таблицу(ы) целиком в памяти просто нет (или я ошибаюсь?)
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38432998
Alexander Ryndin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CawaSPb,

BUFFER_POOL
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433012
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CawaSPbГоворить же, что Oracle - прям вот свет в окне как минимум некорректно. Всяких несуразностей хватает. Пример - смешно сказать, не умеет для заданного tablespace'а свой bufferpool задать :O Т.е. средств "запинить" определённую таблицу(ы) целиком в памяти просто нет (или я ошибаюсь?)

чего проще то ? alter table .. cache
вообще буферпул почти для любого объекта в схеме можно задать в storage_clause

db2 до сих пор динозавр, повторяет то что прошел оракл 15-20 лет назад. 15-20 лет назад у оракла тоже был статический SQL который внедрялся в известные языки, типа C, но если на смену этому порно в оракле достаточно быстро пришел 4GL язык, то в db2 sqlpl до сих слишком куцый и глючной, что бы пользователи массового на него пересели. основная фича встроенного в субд языка интеграция с данными. если я снес таблицу, у меня процедуры обращающиеся к этой таблице должны пометиться как invalid и должен быть запрет на запуск заведомо не валидного кода. в db2 до сих пор даже этого базиса нет, понятно что пользователи не понимают какой смысл им переносить.
ну и второй большой косяк - отсутствие версионности, в 21 веке, где даже mysql выдает консистентный набор на момент старта запроса биться будет проблематично. изврат в виде хинтов аля skip_locked, last_committed девелоперы в своей массе не оценят, когда есть выбор
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433363
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Ryndin, Yo.!,

По storage_clause - спасиб!

Yo.!db2 до сих пор динозавр, повторяет то что прошел оракл 15-20 лет назад. 15-20 лет назад у оракла тоже был статический SQL который внедрялся в известные языки, типа C, но если на смену этому порно в оракле достаточно быстро пришел 4GL язык, Это потому что у Оракла никогда не было нормального статического SQL с нормальным менеджментом пакетов (bind, rebind и т.п.). А этот 4GL язык - один фиг бейсик для работы с датасетами толком не предназначенный. Да он стал популярен, но строго потому, что писать на нём идут люди недалеко ушедшие от VB.

Yo.!если я снес таблицу, у меня процедуры обращающиеся к этой таблице должны пометиться как invalid и должен быть запрет на запуск заведомо не валидного кода. в db2 до сих пор даже этого базиса нетЧего????
И инвалидируются процедуры/ф-ии/вьюхи/..., и ревалидируются потом по факту обращения (как и пакеты rebind'ятся).
Можем запросить возможность создавать невалидные объекты (параметр на уровне базы).

Yo.!ну и второй большой косяк - отсутствие версионности, в 21 векеЭто, конечно, большая глупость.
Версионность хороша только для оптимистических блокировок, где либо имеем хороший шанс в конце транзакции получить отлуп, либо неконсистентные данные. В определённой ситуации такие отлупы будут нарастать снежным комом, пока всем не поплохеет.
В то же время полноценный optimistic locking в DB2 никто использовать не запрещает.

DB2_EVALUNCOMMITTED, DB2_SKIPINSERTED, DB2_SKIPDELETED - это несколько "про другое", хотя тоже связано с блокировками и взаимодействием транзакций.

Немного маркетинг-буллшита - ftp://ftp.software.ibm.com/software/data/db2/9/labchats/20110331-slides.pdf :)
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433425
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ApexК тому же там реализация такая дурацкая, что я бы вообще никому не рекомендовал в наше время начинать любой DWH проект на DB2. Еще партиционирование настолько примитивное, что даже матом ругаться нет сил.Здравствуйте.
Всегда хотел пообщаться с человеком, сидящем на таком крупном хранилище.
Если не затруднит, расскажите, что вам не нравится в дурацкой реализации, и чего не хватает в партиционировании для вашего проекта.
Можно в личку, можно здесь...
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433508
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CawaSPbЭто потому что у Оракла никогда не было нормального статического SQL с нормальным менеджментом пакетов (bind, rebind и т.п.). А этот 4GL язык - один фиг бейсик для работы с датасетами толком не предназначенный. Да он стал популярен, но строго потому, что писать на нём идут люди недалеко ушедшие от VB.

мериться отмершими в мире оракла прекомпиляторами не готов, а вот по 4GL запросто. нука напишите мне аналог на любом вашем языке
Код: plsql
1.
create procedure myproc (p_ref IN sys_refcursor, p_row IN tabl1.col1%type)


или выдайте права на процедуры связанные с фин подсистемой (с пакаджем)

CawaSPbЧего????
И инвалидируются процедуры/ф-ии/вьюхи/..., и ревалидируются потом по факту обращения (как и пакеты rebind'ятся).

предлагаете на каждый чих реавалидировать сотни мб кода всего проекта ?


CawaSPbЭто, конечно, большая глупость.
Версионность хороша только для оптимистических блокировок, где либо имеем хороший шанс в конце транзакции получить отлуп, либо неконсистентные данные. В определённой ситуации такие отлупы будут нарастать снежным комом, пока всем не поплохеет.
В то же время полноценный optimistic locking в DB2 никто использовать не запрещает.

DB2_EVALUNCOMMITTED, DB2_SKIPINSERTED, DB2_SKIPDELETED - это несколько "про другое", хотя тоже связано с блокировками и взаимодействием транзакций.

Немного маркетинг-буллшита - ftp://ftp.software.ibm.com/software/data/db2/9/labchats/20110331-slides.pdf :)
жить захочешь, не так раскорячишься. повторю, те сотни хинтов, что призваны хоть как-то компенсировать отсутствие нормальной версионности в db2 не дает базовой вещи - консистентного набора на момент старта запроса/транзакции.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433791
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!Victor Metelitsa1) Пишет и всегда писала undo. (Иначе быть не может. Заметим, Oracle пишет redo для undo tablespace, но у DB2 его нет).

не сочиняйте. для анду дб2 читает лог в обратном порядке, пока не встретит метку транзакции, дальше читает вперед, собирая данные для UNDO.

Не сочиняю. Undo tablespace у DB2 нет. В старые времена при попытке посмотреть на изменённую запись происходила блокировка (если не использовать уровень изоляции UR), теперь может заглянуть в лог ( http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/index.html ).

tpc-c на идентичном железе
http://www.tpc.org/tpcc/results/tpcc_result_detail.asp?id=105080802
http://www.tpc.org/tpcc/results/tpcc_result_detail.asp?id=105101702

казалось бы без писанины в undo db2 должен был бы иметь громадное преимущество на таких транзакциях, но на деле ...

Тем не менее, чтение Льюсового Oracle Core производит сильное впечатление. C поры "IBM DB2 UDB 8.2" ситуация могла сильно поменяться.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433792
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DPH3Yo.!мощь на двух ядрах менее 20% современного процессора ...


Ну, вообще-то, уже на 4х (с 10.5). И в заметном количестве сценариев ограничение скорее в объеме памяти, а не в процессорах.

А вот HADR за 2K$ в год - это гораздо более заметный плюс. Сколько там стоит минимальная система на Oracle с Data Guard?

А Index Advisor'у (доступному даже на DB2 Express-C) примерно соотвествует SQL Access Advisor, что из Tuning Pack, недоступного на Oracle SE/SE1/Express, а на EE за нехилые бабки.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433796
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ApexНа проекте, где я сейчас работаю у нас 72-х нодный кластер на DB2. И я скажу так, различия весьма и весьма существеные, что бы там не говорил гражданин Метелица.

А что он такого говорил? Возможно, у вас сложилось неверное впечатление.

Я полагаю, что перевестись с Oracle на DB2 будет легче, чем на другую СУБД, потому что IBM-еры постарались перенести PL/SQL и кучу других вещей - но это совсем не значит, что будет легко.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433800
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!ну и второй большой косяк - отсутствие версионности, в 21 веке, где даже mysql выдает консистентный набор на момент старта запроса биться будет проблематично. изврат в виде хинтов аля skip_locked, last_committed девелоперы в своей массе не оценят, когда есть выбор
Сферическим девелоперам в вакууме при решении задач о сферических конях в вакууме невозможно обойтись без ораклиной консистентности, ага.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433808
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!db2 до сих пор динозавр, повторяет то что прошел оракл 15-20 лет назад. 15-20 лет назад у оракла тоже был статический SQL который внедрялся в известные языки, типа C, но если на смену этому порно в оракле достаточно быстро пришел 4GL язык
Кстати, по мне, (в сравнении с "4GL") статический SQL в DB2 как был великолепен в DB2 2.1 for OS/2, так и сейчас великолепен (разве что, могли бы добавить поддержку большего количества типов данных). Всякого рода PL/SQL-и нужны были для попытки переманивания с Oracle, но не сами по себе.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433814
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!мериться отмершими в мире оракла прекомпиляторами не готов, а вот по 4GL запросто. нука напишите мне аналог на любом вашем языке
Код: plsql
1.
create procedure myproc (p_ref IN sys_refcursor, p_row IN tabl1.col1%type)



http://tkyte.blogspot.ru/2006/10/slow-by-slow.html
Вот то, чем вы и сотни тысяч таких же, как вы, занимаетесь. Clipper умер, а клипперисты живее всех живых.
предлагаете на каждый чих реавалидировать сотни мб кода всего проекта ?

В нынешних версиях DB2 Oracle-подобное поведение.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433820
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Victor MetelitsaНе сочиняю. Undo tablespace у DB2 нет. В старые времена при попытке посмотреть на изменённую запись происходила блокировка (если не использовать уровень изоляции UR), теперь может заглянуть в лог ( http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/index.html ).

ну и где там двунаправленный лог ? я рад за db2, что он научился вместо грязного блока выдавать last committed. я понимаю, что это огромный шаг для db2, но к консистентному набору выдаваемому версионными субд этот костыль db2 не приближает. никому не нинтересен последняя закомиченная версия, всех интересует та, что была в момент старта запроса/транзакции.

Victor Metelitsa C поры "IBM DB2 UDB 8.2" ситуация могла сильно поменяться.
это не важно, важно, что есть пример, где хорошо видно, что оракл на одинаковом железе может писать в undo+redo быстрее чем db2 или mssql в один transaction log.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433823
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Victor Metelitsa http://tkyte.blogspot.ru/2006/10/slow-by-slow.html
Вот то, чем вы и сотни тысяч таких же, как вы, занимаетесь. Clipper умер, а клипперисты живее всех живых.

анекдот- Сивка Бурка вещая каурка, встань передо мной как лист перед травой.
- Иван, вы бы поконкретнее выражались как вставать, а то у нас у лошадей короткий ассоциативный ряд.

интересно, это у вас под влиянием db2 декларация процедуры ассоцируется с клипером ?

Victor MetelitsaВ нынешних версиях DB2 Oracle-подобное поведение.
это вам мерещется, ничего похожего на зависимости в db2 нет.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433828
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!ничего похожего на зависимости в db2 нет.
А зачем они нужны, если всё равно не используются? Какая принципиальная разница между
последовательностями "изменение объекта - инвалидация зависимых - попытка использования
зависимого объекта - попытка компиляции - ошибка пользователю" и "изменение объекта -
попытка использования зависимого объекта - ошибка - попытка компиляции - ошибка пользователю"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433924
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!нука напишите мне аналог на любом вашем языке
Код: plsql
1.
create procedure myproc (p_ref IN sys_refcursor, p_row IN tabl1.col1%type)


нуканаписал:
Код: sql
1.
create procedure myproc (IN p_ref cursor, IN p_row ANCHOR tabl1.col1)

В режиме совместимоси с Ораклом - вообще без изменений.
Yo.!или выдайте права на процедуры связанные с фин подсистемой (с пакаджем)Не уверен, что понял, что вы хотите.
В db2 права на процедуры выдаются так же как и в Оракле - грантом на выполнение процедуры, а не на пакет.
На пакет выдаются гранты, если вы написали программу на C, JAVA, например, с использованием статического SQL.
Можно выдавать грант на выполнение модуля (пакета по-вашему), что даёт право на выполнение любой опубликованной процедуры.

Вопрос: чего здесь не хватает по сравнению с Ораклом?
Yo.!... если я снес таблицу, у меня процедуры обращающиеся к этой таблице должны пометиться как invalid и должен быть запрет на запуск заведомо не валидного кода. в db2 до сих пор даже этого базиса нет.
...
это вам мерещется, ничего похожего на зависимости в db2 нет.Мне тоже что-то мерещится.
Давайте на примере.

В системном каталоге есть несколько представлений с именем DEP в конце.
Вот их список
CONSTDEP
DATATYPEDEP
FUNCDEP
INDEXDEP
INDEXEXTENSIONDEP
PACKAGEDEP
ROUTINEDEP
TABDEP
TABDETACHEDDEP
TRIGDEP
VARIABLEDEP
VIEWDEP
XSROBJECTDEP

Во всех представлениях есть поля для описания объектов от которых есть зависимость:
BTYPE, BSCHEMA, BNAME
При DDL эти таблицы ведутся автоматически, и я могу проверить любые зависимости.
Вот пример
Код: sql
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.
create table dep_t(i int)/

create or replace procedure dep_p(out prows int)
specific dep_p
begin
  set prows = (select count(1) from dep_t);
end/

select r.valid, d.btype, varchar(d.bname, 20) bname
from syscat.routines r
join syscat.routinedep d 
on d.routineschema=r.routineschema and d.specificname=r.specificname
where r.routineschema=user and r.specificname='DEP_P'/

VALID BTYPE BNAME               
----- ----- --------------------
Y     T     DEP_T               
Y     K     P2101101175         

-- Я вижу, что моя процедура зависит от 2-х объектов - моей таблицы и пакета.

-- после drop
drop table dep_t/
-- запрос возвращает:
VALID BTYPE BNAME               
----- ----- --------------------
N     T     DEP_T               
N     K     P2101101175         

-- и вызов возвращает ошибку
call dep_p(?)/

SQL0727N  An error occurred during implicit system action type "3". 
Information returned for the error includes SQLCODE "-204", SQLSTATE "42704" 
and message tokens "MARK_B.DEP_T".  LINE NUMBER=0.  SQLSTATE=56098

-- после пересоздания таблицы я вызываю ревалидацию процедуры явно, и моя процедура начинает работать
CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS('procedure', user, 'DEP_P')/
-- я могу выставить параметр базы так, чтобы оно в рантайме само автоматически пыталось ревалидировать все инвалидные объекты при обращении к ним, если мне это надо.

Вопрос: что в этой схеме ведения зависимостей не так, и чем Оракл лучше в этом смысле?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433930
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!db2 до сих пор динозавр, повторяет то что прошел оракл 15-20 лет назад. 15-20 лет назад у оракла тоже был статический SQL который внедрялся в известные языки, типа C, но если на смену этому порно в оракле достаточно быстро пришел 4GL язык, то в db2 sqlpl до сих слишком куцый и глючной.Вы путаете SQL статический (db2: static), которого у Оракла никогда не было, и "встраиваемый" (db2: embedded).
Про куцый и глючный: ОБС-news или на примере можете?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433991
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinsteinнуканаписал:
Код: sql
1.
create procedure myproc (IN p_ref cursor, IN p_row ANCHOR tabl1.col1)

В режиме совместимоси с Ораклом - вообще без изменений.

блин, если уж встреваете в спор, ну проследите нить разговора:
CawaSPbЭто потому что у Оракла никогда не было нормального статического SQL с нормальным менеджментом пакетов (bind, rebind и т.п.). А этот 4GL язык - один фиг бейсик для работы с датасетами толком не предназначенный. Да он стал популярен, но строго потому, что писать на нём идут люди недалеко ушедшие от VB.


к чему тут пример на SQLPL, покажите аналог этой процедуры на прекомпиляторе + static SQL ! та же фигня с грантами.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38433996
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinВы путаете SQL статический (db2: static), которого у Оракла никогда не было, и "встраиваемый" (db2: embedded).

и там и там прекомпилятор, разница лишь в деталях. на мой взгляд статик SQL ублюдочен в своей концепции. план запроса должен меняться вместе с ростом и изменениями объектов субд, а не зашиваться вместе с процедурой. запрос в любых условиях должен исполняться с оптимальным планом, а не с тем, что был когда-то оптимальным.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434128
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!к чему тут пример на SQLPL, покажите аналог этой процедуры на прекомпиляторе + static SQL ! та же фигня с грантами.А какой смысл показывать, как на мотоцикле пару мешков картошки возить? Это на машине удобнее делать, примерно такой же, как и ваша.
Yo.!и там и там прекомпилятор, разница лишь в деталях. на мой взгляд статик SQL ублюдочен в своей концепции. план запроса должен меняться вместе с ростом и изменениями объектов субд, а не зашиваться вместе с процедурой. запрос в любых условиях должен исполняться с оптимальным планом, а не с тем, что был когда-то оптимальным.Никому не интересно как мы код компилируем - с пре-, пост- или вместо-компилятором. Главное отличие в результате.

Попробуйте расширить своё сознание (только без веществ, пожалуйста :), чтобы понять эту концепцию. Идея там примерно в следующем:
Часто вы знаете, что план запроса не будет меняться с изменением статистики. Такие запросы характерны для OLTP систем - они простые, но их много.
Для того, чтобы выполнить динамический запрос вы должны сделать:
- распарсить запрос, проверить, есть ли он в кэше запросов
- проверить права на каждую таблицу запроса
- построить план и сохранить его в кеше запросов
Понятно, что все шаги вы не делаете постоянно, если не закрываете стейтмент сразу после использования. Но накладные расходы есть, и они могут стать довольно значительными, особенно если запросов действительно много.
В случае статических запросов вы только провеояете права на выполнение пакета, который управляет всеми запросами программы.
У IBM есть даже такой продукт, как pureQuery , который может превращать динамические запросы вашей программы в статические без перепрограммирования. Говорят, что на некоторых нагрузках можно получить только из этого довольно неплохие результаты .

В общем, это инструмент для своих нужд, его не надо пытаться использовать для решения всех задач.
Если вы не хотите, то можете его не использовать.
Но в Оракле этого просто нет.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434147
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinА какой смысл показывать, как на мотоцикле пару мешков картошки возить? Это на машине удобнее делать, примерно такой же, как и ваша.

прекомпилер это не мотоцикл - это динозовр, на большинстве задач давно вымерший по объективным причинам.

Mark BarinsteinЧасто вы знаете, что план запроса не будет меняться с изменением статистики.
очнитесь, на дворе 21 век, cost based оптимизаторы. да наши предки грелись у костров, охотились на мамонтов и использовали прекомпиллеры, но сейчас то оптимизатор может посмотреть в буферный кеш и изменить план уже исходя из этого. прекомпиллер физически не может построить оптимальный план не имея даже базовой информации, какая часть таблицы в буферном кеше. опять же план может сильно зависеть от переменных, я не понимаю как прекомпилятор мог бы построить оптимальный план на каждый вариант. на все варианты не зашьешь ...
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434181
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!прекомпиллер физически не может построить оптимальный план не имея даже базовой информации, какая часть таблицы в буферном кеше. опять же план может сильно зависеть от переменных, я не понимаю как прекомпилятор мог бы построить оптимальный план на каждый вариант. на все варианты не зашьешь ...Вы, похоже, так и не поняли, о чём я написал.
Для построения плана запроса типа:
Код: sql
1.
select ... from mytable where pk=:par

не надо знать ни статистики, ни значения параметра, ни то, какая там часть таблицы в кэше сидит. Какие тут могут быть варианты? Вариант плана здесь всегда будет один, и он же будет оптимальным.
А главная идея в том, чтобы для такого запроса (которых, повторюсь, может быть очень много) убрать накладные расходы, которые в сумме вообще могут превысить расходы на выполнение этого запроса.

А для 21-го века у DB2 есть тоже хитрый оптимизатор и т.п.

P.S.:
1. Всё ли понятно теперь про зависимости в db2? Они все-таки есть, или их по-прежнему нет для вас?
2. Про куцый и глючный DB2 SQL/PL (или PL/SQL) будут примеры?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434194
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinsteinselect ... from mytable where pk=:par

[/src]не надо знать ни статистики, ни значения параметра, ни то, какая там часть таблицы в кэше сидит. Какие тут могут быть варианты? Вариант плана здесь всегда будет один, и он же будет оптимальным.

если колонка pk не уникальна, даже на столь примитивном запросе будет полно вариантов.

Mark BarinsteinА главная идея в том, чтобы для такого запроса (которых, повторюсь, может быть очень много) убрать накладные расходы, которые в сумме вообще могут превысить расходы на выполнение этого запроса.

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

Mark BarinsteinА для 21-го века у DB2 есть тоже хитрый оптимизатор и т.п.
поэтому db2 и бросила все силы на копирование фич oracle, а не выносит мозг протухшими прекомпиляторами.

Mark Barinstein1. Всё ли понятно теперь про зависимости в db2? Они все-таки есть, или их по-прежнему нет для вас?
2. Про куцый и глючный DB2 SQL/PL (или PL/SQL) будут примеры?

1. далеко не все, такие зависимости и в мсскл есть, а может db2 отследить если изменилась колонка с варчар на инт ?
2. попозжей будут
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434224
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!поэтому db2 и бросила все силы на копирование фич oracle, а не выносит мозг протухшими прекомпиляторами.Вы зациклились на прекомпиляторах. Считайте, что его нет в db2. В SQL процедуре статический код появляется без всяких прекомпиляторов, например.
Yo.!Mark Barinstein1. Всё ли понятно теперь про зависимости в db2? Они все-таки есть, или их по-прежнему нет для вас?
1. далеко не все, такие зависимости и в мсскл есть, а может db2 отследить если изменилась колонка с варчар на инт ?
Каких зависимостей не хватает? И при чём здесь MSSQL?

Что значит "отслеживать"?
Инвалидировать зависящие от объекты?
Пример
Код: sql
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.
create table test_v(v varchar(10))/
insert into test_v values '1', '2', '3'/
alter table test_v alter v set data type int/
describe select * from test_v/

 Column Information

 Number of columns: 1

 SQL type              Type length  Column name                     Name length
 --------------------  -----------  ------------------------------  -----------
 497   INTEGER                   4  V                                         1


insert into test_v values '1', '2', '3'/

DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0668N  Operation not allowed for reason code "7" on table "MARK_B.TEST_V".  
SQLSTATE=57016

Explanation: 
...
7        

         The table is in the reorg pending state. This can occur after
         an ALTER TABLE statement containing a REORG-recommended
         operation.

select * from test_v/

V          
-----------
          1
          2
          3


Т.е. оно переводит таблицу в read-only режим после изменения типа до тех пор, пока я не сделаю реорганизацию таблицы.
Процедура типа этой не инвалидируется.
Код: sql
1.
2.
3.
4.
5.
create or replace procedure test_v(pi varchar(10), out po varchar(10))
specific test_v
begin
  set po = (select v from test_v where v=pi);
end/

Это нормально или нет?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434246
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!выносит мозг протухшими прекомпиляторамиСпасибо, поржал. И про вынос мозга очень к месту.
Yo.!, любезный, "прекомпилятор" - это совсем не то, что Вы думаете :)
Прекомпилятор - это тулза, запускаемая до компиляции/интерпретации, а не вместо :)
И никакие исполняемые коды (планы исполнения для SQL) прекомпилятор генерить не может в принципе. Его задача - только подготовить исходный текст.

В DB2 "прекомпилятором" можно назвать те фазы, которые запрос объединяют в один длинный текст, inline подставляя view и специально обученные UDF (нет такого в Oracle), парсят его, переформулируют (sql rewriting - есть ли он в Oracle?), объединяют группу запросов в пакет, проверяют права. Т.е. делают всю работу, для которой статистика и прочие cost based совсем не нужна.
Получется полуфабрикат - пакет по-DB2'шному.
Собственно "компиляция", при которой строятся планы выполнения, грубо говоря называется bind/rebind. И уже она может происходить в момент вызова, в момент первого обращения или постоянно при необходимости (как в интерпретаторах, но без подготовительных фаз "прекомпилятора") - как укажешь.
И что лучше - интерпретатор, работающий только одним способом, или компиляция с возможностью выбора ее времени с экономией времени на предобработку?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434248
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinВы зациклились на прекомпиляторах. Считайте, что его нет в db2. В SQL процедуре статический код появляется без всяких прекомпиляторов, например.

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

Mark BarinsteinЧто значит "отслеживать"?
Инвалидировать зависящие от объекты?

да, инвалидировать код, заведомо не выполнимый.

Mark BarinsteinЭто нормально или нет?

на мой взгляд нет. po у вас объявлено как варчар, а таблица вернет инт, значит ваша процедура превратилась в инвалидную.

зы. так на счет того, что оптимальность плана может измениться не только из-за изменений статистики я убедил ?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434252
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!po у вас объявлено как варчар, а таблица вернет инт, значит ваша процедура
превратилась в инвалидную.
А что, implicit cast числа в строку кто-то предал анафеме?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434351
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CawaSPb2 Apex, а что с ним не так??? Интересно. И ещё раз, в Oracle его попросту нет, так что в контексте темы это просто таки жирный плюс DB2. При этом технология более чем зрелая. На моей памяти (>15 лет) ей вовсю (в том числе в мире VLDB) пользуютя "и не жужжат" ;)

Согласен, по сравнению с Ораклом - все прекрасно, тут у меня претензий никаких.

На счет не жужжат - я бы так не сказал. Тут вот какое дело, как и Оракл РАК, так и DB2 DPF (ранее PE) они, что называется, кластерны не от природы, обе СУБД уходят корнями в некластерные СУБД для OLTP. Отсюда лишние сложности в администрировании: надо создавать какие-то партинш группы, партишн тейблспейсы, думать о том, в каком тейблспейсе у тебя таблица - в партиционированном или нет? и пр. Т.е. прозрачность для приложений вроде есть, а вот для администрирования как-то не очень.

Теперь что касается функционала, в DB2 варехаузный ИМХО слабоват: набор аналитических функций куций по сравнению с тем же Ораклом, партиционирование только двухуровневое (хотелось бы еще минимум одного), truncate конкретной партиции просто так не сделаешь - надо сначала detach сделать, переливка данных из таблицы в таблицу а-ля INSERT /*+APPEND*/ INTO - это вообще песня, где простая операция превращаетя в серию каких-то приседаний и подпрыгиваний с курсорами и вызовами консольной утилиты LOAD через процедуру ADMIN_CMD. CTAS опять же ущербный...

В общем, я конечно понимаю, что по сравнению с мировой революцией - это все мелочи и дело привычки, но сложно все как-то, не удобно и работать с DB2 в будущем у меня никакого желания нет.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434366
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!Mark BarinsteinЧто значит "отслеживать"?
Инвалидировать зависящие от объекты?да, инвалидировать код, заведомо не выполнимый.
Mark BarinsteinЭто нормально или нет?на мой взгляд нет. po у вас объявлено как варчар, а таблица вернет инт, значит ваша процедура превратилась в инвалидную.Нет, процедура как работала, так и работает. Там будет делаться неявное преобразование типов.

Еще есть претензии/вопросы к зависимостям в db2?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434373
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!зы. так на счет того, что оптимальность плана может измениться не только из-за изменений статистики я убедил ?Вы даже не начали. Если это продолжение:
Yo.!select ... from mytable where pk=:par
если колонка pk не уникальна, даже на столь примитивном запросе будет полно вариантов.то давайте обсудим.
Дано: "большая" таблица, поля в предикате проиндексированы, запрос возвращяет несколько записей (ну, не больше 20-30). Кардинальность индекса высокая. В общем, довольно часто встречающийся вариант в OLTP системе.

Расскажите про "полно вариантов", кроме обычного IXSCAN-FETCH.
Мы каждый обсудим и решим, много ли от перебора всех возможных вариантов мы выиграем.
И много ли потеряем, если для такого случая оптимизатор при каждом из огромного потока таких запросов будет проявлять интеллект и решать, а надо ли поменять план.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434381
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Apexпартиционирование только двухуровневое (хотелось бы еще минимум одного), truncate конкретной партиции просто так не сделаешь - надо сначала detach сделать, переливка данных из таблицы в таблицу а-ля INSERT /*+APPEND*/ INTO - это вообще песня, где простая операция превращаетя в серию каких-то приседаний и подпрыгиваний с курсорами и вызовами консольной утилиты LOAD через процедуру ADMIN_CMD. CTAS опять же ущербный...
- партиционирование
Вы можете использовать MDC для "субпартиционирования" (возможно указать несколько полей в ORGANIZE) типа такого:
Код: sql
1.
2.
3.
4.
CREATE TABLE MYTABLE
DISTRIBUTE BY (...)
PARTITION BY (...)
ORGANIZE BY (...)

Вы не используете такой вариант? Если нет, то почему?

- INSERT /*+APPEND*/ INTO
Будет работать и в DB2 с той разницей, что в DB2 нет APPEND хинта, и чтобы добиться такого же поведения, надо выставить это свойство на уровне таблицы.
LOAD from CURSOR же - это весьма скоростная альтернатива, позволяющая заметно быстрее, без жуналирования, вставлять в таблицу большие объёмы данных на основе другого запроса.
Типа sql loader'а в режиме direct path, только входные данные - результат запроса. Не уверен, что в Оракле есть такая возможность, поэтому трудно сравнивать.

- CTAS
В DB2 есть процедура ADMIN_MOVE_TABLE, которая похожие вещи делает, если я правильно понял аббревиатуру CTAS.
К ней надо привыкнуть, конечно, но с ней проблемы или неудобства какие-то?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434437
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinНет, процедура как работала, так и работает. Там будет делаться неявное преобразование типов.

Еще есть претензии/вопросы к зависимостям в db2?
да, про неявную сглупил, но вы поняли в чем мой вопрос. в обратной ситуации - переменная инт, а в таблице на чар сменили

Mark Barinsteinто давайте обсудим.
Дано: "большая" таблица, поля в предикате проиндексированы, запрос возвращяет несколько записей (ну, не больше 20-30). Кардинальность индекса высокая. В общем, довольно часто встречающийся вариант в OLTP системе.

по вашему олтп это лишь вытягивания по индексу ? я например столь примитивные запросы в реальных системах не встречал. если хотите совсем конкретики давайте возьмем TPC-E - реальная задача, реальные запросы. там, например, такого примитива нет.
но даже на таком примитивном запросе если по значению 'shit' возвращается 99.9% записей, то вместо индекса эффективней фулскан применить. т.е. уже не один вариант.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434569
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!да, про неявную сглупил, но вы поняли в чем мой вопрос. в обратной ситуации - переменная инт, а в таблице на чар сменилиНет, я не понял разницы.

DB2 мне не запрещает на
Код: sql
1.
create table test_v(v varchar(10))

пытаться делать арифметические операции над v.
Т.е. я могу в процедуре делать v + 1, например, и процедура создастся.
То же самое будет, если я поменяю int на varchar в таблице, т.е. процедура использующая арифметику не будет инвалидироваться.
Она в рантайме будет отваливаться, если неявное преобразование varchar -> int не пройдёт.

А как это в Оракле происходит?
Создастся ли на таблице выше процедура, где есть обращение v + 1 к полю?
Будет ли процедура инвалидироваться при изменении varchar -> int?
Yo.!по вашему олтп это лишь вытягивания по индексу ? я например столь примитивные запросы в реальных системах не встречал. если хотите совсем конкретики давайте возьмем TPC-E - реальная задача, реальные запросы. там, например, такого примитива нет.
но даже на таком примитивном запросе если по значению 'shit' возвращается 99.9% записей, то вместо индекса эффективней фулскан применить. т.е. уже не один вариант.Да, по-моему OLTP - это преимущественно вытягивание по индексу.
Я не говорю, что все, но значительная часть запросов - да.
Давайте смотреть TPC-E, если хотите.
Можете показать, где там будут фуллсканы встречаться, неравномерное распределение данных и т.п.
Я уверен, что и там мы с вами найдем запросы, для которых не надо знать статистику и всё остальное, а можно будет только по существующим индексам сказать, какой будет оптимальный план запроса.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38434899
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein- партиционирование
Вы можете использовать MDC для "субпартиционирования" (возможно указать несколько полей в ORGANIZE) типа такого:
Код: sql
1.
2.
3.
4.
CREATE TABLE MYTABLE
DISTRIBUTE BY (...)
PARTITION BY (...)
ORGANIZE BY (...)


Вы не используете такой вариант? Если нет, то почему?

Гм... Про MDC я в курсе, причем давно, но вот используется он у нас и правда редко. Интересно почему. Спасибо, Марк, несмотря на всю очевидность решения, оно мне почему-то в голову не пришло, посыпаю голову пеплом.
Хотя если подумать, такой способ тоже не лишен недостатков, это все же не полноценные партиции, их нельзя дропнуть или сделать truncate, например, ровно как и нельзя за секунду сделать attach, как с партициями.
Но с другой стороны это почти тоже самое, что и партиции в Терадате (их концепция партиционирования очень похожа на MDC), если вставлять и удалять данные будет так же быстро, то detach\attach и не нужен.

Mark Barinstein- INSERT /*+APPEND*/ INTO
Будет работать и в DB2 с той разницей, что в DB2 нет APPEND хинта, и чтобы добиться такого же поведения, надо выставить это свойство на уровне таблицы.
LOAD from CURSOR же - это весьма скоростная альтернатива, позволяющая заметно быстрее, без жуналирования, вставлять в таблицу большие объёмы данных на основе другого запроса.
Типа sql loader'а в режиме direct path, только входные данные - результат запроса. Не уверен, что в Оракле есть такая возможность, поэтому трудно сравнивать.

Свойство на уровне таблицы - это alter, а на него не всегда дают права, особенно редко это позволяют делать в хранимках.
На самом деле Оракловый INSERT /*+APPEND*/ INTO есть ничто иное как direct path операция (ну ясное дело, что если триггеров нет), выполняемая в определенных случаях без генерации журналов отката\наката.

Mark Barinstein- CTAS
В DB2 есть процедура ADMIN_MOVE_TABLE, которая похожие вещи делает, если я правильно понял аббревиатуру CTAS.
К ней надо привыкнуть, конечно, но с ней проблемы или неудобства какие-то?
Не совсем, ADMIN_MOVE_TABLE все же для перемещения таблиц налету. Я же имел в виду Create Table As Select, т.е. гораздо более простую операцию, которая только в DB2 почему-то не умеет заполнять таблицу данными из запроса.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38435043
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ApexХотя если подумать, такой способ тоже не лишен недостатков, это все же не полноценные партиции, их нельзя дропнуть или сделать truncate, например, ровно как и нельзя за секунду сделать attach, как с партициями.
Но с другой стороны это почти тоже самое, что и партиции в Терадате (их концепция партиционирования очень похожа на MDC), если вставлять и удалять данные будет так же быстро, то detach\attach и не нужен.Да, скорость удаления, скорее всего, не будет такая же, как при detach. При вставке данных выигрыша вы не получите. Оно, всё же, для оптимизации ввода-вывода с помощью автоматической кластеризации предназначено.
Но и удаление при определённых условиях будет идти эффективнее обычного delete.
См. Rollout deletion .

ApexMark Barinstein- CTAS
В DB2 есть процедура ADMIN_MOVE_TABLE, которая похожие вещи делает, если я правильно понял аббревиатуру CTAS.
К ней надо привыкнуть, конечно, но с ней проблемы или неудобства какие-то?Не совсем, ADMIN_MOVE_TABLE все же для перемещения таблиц налету. Я же имел в виду Create Table As Select, т.е. гораздо более простую операцию, которая только в DB2 почему-то не умеет заполнять таблицу данными из запроса.Скорее всего это сделано для того, чтобы разделить DDL и DML - в DB2, в отличие от Oracle (насколько я знаю), DDL - под транзакционным контролем, и если всю операцию сделать в одной транзакции, то на некоторые системные таблицы могут длительное время висеть строчные блокировки, что иногда нежелательно.
Но с другой стороны, всё "неудобство" заключается в том, что вы делаете 2 команды вместо 1 с тем же select_statement :
Код: plaintext
1.
create table newtab as ( select_statement ) definition only;
insert into newtab  select_statement ;
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38437465
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinА как это в Оракле происходит?
Создастся ли на таблице выше процедура, где есть обращение v + 1 к полю?
Будет ли процедура инвалидироваться при изменении varchar -> int?

в оракл 11.2 то же самое, что в дб2 произошло. вроде раньше такого не было, я ожидал, что инвалидирует процедуру. я поищу постарше оракл.

Да, по-моему OLTP - это преимущественно вытягивание по индексу.
Я не говорю, что все, но значительная часть запросов - да.
Давайте смотреть TPC-E, если хотите.
[/quot]

давайте смотреть TPC-E, вот запрос из BrokerVolume.sql
Код: plsql
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.
    SELECT  B_NAME,
            SUM(TR_QTY * TR_BID_PRICE)
    FROM    BROKER,
            TRADE_REQUEST,
            SECURITY,
            COMPANY,
            INDUSTRY,
            SECTOR
    WHERE   B_NAME      IN (@broker1,  @broker2,  @broker3,  @broker4,  @broker5,
                            @broker6,  @broker7,  @broker8,  @broker9,  @broker10,
                            @broker11, @broker12, @broker13, @broker14, @broker15,
                            @broker16, @broker17, @broker18, @broker19, @broker20,
                            @broker21, @broker22, @broker23, @broker24, @broker25,
                            @broker26, @broker27, @broker28, @broker29, @broker30,
                            @broker31, @broker32, @broker33, @broker34, @broker35,
                            @broker36, @broker37, @broker38, @broker39, @broker40) AND
            B_ID        = TR_B_ID   AND
            TR_S_SYMB   = S_SYMB    AND
            S_CO_ID     = CO_ID     AND
            CO_IN_ID    = IN_ID     AND
            IN_SC_ID    = SC_ID     AND
            SC_NAME     = @sector_name
    GROUP   BY B_NAME
    ORDER   BY 2 DESC
    OPTION  (FORCE ORDER, LOOP JOIN)
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38438465
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, всё пропустил :)

Небольшие ремарки.

Yo.!Mark Barinsteinто давайте обсудим.
Дано: "большая" таблица, поля в предикате проиндексированы, запрос возвращяет несколько записей (ну, не больше 20-30). Кардинальность индекса высокая. В общем, довольно часто встречающийся вариант в OLTP системе.

по вашему олтп это лишь вытягивания по индексу ? я например столь примитивные запросы в реальных системах не встречал. если хотите совсем конкретики давайте возьмем TPC-E - реальная задача, реальные запросы. там, например, такого примитива нет.
но даже на таком примитивном запросе если по значению 'shit' возвращается 99.9% записей, то вместо индекса эффективней фулскан применить. т.е. уже не один вариант.
На самом деле это даже неважно. Дело в том, что в DB2 это управляемо (REOPT опция команд BIND / REBIND ), а в Oracle выбора просто нет ;)
Лёгкость, с которой IBM добавило эту фичу (довольно давно, когда точно - не скажу) - следствие стройности и глубокой продуманности архитектуры системы. Так во всём. Именно за это я люблю DB2. Она не делается методом "заплаток" (ничего не могу сказать в этом отношении про Оракл).
Второй момент - IBM просто фантастически упорно старается придерживаться стандартов. И это хорошо.


Мой поинт в том, что боже упаси считать "Oracle - suxx, DB2 - rulezzz!" Оракл тоже более чем зрелая, зарекомендовавшая себя и подтвердившая свой статус широким использованием система.
Но говорить "DB2 - старьё, застрявшее где-то в прошлом веке" - или некомпетентность, или откровенное сознательное враньё.

Примером тому "старая добрая" DPF, натурально таки интегрированный в RDBMS полноценный XML движок (pureXML), pureScale, многообещающий BLU Acceleration ( http://it.toolbox.com/blogs/db2luw/ibm-db2-105-with-blu-acceleration-vs-oracle-exadata-57369 ), ну и самое главное - отличный мощный развиваемый SQL.
Можно долго спорить по каждой из этих фич, где лучше или хуже что реализовано, приводить примеры, ссылаться на benchmarketing и т.п. Всё это иррелевантно без привязки к конкретному проекту (серии проектов).

Самый большой и очень серьёзный минус DB2 - количество спецов по ней в России. Но если у компании они/внешний сервис есть или компания готова наращивать компетенции, DB2 будет отличным выбором (как и Оракл).
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38438640
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!в оракл 11.2 то же самое, что в дб2 произошло. вроде раньше такого не было, я ожидал, что инвалидирует процедуру. я поищу постарше оракл.Т.е. оракл чем новее, тем хуже становится? :)
Тоже даёт в ногу себе выстрелить, если очень хочется?
Yo.!давайте смотреть TPC-E, вот запрос из BrokerVolume.sqlЧто вы хотите этим примером показать?
Если то, что в OLTP системах, как в этом тесте, иногда кому-то охота BI запросы погонять, то да, я вам верю.
Для этого запроса, скорее всего, нет смысла использовать статический sql - он не для этого. Запрос этот выполняется не часть. Хотя и для этого запроса, когда накопится достаточное кол-во данных и что-то серьёзно не будет меняться, то можно перестроить план в последний раз по текущей статистике и больше этим не заниматься.

Но там же ниже чуть ли не все запросы - очень хорошие кандидаты для статики.
Начал собирать их, но потом бросил - их слишком много

Код: sql
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.
select ... from CUSTOMER where C_TAX_ID = tax_id;

select ... from CUSTOMER where C_ID = cust_id;

select ... 
from CUSTOMER_ACCOUNT 
left outer join HOLDING_SUMMARY on HS_CA_ID = CA_ID,
LAST_TRADE
where CA_C_ID   = cust_id and LT_S_SYMB = HS_S_SYMB
group by CA_ID, CA_BAL
order by 3 asc;

select ...
from
(select first 10 rows
T_ID as ID
 from
TRADE
 where
T_CA_ID = acct_id
 order by T_DTS desc) as T,
TRADE,
TRADE_HISTORY,
STATUS_TYPE
where
T_ID = ID and
TH_T_ID = T_ID and
ST_ID = TH_ST_ID
order by TH_DTS desc

update
LAST_TRADE
set
LT_PRICE = price_quote[i],
LT_VOL = LT_VOL + trade_qty[i],
LT_DTS = now_dts
where
LT_S_SYMB = symbol[i];

update TRADE
set
T_DTS   = now_dts,
T_ST_ID = status_submitted
where T_ID = req_trade_id;

delete TRADE_REQUEST
where current of request_list;

insert into TRADE_HISTORY
values (
TH_T_ID = req_trade_id,
TH_DTS = now_dts,
TH_ST_ID = status_submitted
);


select
WI_S_SYMB
from
WATCH_ITEM,
WATCH_LIST
where
WI_WL_ID = WL_ID and
WL_C_ID = cust_id;


Либо простейшие запросы по индексу, либо на несколько таблиц по стандартной схеме: IXSCAN по индексу одной таблицы + NLJOIN по всем остальным.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38442283
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CawaSPbНа самом деле это даже неважно. Дело в том, что в DB2 это управляемо (REOPT опция команд BIND / REBIND ), а в Oracle выбора просто нет ;)

а зачем в 21 веке такой выбор ? это имело смысл разве, что в 80х, сейчас потратить несколько микросекунд на постройку примитивного плана на порядок, если не два быстрее выходит, чем лезть на хдд.

CawaSPbЛёгкость, с которой IBM добавило эту фичу (довольно давно, когда точно - не скажу) - следствие стройности и глубокой продуманности архитектуры системы. Так во всём. Именно за это я люблю DB2. Она не делается методом "заплаток" (ничего не могу сказать в этом отношении про Оракл).

вы предвзяты. именно из-за косяков архитектуры ибм пришлось налепить столько заплаток в стиле skip_locked, last_commited, отдельные костыли под оптимистичную стратегию.

CawaSPbПримером тому "старая добрая" DPF, натурально таки интегрированный в RDBMS полноценный XML движок (pureXML), pureScale, многообещающий BLU Acceleration ( http://it.toolbox.com/blogs/db2luw/ibm-db2-105-with-blu-acceleration-vs-oracle-exadata-57369 ), ну и самое главное - отличный мощный развиваемый SQL.

а теперь взгляните на реальность/ много в мире реальных OLTP систем на DPF или pureScale ? а на BLU Acceleration
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38442335
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinТ.е. оракл чем новее, тем хуже становится? :)
Тоже даёт в ногу себе выстрелить, если очень хочется?

пока не понял, наверно отслеживаются только SQL типы, например в INSERT INTO сразу инвалидируются, а вот при конвертации из SQL в PL/SQL ... надо почитать.

Mark BarinsteinЧто вы хотите этим примером показать?
я хочу сказать, что в типичном OLTP простетньких запросов - мизер и подавляющая часть достаточно сложные. но суть не в кол-ве, а в том, что даже несколько часто используемых запросто превратят систему в большого тормоза.
в любой современной субд запросы кешируются, если план ушел из кеша на примитивный план построится за пару микросекунд, т.е. хранить на хдд примитивные планы смысла нет никакого, они гораздо быстрее построятся, чем ибм их прочтет с хдд. с более сложными смысла еще меньше, т.к. оптимальность их плана меняется с течением жизни системы.

Mark Barinstein Хотя и для этого запроса, когда накопится достаточное кол-во данных и что-то серьёзно не будет меняться, то можно перестроить план в последний раз по текущей статистике и больше этим не заниматься.

а потом на бирже появиться торговый робот, один сгенерит 20% транзакций и ваш план ...

Mark Barinstein Начал собирать их, но потом бросил - их слишком много
половина из них не так проста, как вам кажется
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38442620
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!Mark BarinsteinТ.е. оракл чем новее, тем хуже становится? :)
Тоже даёт в ногу себе выстрелить, если очень хочется?

пока не понял, наверно отслеживаются только SQL типы, например в INSERT INTO сразу инвалидируются, а вот при конвертации из SQL в PL/SQL ... надо почитать.Т.е. вы не зная, как оно там в оракле, и уж точно не зная, как оно в db2, начали обвинять db2 в отсутствии нормального ведения зависимостей?
Ну что же, если вы не только блестящий теоретик, то сделайте, пожалуйста, тесты у себя, а потом мы поговорим, у кого там тру ведение зависимостей.

Yo.!я хочу сказать, что в типичном OLTP простетньких запросов - мизер и подавляющая часть достаточно сложные. но суть не в кол-ве, а в том, что даже несколько часто используемых запросто превратят систему в большого тормоза.
в любой современной субд запросы кешируются, если план ушел из кеша на примитивный план построится за пару микросекунд, т.е. хранить на хдд примитивные планы смысла нет никакого, они гораздо быстрее построятся, чем ибм их прочтет с хдд. с более сложными смысла еще меньше, т.к. оптимальность их плана меняется с течением жизни системы.
Я уже говорил, что скорость построения плана это не единственные накладные расходы.
С микросекундами у вас ошибка примерно на 3 (!!!) порядка. Они за миллисекунды строятся, даже самые простые.
Ну да ладно, как говорится, имеющий уши да услышит...

Похоже, что мы действительно понимаем с вами под OLTP разные вещи.
Вот ваш TPC-E. Там как раз подавляющая часть - простые запросы.
Если считаете, что нет - давайте, показывайте свою половину "непростых" запросов и разные варианты планов.

Yo.! а потом на бирже появиться торговый робот, один сгенерит 20% транзакций и ваш план ...Кто придёт?
Робот? Со своим SQL Developer'ом и ad-hoc запросами?
Как этот робот повлияет на мои планы запросов?
Кто это в свою OLTP систему пускает каких-то роботов с возможностью генерировать неизвестно что?
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38450268
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinТ.е. вы не зная, как оно там в оракле, и уж точно не зная, как оно в db2, начали обвинять db2 в отсутствии нормального ведения зависимостей?
Ну что же, если вы не только блестящий теоретик, то сделайте, пожалуйста, тесты у себя, а потом мы поговорим, у кого там тру ведение зависимостей.

ну извини, даже лидер индустрии еще не довел отслеживание зависимостей до совершенства.

Mark BarinsteinЯ уже говорил, что скорость построения плана это не единственные накладные расходы.
С микросекундами у вас ошибка примерно на 3 (!!!) порядка. Они за миллисекунды строятся, даже самые простые.
Ну да ладно, как говорится, имеющий уши да услышит...

вы из 80х что-ли пишете ? за милисекунды я результат на уже клиенте имею

Mark BarinsteinКто придёт?
Робот? Со своим SQL Developer'ом и ad-hoc запросами?
Как этот робот повлияет на мои планы запросов?

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

Mark BarinsteinПохоже, что мы действительно понимаем с вами под OLTP разные вещи.
Вот ваш TPC-E. Там как раз подавляющая часть - простые запросы.
Если считаете, что нет - давайте, показывайте свою половину "непростых" запросов и разные варианты планов.


-- BrokerVolumeFrame1 is responsible retrieving
-- the total volume that could be potentially
-- generated by each qualifying broker.

-- MarketWatchFrame1 is responsible for retrieving
-- the current price of each symbol on the list
-- and computing the average percentage of change
-- in price over the list.

-- Trade Lookup Frame 1 is responsible for retrieving
-- information about the specified maximum of 20 trade IDs.

-- Trade Update Frame 1 is responsible for retrieving
-- information about the specified max of 20 trade IDs.
-- It also may modify up to max_updates rows of TRADE.

-- CustomerPositionFrame2 is responsible for retrieving
-- the 10-30 most recent trade events for the specified account

-- CustomerPositionFrame2 is responsible for retrieving
-- the 10-30 most recent trade events for the specified account

во всем перечисленном вполне завернутые запросы, с джоинами на несколько таблиц, сортировками, топ 20 и т.п.
в общем очень далеко от вашего представления "OLTP - это преимущественно вытягивание по индексу"
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38456083
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!ну извини, даже лидер индустрии еще не довел отслеживание зависимостей до совершенства.Ну извиняю.
Т.е. я правильно, понял, что вы берёте назад свои голословные обвинения DB2 в том, что по сравнению с лидером индустрии "ничего похожего на зависимости в db2 нет"?

Если да, то давайте перейдём к следующему вашему утверждению: "в db2 sqlpl до сих слишком куцый и глючной".
Раз вы решили поучаствовать в топике, где автор писал про "мнение тех, кто работал с этими двумя БД", у вас должны быть примеры об этом. Мы дождёмся их?

Yo.!вы из 80х что-ли пишете ? за милисекунды я результат на уже клиенте имеюНет, я пишу из настоящего.
А вот разработчики Оракла, по-вашему, всё ещё в 80-х находятся, судя по тому, что в Using Application Tracing Tools в выводе tkprof "parse time" в десятках миллисекунд измеряется:
вывод tkprof из доки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT * 
FROM emp, dept 
WHERE emp.deptno = dept.deptno;

call   count      cpu    elapsed     disk    query current    rows
---- -------  -------  --------- -------- -------- -------  ------
Parse     11     0.08      0.18        0       0       0         0
Execute   11     0.23      0.66        0       3       6         0
Fetch     35     6.70      6.83      100   12326       2       824
------------------------------------------------------------------
total     57     7.01      7.67      100   12329       8       826

Да и Statistics Descriptions говорит о том, что parse time elapsed - Total elapsed time for parsing, in 10s of milliseconds.
Т.е. у пользователя Оракла нет шансов в большинстве случаев получить это время для OLTP запросов, т.к. там нули будут?
Можете погуглить цифры, которые у реальных пользователей получаются, если доступа к живой системе нет.
У меня сейчас нет доступа к Ораклу. Но я, например, довольно часто вижу в DB2 примерно одинаковые времена компиляции и выполнения простых запросов, и это время выражается в десятках или единицах милисекунд. Не знаю, конечно, может лидер индустрии действительно обгоняет не лидеров на порядки в этом...

Yo.!вы современные предприятия совсем видели ? в TPC-E описаны транзакции, которые обрабатывает типичное агентство, у агентства могут быть клиенты люди-брокеры, а могут быть торговые автоматы, которые эти транзакции дергают через веб сервисы, например. один такой автомат может надергать больше транзакций, чем все остальные клиенты агентства вместе взятые.Да какая разница, автомат или человек дергает транзакции? Главное то, что никто не позволит автомату дёргать неизвестно как сгенерированный код. Он из этих веб-сервисов только заранее прописанные там запросы может надёргать, и не важно, в каком количестве или комбинации.
Или что, в современных предприятиях, которые вы видели, для автоматов создаются веб-сервисы типа "дайте мне любой текст запросов, я его выполню для вас"? Мне с трудом в это верится. Это самоубийство.


По запросам могу отвечать последовательно.

-- MarketWatchFrame1

В 5% случаев для этой транзакции выполняется запрос, по которому действительно нужна статистика (по индустрии и с диапазоном в 5000 компаний). В остальных 95% случаев там простейшие запросы, которые вполне подходят для статического sql.
MarketWatchFrame1
Код: sql
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.
-- сложный
select
S_SYMB
from
INDUSTRY,
COMPANY,
SECURITY
where
IN_NAME = industry_name and
CO_IN_ID = IN_ID and 
CO_ID between (starting_co_id and ending_co_id) and
S_CO_ID = CO_ID;

-- простейшие
select
WI_S_SYMB
from
WATCH_ITEM,
WATCH_LIST
where
WI_WL_ID = WL_ID and
WL_C_ID = cust_id;

select
HS_S_SYMB
from
HOLDING_SUMMARY
where
HS_CA_ID = acct_id;

select
new_price = LT_PRICE
from
LAST_TRADE
where
LT_S_SYMB = symbol;

select
s_num_out = S_NUM_OUT
from
SECURITY
where
S_SYMB = symbol;

// Closing price for this security on the chosen day.
select
old_price = DM_CLOSE
from
DAILY_MARKET
where
DM_S_SYMB = symbol and
DM_DATE = start_date;

...
Рейтинг: 0 / 0
Oracle vs DB2
    #38458573
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinНу извиняю.
Т.е. я правильно, понял, что вы берёте назад свои голословные обвинения DB2 в том, что по сравнению с лидером индустрии "ничего похожего на зависимости в db2 нет"?

не правильно.
вот как это получилось у дб2 ?
http://dbaspot.com/ibm-db2/91190-syscat-routines-valid-column.html

вообще, если на proc2 SYSCAT.ROUTINES.VALID показывает N или X, что будет показываться на proc1, которая имеет вызов proc2 ?

Mark BarinsteinРаз вы решили поучаствовать в топике, где автор писал про "мнение тех, кто работал с этими двумя БД", у вас должны быть примеры об этом. Мы дождёмся их?

обязательно

Mark BarinsteinНет, я пишу из настоящего.
А вот разработчики Оракла, по-вашему, всё ещё в 80-х находятся, судя по тому, что в
Да и Statistics Descriptions говорит о том, что parse time elapsed - Total elapsed time for parsing, in 10s of milliseconds.

это какой-то троллинг ? эти цифры в 80х и были получены, вот они еще в доке от восьмерки:
http://docs.oracle.com/cd/A87860_01/doc/server.817/a76992/ch14_str.htm

Mark BarinsteinМожете погуглить цифры, которые у реальных пользователей получаются, если доступа к живой системе нет.

зачем гуглить, у меня оракл есть, беру реальный запрос из вьюшки, с нетривиальным планом
Код: 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.
select id
from
 secretview id = 100801


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1       0.00        0.07          0          6          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.37       0.39          1       4652          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.37       0.46          1       4658          0           1

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYS

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  NESTED LOOPS OUTER (cr=4652 pr=1 pw=0 time=240684 us)
      1   FILTER  (cr=4651 pr=1 pw=0 time=391827 us)
   1503    HASH JOIN OUTER (cr=4651 pr=1 pw=0 time=181213 us)
   1503     NESTED LOOPS  (cr=34 pr=1 pw=0 time=32315 us)
      1      NESTED LOOPS  (cr=11 pr=1 pw=0 time=29213 us)
      1       NESTED LOOPS OUTER (cr=10 pr=1 pw=0 time=29186 us)
      1        NESTED LOOPS  (cr=10 pr=1 pw=0 time=29175 us)
      1         NESTED LOOPS  (cr=6 pr=1 pw=0 time=29097 us)
      1          NESTED LOOPS  (cr=5 pr=1 pw=0 time=29064 us)
      1           TABLE ACCESS BY INDEX ROWID secrettable  (cr=3 pr=1 pw=0 time=29021 us)
      1            INDEX UNIQUE SCAN secrettable_PK (cr=2 pr=1 pw=0 time=28980 us)(object id 162392)
      1           TABLE ACCESS BY INDEX ROWID secrettable  (cr=2 pr=0 pw=0 time=39 us)
      1            INDEX UNIQUE SCAN EXCTRS_PK (cr=1 pr=0 pw=0 time=19 us)(object id 162411)
      1          INDEX UNIQUE SCAN PK_secrettable  (cr=1 pr=0 pw=0 time=24 us)(object id 162424)
      1         TABLE ACCESS BY INDEX ROWID secrettable  (cr=4 pr=0 pw=0 time=73 us)
      1          INDEX UNIQUE SCAN secrettable_PK (cr=3 pr=0 pw=0 time=53 us)(object id 162512)
      0        INDEX UNIQUE SCAN PK_LEGAL_STATUSES (cr=0 pr=0 pw=0 time=3 us)(object id 162471)
      1       INDEX UNIQUE SCAN PK_EMPLOYEES (cr=1 pr=0 pw=0 time=22 us)(object id 162426)
   1503      TABLE ACCESS FULL CLIENT_SETTINGS (cr=23 pr=0 pw=0 time=114 us)
1453316     INDEX FAST FULL SCAN secrettable_PK (cr=4617 pr=0 pw=0 time=163 us)(object id 162512)
      1   INDEX UNIQUE SCAN PK_EMPLOYEES (cr=1 pr=0 pw=0 time=20 us)(object id 162426)

********************************************************************************

не вижу милисикунд даже на сервере 2006 года.

Mark BarinsteinУ меня сейчас нет доступа к Ораклу. Но я, например, довольно часто вижу в DB2 примерно одинаковые времена компиляции и выполнения простых запросов, и это время выражается в десятках или единицах милисекунд. Не знаю, конечно, может лидер индустрии действительно обгоняет не лидеров на порядки в этом...

похоже мы получили ответ, почему у дб2 так держится за прекомпиляцию

Mark BarinsteinДа какая разница, автомат или человек дергает транзакции? Главное то, что никто не позволит автомату дёргать неизвестно как сгенерированный код.
блин, ну я же русским языком разъяснил, цитата - "торговые автоматы, которые эти транзакции дергают". что за сгенеренный код ? суть в кол-ве записей, автомат за секунду может миллионы транзакций надергать, брокер-человек за жизнь столько может и не поспеть.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
-- простейшие
select
WI_S_SYMB
from
WATCH_ITEM,
WATCH_LIST
where
WI_WL_ID = WL_ID and
WL_C_ID = cust_id;


не факт. 10 брокеров людей имеют 100 WATCH_ITEM, один брокер-автомат 100500 WATCH_ITEMs, для брокера-автомата дешевле фулскан.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38458697
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!не правильно.
вот как это получилось у дб2 ?
http://dbaspot.com/ibm-db2/91190-syscat-routines-valid-column.html

вообще, если на proc2 SYSCAT.ROUTINES.VALID показывает N или X, что будет показываться на proc1, которая имеет вызов proc2 ?Вы бы ещё про db2 v2.1 где-нибудь что-нибудь нашли.
Вероятно в то время, когда SQL процедуры неявно c-компилятором преобразовывались в нативный код и на этой 8.1.5 версии были такие странности, хотя и тогда по состоянию пакета можно было понять, что процедура не выполнится.
Сейчас катрина поменялась, пример это демонстрирует.
После удаления таблицы:
- Процедура test_dep1, обращающаяся к таблице, имеет статус N, её пакет - статус X.
- Вызывающая эту test_dep1 процедура test_dep2 имеет статус Y, её пакет - N.
Пример
Код: sql
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.
create table test_dep (i int) in userspace1/

create procedure test_dep1 (pi int, out po int)
specific test_dep1
begin
  set po = (select count(1) from test_dep where i = pi);
end/

create procedure test_dep2 (pi int, out po int)
specific test_dep2
begin
  call test_dep1(pi, po);
end/

drop table test_dep/

select r.valid rvalid, p.valid pvalid, varchar(r.specificname, 10) name
from syscat.routines r
join syscat.routinedep d 
on d.routineschema=r.routineschema and d.specificname=r.specificname and d.btype='K'
join syscat.packages p 
on p.pkgschema=d.bschema and p.pkgname=d.bname
where r.routineschema=user and r.specificname in ('TEST_DEP1', 'TEST_DEP2')/

RVALID PVALID NAME      
------ ------ ----------
N      X      TEST_DEP1 
Y      N      TEST_DEP2 

call test_dep2(1, ?)/

SQL0727N  An error occurred during implicit system action type "3". 
Information returned for the error includes SQLCODE "-204", SQLSTATE "42704" 
and message tokens "DB2INST1.TEST_DEP".  LINE NUMBER=0.  SQLSTATE=56098

Итак, по таблицам зависимостей легко можно определить, что у нас валидно и будет выполняться, а что нет.
Ещё вопросы есть? Будем слова свои назад брать?

Yo.!зачем гуглить, у меня оракл есть, беру реальный запрос из вьюшки, с нетривиальным планом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select id
from
 secretview id = 100801


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1       0.00        0.07          0          6          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.37       0.39          1       4652          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.37       0.46          1       4658          0           1
...
похоже мы получили ответ, почему у дб2 так держится за прекомпиляцию
Похоже, что мы получили то, что вы не очень-то разбираетесь в том, сколько времени и на что Оракл тратит.

Код: plaintext
1.
2.
Table 21-4 SQL Trace Statistics for Parses, Executes, and Fetches:
CPU    : Total CPU time in seconds for all parse, execute, or fetch calls for the statement.
ELAPSED: Total elapsed time in seconds for all parse, execute, or fetch calls for the statement.

Вы посмотрели не в ту колонку. Никому не интересно, сколько там времени именно CPU тратит на построение плана. Главное - сколько времени в сумме у системы ушло на это.
В вашем случае это 70 миллисекунд. 15% времени выполнения.
Разница между этими 2-мя показателями это "the total waiting time for parse resources". Вот в эту разницу у вас всё время и ушло.

Yo.!не факт. 10 брокеров людей имеют 100 WATCH_ITEM, один брокер-автомат 100500 WATCH_ITEMs, для брокера-автомата дешевле фулскан.А вы не отклоняйтесь от условий конкретного теста, раз сами его предложили рассмотреть. Нету тут такого распределения данных. Наверное, создатели этого теста посчитали, что вариант с сошедшими с ума роботами не очень показателен.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38465870
Фотография Apex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark BarinsteinYo.!зачем гуглить, у меня оракл есть, беру реальный запрос из вьюшки, с нетривиальным планом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select id
from
 secretview id = 100801


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1       0.00        0.07          0          6          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        2      0.37       0.39          1       4652          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.37       0.46          1       4658          0           1
...
похоже мы получили ответ, почему у дб2 так держится за прекомпиляцию
Похоже, что мы получили то, что вы не очень-то разбираетесь в том, сколько времени и на что Оракл тратит.

Код: plaintext
1.
2.
Table 21-4 SQL Trace Statistics for Parses, Executes, and Fetches:
CPU    : Total CPU time in seconds for all parse, execute, or fetch calls for the statement.
ELAPSED: Total elapsed time in seconds for all parse, execute, or fetch calls for the statement.

Вы посмотрели не в ту колонку. Никому не интересно, сколько там времени именно CPU тратит на построение плана. Главное - сколько времени в сумме у системы ушло на это.
В вашем случае это 70 миллисекунд. 15% времени выполнения.
Разница между этими 2-мя показателями это "the total waiting time for parse resources". Вот в эту разницу у вас всё время и ушло.

Ну это потому что был hard parse.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38467304
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinВы бы ещё про db2 v2.1 где-нибудь что-нибудь нашли.
Вероятно в то время, когда SQL процедуры неявно c-компилятором преобразовывались в нативный код и на этой 8.1.5 версии были такие странности, хотя и тогда по состоянию пакета можно было понять, что процедура не выполнится.
Сейчас катрина поменялась, пример это демонстрирует.
После удаления таблицы:
- Процедура test_dep1, обращающаяся к таблице, имеет статус N, её пакет - статус X.
- Вызывающая эту test_dep1 процедура test_dep2 имеет статус Y, её пакет - N.
...
Ещё вопросы есть? Будем слова свои назад брать?

нашел то с чем сталкивался, к сожалению, что-то свежее на zOS не часто встретишь.
если test_dep2 имеет статус Y я верно понимаю, что test_dep3 вызывающая test_dep2 будет иметь везде Y ?

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

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

Mark BarinsteinА вы не отклоняйтесь от условий конкретного теста, раз сами его предложили рассмотреть. Нету тут такого распределения данных. Наверное, создатели этого теста посчитали, что вариант с сошедшими с ума роботами не очень показателен.
я вам хотел показать, что такое OLTP задача. в принципе. повторюсь, запросы даже в синтетическом tpc-e не так просты, как вам кажется, а в реальных системах они на порядок сложнее и распределение данных на порядок забавней.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38467306
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ApexНу это потому что был hard parse.
так мы про хард и рассуждаем, тысячи планов построятся в пределах секунды, лазить за каждым из них на хдд, явно архаизм.
...
Рейтинг: 0 / 0
Oracle vs DB2
    #38470397
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yo.!нашел то с чем сталкивался, к сожалению, что-то свежее на zOS не часто встретишь.
если test_dep2 имеет статус Y я верно понимаю, что test_dep3 вызывающая test_dep2 будет иметь везде Y ?
Так здесь, вроде, речь не про DB2 for zOS идёт, а про DB2 for LUW.
Да, поведение DB2 отличается здесь от поведения Оракла: если:
- test_dep1 обращается к таблице
- test_dep2 вызывает test_dep1
и таблицу удаляют, то test_dep2 (и все, которые её вызывают) не инвалидируется.
Сделано это, скорее всего, намеренно, т.к. здесь мне достаточно создать таблицу и ревалидировать test_dep1, которая непосредственно на неё ссылается. И не пытаться ревалидировать другие поцедуры, т.к. ревалидировать там нечего.
С практической точки зрения я всегда могу по таблице зависимостей определить, какие именно процедуры не будут выполняться:
вот так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t(routineschema, specificname) as (
select routineschema, specificname
from syscat.routines
where routineschema=user and valid<>'Y'
  union all
select d.routineschema, d.specificname
from syscat.routinedep d, t
where d.bschema=t.routineschema and d.bname=t.specificname and d.btype='F'
)
select distinct routineschema, specificname
from t


и ревалидировать то, что мне нужно (либо все, либо все в схеме, либо по отдельности) специальной процедурой.
Yo.!я не ту табличку выложил. это единственный запрос какой (с десятком NESTED LOOPS) начинает хоть какие-то цифры показывать и для этого мне пришлось поискать раритетную технику. все, что проще оракл даже измерить не может. я не представляю какой тормозной должен быть оптимизатор, что бы на современном железе по настоящему примитивный запрос. если дб2 за миллисекунды строит простые запросы, сколько же занимает постройка плана с десятком NESTED LOOPS !?? на моем i7 я не смог увидеть миллисекунды.Ну да, имея чувствительность в десятки миллисекунд, тяжело на современном железе поймать такие запросы. Но дело даже не в скорости построения одного плана, а в соотношении времени выполнения и потраченного времени на накладные расходы.
Я ведь не просто просил вас погуглить по, например "oracle high parse time".
Можно получить такие , или такие результаты. Запросы там очень быстро выполняются, только если parse time такое убрать, то запросов бы гораздо больше в единицу времени можно было бы выполнить.
Yo.!я вам хотел показать, что такое OLTP задача. в принципе. повторюсь, запросы даже в синтетическом tpc-e не так просты, как вам кажется, а в реальных системах они на порядок сложнее и распределение данных на порядок забавней.Спасибо, что пытаетесь открыть мне глаза!
Только я и сам принимал участие в разработке таких систем, и сейчас довольно часто приходится смотреть на то, что разные компании пишут.
И могу сказать, повторяясь, что да, не все OLTP запросы простые, есть и забавные распределения данных. Но простых запросов много в таких системах.

Но мы, действительно, слишком много времени этим статическим запросам уделили. Это как рассматривать смысл использования мотоцикла, если есть легковая машина: где-то пригодится, где-то нет.

Я к вам почему прицепился: вы в очередной раз, не имея никакого опыта работы с предметом обсуждения (DB2 for LUW), начали её обвинять в серьезных грехах.
Мы продолжим дальше обсуждение "отсутствующих зависимостей" и "куцего и глючного" языка?
...
Рейтинг: 0 / 0
66 сообщений из 66, показаны все 3 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Oracle vs DB2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]