Задача: тестирование возможного выигрыша в производительности при использовании 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 секунд - большой вопрос.
Комментарии
Отправить комментарий