Oracle mechanics

22.02.2018

Доклад Александра Токарева о Result Cache на семинаре RuOUG

Filed under: Oracle — Игорь Усольцев @ 01:05
Tags: ,

— живой и интересный!

Несколько иллюстраций к рассказанному Александром: (more…)

Реклама

13.04.2015

PL/SQL, RESULT_CACHE и sysdate в запросах

Filed under: Oracle,SQL Tuning — Игорь Усольцев @ 01:20
Tags: ,

Жил-был запрос, потреблявший бОльшую часть DB Time:

              Snap Id      Snap Time      Sessions Curs/Sess
            --------- ------------------- -------- ---------
Begin Snap:    307361 02-Apr-15 18:30:14       371       2.0
  End Snap:    307362 02-Apr-15 19:00:16       343       2.1
   Elapsed:               30.04 (mins)
   DB Time:            1,395.37 (mins)

...

SQL ordered by Elapsed Time

        Elapsed                  Elapsed Time                                   
        Time (s)    Executions  per Exec (s)  %Total   %CPU    %IO    SQL Id    
---------------- -------------- ------------- ------ ------ ------ -------------
        50,849.2        122,466          0.42   60.7   56.1     .5 d3gt02wdxt8k3 -- с большим опережением
SELECT /*+ RESULT_CACHE*/ NVL(BUDGET, 0) FROM U0.V_CLIENT_DISCOUNTS D RIGHT JOIN
 DUAL ON CLIENT_ID = :B2 AND DT = TRUNC(:B1 )

         7,787.2          4,241          1.84    9.3   28.4     .0 14a9q0pdpf0jv -- от ближайшего конкурента

, указанный в тексте /*+ RESULT_CACHE*/ не работал, поскольку в глубинах вложенных обзоров запроса содержалось упоминание sysdate в виде TRUNC(SYSDATE), что не способствует использованию SQL Result Cache по определению, но и логика в этом есть не всегда. В частности, при разного рода округлениях sysdate, да и без округлений — например, для запроов с достаточно высоким RPS, как в этом случае возможность использования Result Cache может быть отнюдь не лишней

План запроса адекватно отражает источник высокой стоимости и невысокой скорости выполнения (~ 400 мс на выполнение): (more…)

11.12.2013

Блокировки типа RC — Result Cache при использовании MTS

При использовании Multi-Threaded Server блокировки типа RC — Result Cache в AWR вполне ожидаемы при:

11.1.0.7.@ SQL> show parameter result_cache_mode

NAME                                 VALUE
------------------------------------ --------
result_cache_mode                    FORCE

Зависимости ожидания (wait tree) при этом представляют, в основном, логичную картину:

11.1.0.7.@ SQL> @ash_wait_tree "event = 'enq: RC - Result Cache: Contention'"

LVL BLOCKING_TREE       EVENT                              WAITS_COUNT SESS_COUNT AVG_WA
--- ------------------- ---------------------------------- ----------- ---------- ------
  1 FOREGROUND          enq: RC - Result Cache: Contention        3019         49    999 -- блокированные на кэше запросы ожидают:
  2   FOREGROUND        db file sequential read                   1243         13     50 -- ввод-вывод в процессе выполнения запроса/наполнения кэша
  2   FOREGROUND        read by other session                      844          1     69 -- --//--
  2   FOREGROUND        db file parallel read                      594          1     61 -- --//--
  2   FOREGROUND        db file scattered read                     230          9     59 -- --//--
  2   FOREGROUND        On CPU / runqueue                           37          8      0 -- ЦПУ при выполнении запроса/наполнения кэша
  2   FOREGROUND        virtual circuit wait                        14          2    146 -- ???
  2   FOREGROUND        log buffer space                             4          1     11 -- отложенная очистка блоков(delayed block cleanout)
  2   FOREGROUND        read by other session                        2          1     32
  3     FOREGROUND      db file sequential read                    834          4     69
  3     FOREGROUND      On CPU / runqueue                            5          2      0
  3     (LGWR)          control file parallel write                  4          1     24 -- и LGWR, её сдерживающий
  3     FOREGROUND      read by other session                        4          2     17
  3     FOREGROUND      read by other session                        1          1      9
  4       FOREGROUND    db file sequential read                      1          1      9 -- чтения нижнего уровня, завершения которых ждут на read by other session

— кроме ожидания virtual circuit wait, блокирующего доступ к кэшу на enq: RC — Result Cache: Contention (more…)

28.01.2012

Пример применения Result Cache на стороне сервера

Тема неновая, относится к «бородатым» новым фичам Oracle 11g, однако, технология хорошо работающая и, что важно, позволяющая при определённых условиях, существенно экономить ресурсы сервера RDBMS

Далее привожу результаты успешного практического применения кэша результатов запроса для ресурсоёмкого частовыполняемого (т.е. выполняющегося чаще, чем обновляются данные) запроса, оптимизировать который другим методом было бы объективно непросто — встречаются запросы, которые просто обязаны много читать :) (more…)

Блог на WordPress.com.