Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Удивляет сравнение результатов работы с клобами  [new]
nested loop
Member

Откуда:
Сообщений: 19
Решил сравнить два подхода работы с кешируемыми временными клобами. Удивляют результаты.

declare
  b1         clob;
  b2         clob;
  test_count pls_integer := 100000;
  t          int;
begin
  pck_runstats.rs_start;

  for i in 1 .. test_count
  loop
    b1 := b1 || 'x';
  end loop;

  pck_runstats.rs_middle;
  
  dbms_lob.createtemporary(lob_loc => b2, cache => true);
  dbms_lob.open(lob_loc => b2, open_mode => dbms_lob.lob_readwrite);
  for i in 1 .. test_count
  loop
    dbms_lob.writeappend(lob_loc => b2, amount => 1, buffer => 'x');
  end loop;
  dbms_lob.close(lob_loc => b2);
  
  pck_runstats.rs_stop(100);
end;
/

Run1 ran in 214 hsecs
Run2 ran in 186 hsecs
Run1 ran in 115,05% of the time


Name                                  Run1        Run2        Diff
STAT..db block gets                209,741     216,988       7,247
STAT..db block gets from cache     209,741     216,988       7,247
LATCH.simulator lru latch               28      34,083      34,055
LATCH.simulator hash latch              28      34,084      34,056
STAT..session logical reads        409,728     316,975     -92,753
STAT..consistent gets              199,987      99,987    -100,000
STAT..consistent gets from cac     199,987      99,987    -100,000
STAT..calls to get snapshot sc     300,003     200,001    -100,002
LATCH.cache buffers chains       1,124,324     938,828    -185,496


Run1 latches total versus run2 -- difference and pct
        Run1        Run2        Diff        Pct
   1,124,784   1,007,608    -117,176    111.63%

Делаем большее количество прогонов - суть та же.

Run1 ran in 3639 hsecs
Run2 ran in 3961 hsecs
Run1 ran in 91,87% of the time


Name                                  Run1        Run2        Diff
LATCH.enqueues                         583         691         108
LATCH.library cache lock               189          42        -147
LATCH.library cache                    337         121        -216
STAT..CPU used by this session       3,636       3,959         323
STAT..session pga memory          -720,896           0     720,896
STAT..session logical reads      7,610,142   8,423,323     813,181
STAT..consistent gets            1,999,877     999,877  -1,000,000
STAT..consistent gets from cac   1,999,877     999,877  -1,000,000
STAT..calls to get snapshot sc   3,000,003   2,000,001  -1,000,002
LATCH.cache buffers chains      20,025,810  21,652,083   1,626,273
STAT..db block gets              5,610,265   7,423,446   1,813,181
STAT..db block gets from cache   5,610,265   7,423,446   1,813,181
LATCH.simulator lru latch          171,024   3,805,002   3,633,978
LATCH.simulator hash latch         171,035   3,805,026   3,633,991


Run1 latches total versus run2 -- difference and pct
        Run1        Run2        Diff        Pct
  20,372,680  29,266,648   8,893,968     69.61%

Получется, среди этих подходов нельзя выделить оптимальный?
2 сен 08, 17:13    [6138525]     Ответить | Цитировать Сообщить модератору
 Re: Удивляет сравнение результатов работы с клобами  [new]
givanov
Member

Откуда:
Сообщений: 757
Самое быстрое, что мне удалось выжать из dbms_lob - это вот.
3 сен 08, 00:56    [6139802]     Ответить | Цитировать Сообщить модератору
 Re: Удивляет сравнение результатов работы с клобами  [new]
I00N
Member

Откуда:
Сообщений: 454
Думаю, первый способ (с конкатенацией) лучше, т.к. он использует на порядок меньше защелок(latch).
3 сен 08, 10:01    [6140264]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить