|
|
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
locky искуственный гемор - это когда <sensored> гонят чёрти какие запросы к базе, когда для выполнения тривиальных задач требуется совершенно нетривиальные железки и ПО, когда для выяснения - откуда же блин берутся такие данные (или куда они деваются) приходится устанавливать полный аудит хотя согласен конечно, это действительно утомительно. Правда это не совсем developer-dba тема, потому что могут быть как на одной стороне подобные пробои, так и на другой. Если в бессознательном состоянии делать что-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2009, 21:01 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Yo.!MGYНичего не понял причем тут фенсед и препроцессор, и подстановка фетчей ? при том, что pl/sql имеет общее с субд адресное пространство, а sqlj в db2 это внешний и чуждый для субд процесс Может я чего не понял но тут сравнивали, я так понял, возможности оракл и дб2, а сравнивать велосипед с феррари никто и не собирался. Если говори о тормознутости жава в хранимых дб2, то следует аналогии проводить из других субд именно с жавой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2009, 14:43 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Yo.!sqlj в db2 это внешний и чуждый для субд процесс который лезет в базу через тот же JDBC. просто писанины чуть меньше. Забавно, а почему взята статья именно от 2003 года? Там еще за 2000 найти можно, еще раритетнее :) На самом деле, даже в приведенной Вами сказано, что SQLJ использует коннект от JDBC для получения ConnectionContext, а не "лезет через него в базу". А в случае SP и его не использует - коннект-то там уже есть. JDBC работает с динамическими запросами, а SQLJ обращается к уже скомпилированным пакаджам. Еще раз - при прекомпиляции запросы SQLJ превращаются фактически в вызовы "плана № X" на сервере, JDBC тут вообще никакого участия не принимает. По поводу "чуждого" процесса - в DB2 есть 2 режима работы Java драйвера - type 2 и type 4. Type 2 является прослойкой над нативным для ОС клиентом, type 4 от него и ОС независим и сам писан на джаве. Для SP используется именно type 2, т.е. Java процедура работает практически как fenced процедура на C, например. Т.е. при локальном коннекте (в т.ч. в случае SP) вместо сетевых прелестей используется нормальное межпроцессное взаимодействие в рамках ОС (через shared memory, например). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2009, 17:10 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
2 Yo.! К слову, при компиляции процедуры на SQL PL создают в БД фактически такие же пакаджи, содержащие скомпилированные в планы статические запросы и логику. Просто вызываются они тем же процессом, что и выполняются, а не "сторонним". Так что по сравнению с SQL PL "попадалово" для Java тут только на переключение контекстов и передачу данных в ОП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2009, 17:45 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
MGY Если говори о тормознутости жава в хранимых дб2, то следует аналогии проводить из других субд именно с жавой. почему именно с жавой ? вот у мсскл нет вменяемого варианта с жава, зато есть с .Net. важно не чем конкретно решается задача, а на сколько эффективно и удобно. но даже если говорить о жава в том же оракле жава интегрирована в ядро субд, т.е. более тесно чем у db2. 2Favn покажите более подробное описание, я не лингвист и фразу "The SQLJ runtime relies on a JDBC driver to obtain a database connection in order to access the database." понял, что access тоже тоже идет по jdbc. мое рассуждение просто - раз жава отдельный процесс, чуждый к SQL значит от нее и к ней нужно гонять входящие/исходящие данные как не крути. оракл же может биндить pl/sql переменные сразу, не гоняя их через тормознутый jdbc и не конвертируя не совпадающие форматы. не понятно чем заменить %rowtype и иже с ним, никаких bulk insert/collect, отслеживаний зависимостей и сотни других важных фич. к стате в бимерском sql pl есть какой-то error handling ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2009, 02:07 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Yo.!почему именно с жавой ? вот у мсскл нет вменяемого варианта с жава, зато есть с .Net. важно не чем конкретно решается задача, а на сколько эффективно и удобно.К слову - любители могут писать SP/UDF на .Net и в DB2 :) Yo.!но даже если говорить о жава в том же оракле жава интегрирована в ядро субд, т.е. более тесно чем у db2.Что значит "интегрирована"? Как я понимаю, у Оракл просто есть своя имплементация JVM, поставляемая с СУБД. Но у IBM тоже своя JVM и свой Java SDK, тоже поставляемые с DB2 и работающие с ней. Куда "интегрированней"? Или Оракл сам исполняет байт-код, в обход своей JVM? Тогда Java там должна быть быстрее PL/SQL - он-то, бедный, VM использует! ;) Более того, бесплатно можно скачать IBM Data Studio, после чего в единой среде Eclipse со всеми ее вкусностями писать SP ( в т.ч. с удаленной отладкой) как на SQL PL, так и на Java. И там же с БД работать. Yo.!покажите более подробное описание, я не лингвист и фразу "The SQLJ runtime relies on a JDBC driver to obtain a database connection in order to access the database." понял, что access тоже тоже идет по jdbc.В том контексте сие значит, что отдельное Java приложение использует JDBC для коннекта. Дальше SQLJ получает ConnectionContext и живет своей жизнью, используя JDBC только для динамических запросов. Подробнее здесь , но там много. :) В случае Java SP коннект уже есть, просто берется default. Еще раз - у JDBC и SQLJ общий драйвер . Работая в режиме type 2 он является надстройкой над клиентом DB2, т.е. в случае SP - над собственно native API сервера. Yo.!мое рассуждение просто - раз жава отдельный процесс, чуждый к SQL значит от нее и к ней нужно гонять входящие/исходящие данные как не крути. оракл же может биндить pl/sql переменные сразу, не гоняя их через тормознутый jdbc и не конвертируя не совпадающие форматы.Опять - DB2 jdbc type 2 не более тормознутый, чем C CLI, например. И "гонять данные" нужно не больше, чем в SP на C, например. Или при native compilation PL/SQL (например, как вроде самый быстрый вариант PL/SQL) в вызовах процедур передача параметров не используется, оно само там как-то? :) А приведение типов - да, для сложных типов нужно . И что, это большие потери? Кажется, мы договорились, что логику массированной обработки данных лучше делать в SQL PL, а внешние задачи - на Java. Yo.!не понятно чем заменить %rowtype и иже с ним, никаких bulk insert/collect, отслеживаний зависимостей и сотни других важных фич.Трудно сказать, не разбираясь в Оракл, но навскидку: 1. %rowtype в Java - видимо ничем. Тем не менее, можно работать с возвращаемым rowset или параметром типа cursor. В SQL PL заменим на row data type . 2. bulk insert - в Java на batch update , который не только INSERT, но и все остальное, включая MERGE. Чем BULK COLLECT в SP лучше курсора - не понял, видимо это специфично для Оракл. 3. отслеживания зависимостей - именно для этого и существует SQLJ с хранимыми в БД package с запросами (к Oracle package и к Java package никакого отношения не имеют). 4. Про сотни важных фич - со столькими не знаком :) Но опять-таки подозреваю, что важны они именно для обработки данных, а для нее я Java SP и не предлагаю. А в самой Java как в универсальноq платформе важных фич - тьма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2009, 15:50 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Yo.!к стате в бимерском sql pl есть какой-то error handling ?А как же! Только точнее - condition handlers. Если коротко - реагировать можно вообще на SQLEXCEPTION, SQLWARNING, NOT FOUND, или на что-то конкретное, в т.ч. пользовательское событие, выдаваемое SIGNAL . Объявляем обработчик с нужным кодом, по завершении которого произойдет EXIT (из процедуры), CONTINUE или UNDO (последний - в ATOMIC блоках). В обработчике можно сделать RESIGNAL события. Дальше пишем собственно SP, обработчики вызываются сами при возникновении заданных условий. Примеры тут , в конце. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2009, 16:03 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
FavnЧто значит "интегрирована"? Как я понимаю, у Оракл просто есть своя имплементация JVM, поставляемая с СУБД. Но у IBM тоже своя JVM и свой Java SDK, тоже поставляемые с DB2 и работающие с ней. Куда "интегрированней"? терминами ibm - в оракле жаба not fenced и живет в SGA, тесно интегрирована с типами и прочая. у db2 же интеграции по сути нет, ему по барабану даже, что там за jvm - хочешь хоть сановскую запускай, субд пофигу, кто там через драйвер jdbc/jsql лезет ... еще раз java stored procedures в db2 это просто syntax shugar, на которую из jvm вешать не суть важно. вся интеграция сделана на уровне синтаксиса, а не на уровне архитектуры и структур памяти. у оркла примерно так же сторед процедуры на .net прикручены. Favn Еще раз - у JDBC и SQLJ общий драйвер . Работая в режиме type 2 он является надстройкой над клиентом DB2, т.е. в случае SP - над собственно native API сервера. это единый драйвер, он одинаково работает как c jdbc так и с sqlj, хрен с ним пусть в режиме type 2 но драйвер один и тормозной из-за жава прослойки. Yo.!И "гонять данные" нужно не больше, чем в SP на C, например. Или при native compilation PL/SQL (например, как вроде самый быстрый вариант PL/SQL) в вызовах процедур передача параметров не используется, оно само там как-то? :) про что я и толкую - само. SQL движек их возьмет из структур памяти pl/sql машины. а вот db2-шная fenced жава будет их гонять копии и их преобразовывать растрачивая ресурсы. Java has its own set of supported data types. DB2 also has its own set of data types. As an example, the DB2 data type VARCHAR does not exist in Java. However Java has a String object that can be used instead. DB2 UDB has a set of "preferred" data type mappings that is best to use for Java applications and stored procedures http://www.ibm.com/developerworks/data/library/techarticle/dm-0510law/index.html Yo.! И что, это большие потери? Кажется, мы договорились, что логику массированной обработки данных лучше делать в SQL PL, а внешние задачи - на Java. да, вроде уже раза два до этого договорились, но вы каждый раз выпячиваете жава как альтернативу pl/sql. херовая она альтернатива в плане серьезного перелопачивания данных, если нужно серьезно перелопачивать много данных нужен нормальный, развитый язык 4GL с серьезной интеграцией с субд. а жаву, если уж и использовать, то как полноценное ООП (в виде 3-tier), а не процедуры на жаве лабать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2009, 16:34 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Не нравится жаба ? Вот вам тогда альтернатива PL/SQL. Заюзать Progress DB. Тогда родной для нее - язык Progress 4GL. И на нем где модуль обработки событий клиентского ввода, а где триггерная функция - не разберешь. И выполняются в одном месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 00:49 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Наконец нашел время почитать про Oracle JVM. Yo.!терминами ibm - в оракле жаба not fenced и живет в SGA, тесно интегрирована с типами и прочая. у db2 же интеграции по сути нет, ему по барабану даже, что там за jvm - хочешь хоть сановскую запускай, субд пофигу, кто там через драйвер jdbc/jsql лезет ...Начнем сначала - JVM есть интерпретатор намеренно простого байт-кода, плюс мусорщик, JIT и RTTI с рефлексией. Остальное - в библиотеках пакетов, к которым относится "драйвер" СУБД. Можно уточнить (или ссылочку дать) какие именно данные , с кем и по какому поводу делит сей механизм в SGA? Моей скудной фантазии не хватает, и мне кажется, что "субд пофигу" - верное описание. :) Как я понял отсюда , основные фичи интеграции JVM в Оракл - это общий heap для read-only данных (хотя при чем тут СУБД?), управление мусорщиком шедулером Оракл и загрузка пакетов Java из СУБД. 1-е вполне соответствует not fenced Java в DB2 (с общей JVM). Остальное м.б. удобно, м.б. не очень - дело вкуса, но уж точно не решающее преимущество. И где тут SGA, или я что-то пропустил? Yo.!это единый драйвер, он одинаково работает как c jdbc так и с sqlj, хрен с ним пусть в режиме type 2 но драйвер один и тормозной из-за жава прослойки.Теперь о драйвере DB2 - сдается мне, что тут у Вас путаница в терминах. Он "единый" только в том смысле, что упакован в единый пакет, но в него входят множество компонентов для разных режимов работы. Прочитал про 3 драйвера JDBC в Oracle: 1. JDBC Thin driver 2. JDBC OCI driver 3. JDBC server-side internal driver. О чудо - полное соответствие с DB2! 1 - type 4, 2 - type 2, 3 - type 2 при работе на сервере (локальный коннект). Разница только в компоновке пакетов - 3 отдельных или 1 общий. Заметим, что в любом случае "тормозная" Java прослойка есть, только в Оракл она общается с ОС не напрямую, а посредством Oracle Database libraries. Т.е. через еще одну прослойку. ;) С СУБД же они общаются примерно одинаково, причем не на уровне JVM, а на уровне "драйверов", т.е. интерфейсных библиотек. Yo.!еще раз java stored procedures в db2 это просто syntax shugar, на которую из jvm вешать не суть важно. вся интеграция сделана на уровне синтаксиса, а не на уровне архитектуры и структур памяти. у оркла примерно так же сторед процедуры на .net прикручены.Еще раз - при чем тут JVM? Все дело в пакетах интерфейса с СУБД ("драйверах"), а не в JVM. А SQLJ является syntax shugar именно в Оракл, где он тупо превращается в JDBC вызовы: "When your SQLJ application runs, the SQLJ run time calls JDBC to communicate with the database." В DB2 же SQLJ, как и любой другой static SQL - принципиально другой способ работы, не использующий не только JDBC, но даже CLI (аналог OCI). Причем другой не только со стороны Java, но и со стороны СУБД. И возможная экономия ресурсов именно СУБД на выполнении запросов, а также иные вкусности, тут куда значительней затрат на копирование переменных. Кстати, о копировании. Yo.!про что я и толкую - само. SQL движек их возьмет из структур памяти pl/sql машины. а вот db2-шная fenced жава будет их гонять копии и их преобразовывать растрачивая ресурсы.С PL/SQL - понятно, но то же самое, как я понял из Ваших утверждений, можно сказать и про Java в Oracle? Посмотрим на первый попавшийся пример : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Yo.!As an example, the DB2 data type VARCHAR does not exist in Java. However Java has a String object that can be used instead.Что-то я не заметил, чтобы в примере выше вместо String использовалось что-то волшебное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2009, 17:26 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Yo.!да, вроде уже раза два до этого договорились, но вы каждый раз выпячиваете жава как альтернативу pl/sql. херовая она альтернатива в плане серьезного перелопачивания данных, если нужно серьезно перелопачивать много данных нужен нормальный, развитый язык 4GL с серьезной интеграцией с субд.Для серьезного перелопачивания как альтернативу я каждый раз "выпячиваю" SQL PL, и все еще не очень понимаю чем именно для этого он принципиально хуже. Скажу больше - перелопачивать куда эффективнее самим SQL. И что-то внешнее отн. СУБД куда лучше по возможности делать из UDF, вызывая их из SQL, не нагружая сервер своими представлениями о процедурах перелопачивания. И только если получается криво - в SP на Java, и только для "внешних" действий. Но тема топика - именно SP. Yo.!а жаву, если уж и использовать, то как полноценное ООП (в виде 3-tier), а не процедуры на жаве лабать.Заметьте, не я это предложил! (с) ;) И я полностью согласен, но в рамках данного разговора считал оффтопиком, имеющим отношение к проектированию. У нас, как правило, SP и table UDF на SQL PL используются для изоляции разработчиков на всяком PHP и т.д. от не вполне понятного им SQL, т.е. для абстрагирования и разделения задач. А внутри SP - в основном запросы, без всякой надобности в "универсальном" 4GL. Так что да - в 3-tier оно лучше, но в Oracle по поводу Java SP все-таки тоже зачем-то заморочились. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2009, 18:02 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Favn, не пойму в чем смысл отрицать столь очевидное ? честно говоря мне не интересно обсуждать чья жава более тормознутая, но факты очевидны - оракл переколбасил жава, как в плане архитектуры (ту же стратегию гарбадж коллектора) так и в плане структур памяти (вот ссылка о jvm в SGA/PGA) . IBM же так заморачиваться не стал и гоняет обычную жаву, любую, хоть сановскую, ограничившись слегка подпиленными драйверами. если вы на полном серьезе считаете, что подпиленные драйвера, будь они хоть трижды более нативны дают основание считать что такая интеграция не менее тесна чем оракловая то аргументированный разговор у нас не получится. далее по драйверам IBM, в том самом "driver for JDBC and SQLJ type 2" , точно та же жава прослойка "Drivers that are written partly in the Java™ programming language and partly in native code.", которая на OCI нифига не похожа. с чего вы взяли, что для sqlj в db2 используется что то другое, более нативное чем jdbc для меня так и осталось загадкой учитывая, что в доку четко сказано "The SQLJ runtime relies on a JDBC driver to obtain a database connection in order to access the database.". про бинд переменные в оракловой жаве однозначно не нашел (потому и не утверждал), но по косвенным признакам выглядит, что переменные гоняются от jvm к sql движку растрачивая ресурсы. ЗЫ. если вам хватает усеченного языка для полноценного реализации логики в SP я не спорю, просто лично я предпочел бы иметь полноценный универсальный язык усеченному, раз уж я решил писать SP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2009, 20:10 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Actually there are 2 types of DBA now: 1. Regular DBA (storage, backups, user creation, etc...) 2. Application DBA (query optimization for already developed code) Regarding original question: average time sp execution 2 times faster than embedded sql or api. though as already mentioned if query plan is obsolete than it might be vise versa. Relational model is beautiful and based on more or less strong mathematics. OOP is just method to create better program code, do not see so far much mathematics there. ORM things, LINQ does not work well. I would prefer to have more table oriented languages on client like Oracle Forms, APEX, etc..., which would allow to create user interface much faster then OOP does + good report writer (Oracle Report, Crystal) + powerful server SQL language (PL/SQL is better than T-SQL , but anyway there is absolutely no need in Java or VB on db server) - that' s all you need to create so-called business application. SQL is progressing. New features, aggregate functions (Oracle, Sybase Anywhere). Interesting idea now - convert everything (like linear programming algorithms, graph algorithms, etc..) to SQL (PL/SQL,T-SQL). If you need references I could give you "ih vam". Sorry for English, Russian Virtual keyboard stopped working - msg about Compuserve ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2009, 01:13 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
ZhoraЧто касается оригинального вопроса: среднее время исполнения Sp в 2 раза быстрее, чем у динамического (?) SQL или API. хотя, как уже упоминалось, если план запроса является устаревшим, то может быть обратная ситуация. Реляционная модель красивая и, более или менее, сильнее математически обоснована. ООП просто метод для создания лучшего программного кода, но не ищите здесь математической подоплеки. ORM-ы, LINQ не являются образцом хорошей работы. Я предпочел бы такие инструменты как Oracle Forms, APEX, и т.д. .., которые позволили бы быстро создать пользовательский интерфейс + хороший дизайнер отчетов (Oracle Reports, Crystal) + мощный серверный язык SQL (PL / SQL лучше, чем T-SQL, но, в любом случае, нет абсолютно никакой необходимости в Java или VB на сервере БД) - вот и все вам нужно для создания, так называемых, бизнес-приложений. SQL развивается. Появляются новые функции, такие как аналитические (?) функции (Oracle, Sybase Anywhere). Интересная идея в настоящее время - конвертировать все (методы линейного программирования, графовые алгоритмы и т.д..) в SQL (PL / SQL, T-SQL). имхо, сложный алгоритмический язык позволяет отключить мозговую "декомпозцию" для разложения алгоритма на примитивы, не все это могут. Поэтому и востребовано. Хотя,... есть задачи, для решения которых действительно возможностей SQL может не хватать. Но это чистая системщина, типа генерации уникальных ключей определенного формата и т.п. Не царское (SQL) это дело подобными вещами заниматься ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2009, 01:44 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
2 Zhora Actually there are 2 types of DBA now: 1. Regular DBA (storage, backups, user creation, etc...) 2. Application DBA (query optimization for already developed code) Второй упомянутый тип - это не DBA, а DBO (датабейз оптимайзер), младший брат SEO, внук администратора всея Руси ака локи :) Regarding original question: average time sp execution 2 times faster than embedded sql or api. Почему в 2? Почему не в 3? Почему не в 10? Для каких СУБД? Для каких БД? Для каких ХП? Цифра с потолка, в общем. Для красного словца. К действительности не имеет отношения. ORM things, LINQ does not work well. Поподробнее можно? SQL is progressing. Ага. SQL is progressing. А его продедурные расширения стоят где стояли. Открываю BOL, читаю чего нового придумали в T-SQL в 2008-ой версии. Если отфильтровать DML (безусловно-развивающийся) и нейтральные мелочи типа "Улучшенная функция CONVERT допускает преобразования между двоичными и символьными шестнадцатеричными значениями", то останется могучий улучшайзинг. Не могу не процитировать его из BOL: Улучшенные способы программирования (компонент Database Engine)Доступны операторы, выполняющие операцию и присваивающие ее результат некоторой переменной, например SET @x += 2 Фсё. За три года разродились. Как с таким "sql is progressing" могут приходить в голову мысли типа "convert everything (like linear programming algorithms, graph algorithms, etc..) to SQL (PL/SQL,T-SQL)" - чесслово, понять не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2009, 02:21 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Yo.!не пойму в чем смысл отрицать столь очевидное? честно говоря мне не интересно обсуждать чья жава более тормознутаяВ том, что "очевидное" часто оказывается просто PR бредом, у любого вендора. И мне просто интересно разобраться в действительных механизмах работы. А вот чья тормознутее - мне тоже не интересно. И Оракл, и IBM утверждают, что их JVM куда круче остальных, так что скорее всего примерно одинаково. :) Намеки же на общую тормознутость жабы при наличии JIT и inline в runtime я рассматривать не буду. Все-таки не о GUI разговариваем. Yo.!но факты очевидны - оракл переколбасил жава, как в плане архитектуры (ту же стратегию гарбадж коллектора) так и в плане структур памяти (вот ссылка о jvm в SGA/PGA) .Вот мерси, наконец-то информативная ссылка. Если я правильно ее осознал, то вся немерянная мощь переколбашивания заключается (для shared server) в выделении внутри SGA фиксированного Java pool memory, с которой и живет JVM. Особенно впечатлило: "Because the Java pool memory size is fixed, you must estimate the total requirement for your applications and multiply by the number of concurrent sessions the applications want to create, to calculate the total amount of necessary Java pool memory. Each UGA grows and shrinks as necessary. However, all UGAs combined must be able to fit within the entire fixed Java pool space." Делаю выводы: 1. Pool задается статически, без перебалансировки, т.е. его надо задавать с большим запасом и мириться с не оптимальным расходом на него памяти. Великолепная интеграция! :) 2. Понятно, что мусорщика переписали - раз память в SGA, ей и управлять надо с подачи Оракл СУБД, который этой SGA заведует. Мера вынужденная, и преимуществ тут не наблюдаю, т.к. pool все равно отдельный от всего остального. Yo.!IBM же так заморачиваться не стал и гоняет обычную жаву, любую, хоть сановскую, ограничившись слегка подпиленными драйверами. если вы на полном серьезе считаете, что подпиленные драйвера, будь они хоть трижды более нативны дают основание считать что такая интеграция не менее тесна чем оракловая то аргументированный разговор у нас не получится.Я на полном серьезе со ссылками показал, что Oracle JVM с БД работает ровно так же, как и IBM JVM, с теми же 3-мя вариантами драйверов, за исключением SQLJ. Я не говорил, что кто-то более нативен, я говорил, что все одинаково. Вопросы управления памятью, как выяснилось, к интерфейсу с СУБД отношения не имеют. Я так и не понял, почему именно "встроенная" Java является достоинством - может, просто не нашел. :) А вот недостатком в бюджетных лицензиях она может быть, т.к. тратит лицензируемые ресурсы. Да и в XE не входит. Yo.!далее по драйверам IBM, в том самом "driver for JDBC and SQLJ type 2" , точно та же жава прослойка "Drivers that are written partly in the Java™ programming language and partly in native code.", которая на OCI нифига не похожа.Естественно, на Oracle OCI похожа DB2 CLI, а не Java-прослойка. "The JDBC OCI driver accesses Oracle-specific native code". Именно "accesses" через JNI, и в Оракл (OCI), и в DB2 (CLI). Еще раз - Java-часть тут просто прокси к OCI/CLI, для обеих СУБД. А написать "нативный" драйвер на Java без самой Java возможности нет, т.к. собственно JNI - это тоже часть Java, как и стандартная описательная часть классов JDBC. :) Yo.!с чего вы взяли, что для sqlj в db2 используется что то другое, более нативное чем jdbc для меня так и осталось загадкой учитывая, что в доку четко сказано "The SQLJ runtime relies on a JDBC driver to obtain a database connection in order to access the database."Устал, но повторю - получить контекст коннекта от JDBC не значит использовать JDBC для собственно работы с данными, это просто стандартный для Java способ коннекта. Аналогично программа (SP) с embedded SQL на C может использовать коннект от CLI , не используя CLI собственно для работы (если не надо). Цитата : "You can use one of six techniques to connect to a data source in an SQLJ program. Two use the JDBC DriverManager interface, two use the JDBC DataSource interface, one uses a previously created connection context, and one uses the default connection." SQLJ не интересно, какой был коннект, он просто работает с его контекстом. По поводу "более нативное чем jdbc" - посмотрите, скажем, Figure 2. Expansion of application layer . Видно, что SQLJ runtime работает не только мимо JDBC, но и мимо CLI, как и положено embedded SQL в DB2. Принципиальная разница с Оракл в том, что при прекомпиляции не только проверяется синтаксис и связи, но в БД создается спец. объект - embedded SQL package , аналогов которому в Оракл нет. И если стандартный Java-пакет sqlj.runtime в Оракл дергает JDBC для выполнения SQL, в DB2 он просто обращается к выполнению определенного запроса внутри package, ничего не зная о собственно SQL этого запроса, минуя кучу стадий синт. разбора, переформулирования и, по умолчанию, оптимизации с построением плана. Фактически это прямой вызов готового плана выполнения, а не собственно запроса SQL. Yo.!про бинд переменные в оракловой жаве однозначно не нашел (потому и не утверждал), но по косвенным признакам выглядит, что переменные гоняются от jvm к sql движку растрачивая ресурсы.Что еще раз показывает одинаковую работу JVM с БД что в Оракл, что в DB2. Yo.!ЗЫ. если вам хватает усеченного языка для полноценного реализации логики в SP я не спорю, просто лично я предпочел бы иметь полноценный универсальный язык усеченному, раз уж я решил писать SP.Полостью согласен - вопрос вкуса. Для обработки данных я предпочитаю язык, код которого выполняется непостредственно SQL движком, а то и inline поставляется в текст запроса, а не живет на отдельной VM, как PL/SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2009, 18:43 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Сравнили меня к SEO, да еще и обозвали "младшим братом". А я и огрызнутся не успел ------------------------- There’s no silver bullet! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2009, 19:05 |
|
||
|
использование хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Favn И мне просто интересно разобраться в действительных механизмах работы. ... Если я правильно ее осознал, то вся немерянная мощь переколбашивания заключается (для shared server) в выделении внутри SGA фиксированного Java pool memory, с которой и живет JVM. не правильно поняли. shared server на то и эксзотика, чтоб все запихнуть в SGA, читайте внимательней о Dedicated варианте. структуры памяти жавы переколбасили по образу и подобию pl/sql, ну и раз уж вам "интересно разобраться" - ну почитайте, там не так много. реально в оракловой jvm переколбашено все, включая тхредовость. Favn Особенно впечатлило: "Because the Java pool memory size is fixed, you must estimate the total requirement for your applications and multiply by the number of concurrent sessions the applications want to create, to calculate the total amount of necessary Java pool memory. Each UGA grows and shrinks as necessary. However, all UGAs combined must be able to fit within the entire fixed Java pool space." было бы удивительно если бы жаве позволялось сожрать всю память и вырубить всю систему. причем опять же, поскольку жава пул интегрирован в SGA на него распространяется automatic memory management, который будет тюнить жабовские пулы в том числе. т.е. если вы вынуждены прописывать жестко JAVA_OPTS=" -Xmx800M", то оракл сможет "predict how changes in the size of the Java pool can affect the parse rate" FavnМера вынужденная, и преимуществ тут не наблюдаю, т.к. pool все равно отдельный от всего остального. читайте внимательней, преимущества переколбашеного сбора мусора там расписаны. Favn Я так и не понял, почему именно "встроенная" Java является достоинством - может, просто не нашел. :) про достоинства имхо рано, давайте сначала с этим вопросом доразберемся: Favn Что значит "интегрирована"? Как я понимаю, у Оракл просто есть своя имплементация JVM, поставляемая с СУБД. Но у IBM тоже своя JVM и свой Java SDK, тоже поставляемые с DB2 и работающие с ней. Куда "интегрированней"? в этот раз я убедил, что есть куда ? Favnпосмотрите, скажем, Figure 2. Expansion of application layer . Видно, что SQLJ runtime работает не только мимо JDBC, но и мимо CLI, как и положено embedded SQL в DB2. ну не знаю, я вижу на рисунке ровно противоположное. то что java процедуры работают через sqlj/jdbc type2 драйвер, а не universal jdbc драйвер это и коню ясно, а вот то что из sqlj выходит только одна стрелка говорит о том, что нет никакой разницы в использовании jdbc и sqlj в sqlj процедурах. это единый драйвер, единый механизм общения с субд, именно это и показано на рисунке. Favn Принципиальная разница с Оракл в том, что при прекомпиляции не только проверяется синтаксис и связи, но в БД создается спец. объект да нет никакой принципиальной разницы с прекомпилерами оракла аля PRO*CABOL из 80х ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2009, 14:44 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=36302739&tid=1552871]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 372ms |

| 0 / 0 |
