Компилятор хранимых процедур Oracle PL / SQL против компилятора хранимых процедур PostgreSQL PGSQL - PullRequest
3 голосов
/ 04 декабря 2011

Я заметил, что Oracle требуется некоторое время для компиляции хранимой процедуры, но она работает намного быстрее, чем ее аналог PostgreSQL PGSQL.

В PostgreSQL та же процедура (т. Е. Все в формате SQL-92 с функциями в предложениях select и where) занимает меньше времени для компиляции, но дольше выполняется.

Существует ли веб-сайт для показателей, где я могу найти показатели производительности Oracle и PostgreSQL для хранимых процедур, анализа SQL, представлений и ref_cursors?

Нет ли в компиляторе PostgreSQL PGSQL недостатка в процедурах оптимизации?Каковы основные различия между тем, как Oracle обрабатывает хранимые процедуры, и тем, как PostgreSQL обрабатывает их?

Я думаю о написании библиотеки функций PGSQL, которая позволит компилировать и запускать код PL / SQL в PGSQL.(т.е. DECODE, NVL, GREATEST, TO_CHAR, TO_NUMBER, все функции PL / SQL), но я не знаю, возможно ли это.

Ответы [ 3 ]

1 голос
/ 04 декабря 2011

Официальных тестов для хранимых процедур, таких как TPC for SQL, не существует (см. tpc.org ).Я также не знаю ни одного приложения базы данных с конкретными реализациями PL / SQL и pgSQL, которые можно было бы использовать в качестве эталона.

Оба языка компилируются и оптимизируются в промежуточный код, а затем запускаются интерпретатором.PL / SQL можно скомпилировать в машинный код, который не так сильно повышает общую производительность, как можно подумать, потому что интерпретатор довольно эффективен, и типичные приложения проводят большую часть времени в движке SQL, а не в процедурномкод ( см. статью AskTom ).

Когда процедурный код вызывает SQL, это происходит так же, как и в любой другой программе, с использованием операторов и параметров связывания для ввода и вывода.Oracle может сохранять эти SQL «подготовленными», что означает, что курсоры готовы к повторному использованию без дополнительного «мягкого» анализа SQL (обычно «жесткий анализ» SQL происходит только тогда, когда база данных запускает SQL впервые сэто было начато).

Когда функции используются в выражениях select или where, база данных должна переключаться между SQL и процедурными механизмами.Это может занять больше времени обработки, чем сам код.

Основное различие между этими двумя компиляторами заключается в том, что Oracle поддерживает дерево зависимостей, которое заставляет PL / SQL автоматически перекомпилироваться при изменении базовых объектов.Ошибки компиляции обнаруживаются без фактического запуска кода, что не относится к Postgres ( см. Документация )

1 голос
/ 04 декабря 2011

На этот вопрос сложно ответить полностью, потому что он может быть довольно глубоким, но я добавлю свои 2 цента к вкладу высокого уровня в ответ. Прежде всего, мне очень нравится PostgreSQL, и мне очень нравится Oracle. Однако PL / SQL гораздо глубже языка / среды, чем PL / PGSQL, или любого другого языка процедур ядра СУБД, с которым я когда-либо сталкивался. Oracle, по крайней мере, 10G использует оптимизирующий компилятор для PL / SQL. Что, скорее всего, способствует тому, почему он компилируется медленнее в ваших случаях использования. PL / SQL также имеет встроенную компиляцию. Вы можете скомпилировать код PL / SQL до машинного кода с помощью простой директивы компилятора. Это хорошо для логики с интенсивными вычислениями, а не для логики SQL. Моя точка зрения заключается в том, что Oracle потратила много ресурсов на то, чтобы сделать PL / SQL реальным удовольствием с точки зрения функциональности и производительности, и я затронул только два из многих примеров. PL/SQL опережает PG / SQL на несколько лет. это то, к чему это приводит, и я не думаю, что PG / SQL догонит Oracle в ближайшее время.

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

http://www.pgsql.cz/index.php/Oracle_functionality_(en)
0 голосов
/ 04 декабря 2011

Есть ли веб-сайт для метрик, где я могу найти Oracle против Показатели производительности PostgreSQL для хранимых процедур, анализ SQL, просмотров и ref_cursors?

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

Я думаю о написании библиотеки функций PGSQL, которая позволит PL / SQL-код для компиляции и запуска в PGSQL. (т.е. DECODE, NVL, GREATEST, TO_CHAR, TO_NUMBER, все функции PL / SQL) но я не знаю если это возможно.

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

Наконец, не забывайте, что PostgreSQL предлагает варианты написания функций. Простые могут быть написаны на чистом SQL (и в некоторых случаях автоматически встроены), а для тяжелых задач я предпочитаю использовать Perl (вам может понравиться Python или Java).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...