К основному контенту

Oracle PL/SQL native compilation в боевых условиях.

Задача: тестирование возможного выигрыша в производительности при использовании NATIVE COMPILATION по сравнению с INTERPRETED COMPILATION.

Методика тестирования. Процедура TEST_PCG реально боевая (название изменено) - делает много чего и долго. Код по понятным причинам приводить не буду.
Для замера времени перед выполнение будет запускаться PROFILER. Процедура из пакета буде выполнена по 20 раз для обоих видов компиляции.

-- test_block.sql
DECLARE
  L_COMPILED VARCHAR2(100);
  L_TEST_PARAMS VARCHAR2(100) := 'TEST VALUES'
BEGIN
  FOR I IN 1..20
  LOOP
  SELECT DISTINCT PLSQL_CODE_TYPE INTO L_COMPILED FROM USER_PLSQL_OBJECT_SETTINGS WHERE NAME = 'TEST_PCG';
  DBMS_PROFILER.START_PROFILER('TRY_TEST_PCG_COMPILED_'||v_compiled,1);  
  DBAX.TEST_PCG.TEST_PRC(TEST_PARAMS);
  COMMIT;   
  DBMS_PROFILER.STOP_PROFILER;
  END LOOP;
END;
/

SQL> alter procedure p1 compile plsql_code_type=interpreted;

SQL> @test_block

SQL> alter procedure p1 compile plsql_code_type=native;

SQL> @test_block

Просмотр результата (среднее время за 20 выполнений):

SELECT C, COUNT(C), AVG(T) FROM(SELECT RUN_TOTAL_TIME/1000000000 T,
RUN_COMMENT C FROM DBAX.PLSQL_PROFILER_RUNS  WHERE REGEXP_LIKE (RUN_COMMENT,'(NATIVE)|(INTERPRETED)')) GROUP BY C

TRY_TEST_PCG_COMPILED_INTERPRETED 20  44.8814545453182
TRY_TEST_PCG_COMPILED_NATIVE      20  42.0536363634545

Пока среднее время выполнения для native меньше на 2 секунды.
Для пары других пакетов, для которых я тестировал результат аналогичный (порядка 5% выигрыша). В общем, никаких "База летает" (как было сказано у John Watson) нет и близко. 
К похожим выводам пришел в свое время и Тим:
The speed of database calls is unaffected by native compilation so the performance increases of most stored procedures will not be so dramatic.
Стоит ли с этим заморачиваться на бою ради 2 секунд - большой вопрос.

Комментарии

Популярные сообщения из этого блога

Установка и настройка pgAgent(планировщика заданий PostgreSQL)

Установка pgAgent Последняя версия скрипта для установки агента  тут . Перенести инструкцию по агенту в отдельную тему. 1. Создать пользователя ОС, и сделать ему домашний каталог: useradd -s /bin/false -r -M pgagent mkdir /home/pgagent 2. Установить и настроить демон: yum install pgagent_94 При наличии ошибок вида (была на Oracle Linux 6.8) Error: Package: pgagent_94-3.4.0-1.rhel6.x86_64 (pgdg94)            Requires: libwx_baseu-2.8.so.0(WXU_2.8)(64bit) Нужно установить EPEL systemctl enable pgagent_94 chown pgagent:pgagent /var/log/pgagent_94.log 3. Установить схему агента в базе: sudo -u postgres psql -f /usr/share/pgagent_94-3.4.0/pgagent.sql postgres 4. Создать файл паролей для подключения агента к базе. vi /home/pgagent/.pgpass localhost:5432:*:postgres:postgres chown pgagent.pgagent /home/pgagent -R chmod 600 /home/pagent/.pgpass 5. Запустить и проверить работу агента systemctl start pgagent...

Включение логирования для Haproxy

Изначально логирование в syslog в HaProxy отключено. Ниже пример настройки логирования для ОС Centos 7. Настройка: Добавить строку  log 127.0.0.1 local2 в секцию global файла /etc/haproxy/haproxy.cfg Раскомментировать $ModLoad imudp и $UDPServerRun 514 в файле  /etc/rsyslog.conf Создать файл  /etc/rsyslog.d/haproxy.conf со следующим содержимым:  local2.* /var/log/haproxy.log Перезапустить rsyslog и haproxy.

Установка PL/Java для PostgreSQL 9.4

Предварительные требования:  1. Компилятор C. Как правило имеется в виду gcc и g++ gcc  --version на CENTOS 7 мне понадобился gcc_c++ (в дополнение к установленному ранее gcc) 2. JAVA. Убедиться, что  javac  -version работает  3. PostgreSQL установлен и  работает pg_config Файлы для разработки (.h файлы) для нашего PostgreSQL также должны быть установлены. Убедиться можно посмотрев что лежит в INCLUDEDIR-SERVER (вывод pg_config). Я раньше компилировал БД из исходников на этой машине, так что у меня эти файлы были. 4. компилятор Maven mvn --version Установка git clone https://github.com/tada/pljava.git или git clone ssh://git@github.com/tada/pljava.git Заходим в директорию pljava и выполняем mvn clean install В результате должны получить: [INFO] PostgreSQL PL/Java ................................ SUCCESS [INFO] PL/Java API ....................................... SUCCESS [INFO] PL/Java backend Java code...