Oracle mechanics

19.09.2014

ASH-трассировка PL/SQL

Filed under: Active Session History,Диагностика системы (instance),Oracle — Игорь Усольцев @ 00:13
Tags: ,

К примеру, в AWR-отчёте бд ERP-системы на первом месте видно продолжающееся/неоконченное выполнение процедуры, лидирующей по использованному DB Time с большим отрывом от ближайшего преследователя — 72% против 18%:

SQL ordered by Elapsed Time           DB/Inst: OEBS/OEBS1  Snaps: 73249-73250

        Elapsed                  Elapsed Time
        Time (s)    Executions  per Exec (s)  %Total   %CPU    %IO    SQL Id
---------------- -------------- ------------- ------ ------ ------ -------------
        36,572.3              0           N/A   72.5   45.7   41.0 5t39uchjqpyfm
Module: XLAACCUP
BEGIN xla_accounting_pkg.unit_processor_batch(:errbuf,:rc,:A0,:A1,:A2,:A3,:A4,:A

         9,246.2             15        616.41   18.3   29.4   65.5 0vjcg5zp30z2x

Для быстрой оценки такого рода проблем написал скрипт ash_plsqlmon_hist.sql, который по истории ASH вначале показывает суммарный вклад запросов и PL/SQL блоков по частоте попадания в историю ASH (ASH_ROWS), кол-во зафиксированных неповторяющихся выполнений (EXECS), затем — мин/мах время наблюдения(с соответствующими названиями столбцов) и общий профиль ожиданий (WAIT_PROFILE) примерно так:
(more…)

18.09.2014

PL/SQL пакет для генерации PDF

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

Пакет от Anton Scheffer для создания PDF версии 1.3, с поддержкой TruType Fonts и вставкой картинок JPG и PNG

Код открытый, работает как описано, позиционируется как замена Middleware/Reports. Судя по публикации на сайте фирмы, с лицензионной чистотой должно быть всё норм

Входит в библиотеку PL/SQL утилит Alexandria для разных текстовых форматов и протоколов

07.09.2014

Материализация XMLTYPE запросов

Filed under: error,heuristics,Oracle,XML DB — Игорь Усольцев @ 19:10
Tags: ,

Попытка выполнение стандартного запроса по извлечению текста подсказок (outline hint) из плана выполнения (V$SQL_PLAN.OTHER_XML) до версии 12.1.0.1 включительно выдаёт характерную при материализации подзапроса с XMLTYPE ошибку — XMLTYPE in a WITH Clause Fails with ORA-06512 & ORA-06502 (Doc ID 1640869.1):

11.2.0.3.@ SQL> with ol as
  2   (select--+ materialize
  3           plan_hash_value, b.hint
  4      from v$sql_plan m,
  5           xmltable('/other_xml/outline_data/hint' passing
  6                    xmltype(m.OTHER_XML) columns hint varchar2(4000) path '/hint') b
  7     where trim(OTHER_XML) is not null
  8       and rownum <= 2)
  9  select * from ol
 10  /
                  xmltype(m.OTHER_XML) columns hint varchar2(4000) path '/hint') b
                  *
ERROR at line 6:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1

(more…)

02.09.2014

Запросы к GV$-обзорам в RAC-системах, включая использование GV$-функций

Filed under: Fixed tables,heuristics,Oracle,RAC,SQL — Игорь Усольцев @ 00:03
Tags:

В кластерных системах Oracle 11g:

11.2.0.3@ SQL> @inst

INST_ID INSTANCE_NAME  VERSION    PLATFORM_NAME        DATABASE_STATUS DATABASE_ROLE    STATUS   OPEN_MODE
------- -------------- ---------- -------------------- --------------- ---------------- -------- ----------
1*      my_inst1       11.2.0.3.0 Linux x86 64-bit     ACTIVE          PRIMARY          OPEN     READ WRITE
2       my_inst2       11.2.0.3.0 Linux x86 64-bit     ACTIVE          PRIMARY          OPEN     READ WRITE

можно наблюдать небыстрое выполнение простых запросов к глобальным обзорам типа GV$SQL, GV$SQL_PLAN, например, по SQL_ID: (more…)

19.08.2014

Большой план выполнения и трассировка рекурсивных запросов с помощью ASH

Filed under: Active Session History,memory management,Oracle,SQL Tuning — Игорь Усольцев @ 00:18
Tags: ,

Спустя час с небольшим после начала выполнения запроса была получена следующая ошибка*:

ORA-04030: выход за пределы памяти процесса при попытке выделить 4120 байт (kksfr: qkesSet,frame segment)

Из автоматически сгенерированного трейса инциндента можно получить много информации, включая, например, раскладку использованных процессом 10GB из 15GB PGA (!):

=======================================
PRIVATE MEMORY SUMMARY FOR THIS PROCESS
---------------------------------------
******************************************************
PRIVATE HEAP SUMMARY DUMP
10 GB total:
    10 GB commented, 1103 KB permanent
  1452 KB free (0 KB in empty extents),
    6596 MB,   1 heap:    "kxs-heap-c     "            72 KB free held
    3646 MB,   2 heaps:   "callheap       "            1127 KB free held

*** 2014-07-17 13:12:32.395
------------------------------------------------------
Summary of subheaps at depth 1
10 GB total:
  4175 MB commented, 1527 MB permanent
  4508 MB free (0 KB in empty extents),
    3613 MB,   1 heap:    "TCHK^6f1a0bb0  "
    1177 MB, 187983 chunks:  "qkkele                    " 794 MB free held
    1039 MB, 298563 chunks:  "subHeap:qkspmTransformPred" 987 MB free held
     812 MB, 198230 chunks:  "allocator state           " 800 MB free held
     676 MB, 187983 chunks:  "qkkkey                    " 663 MB free held
...

, но для начала, зная указанный в том же трейсе SID.SERIAL сессии и SQL_ID:

*** SESSION ID:(972.11477) 2014-07-17 13:12:25.342
...
----- Current SQL Statement for this session (sql_id=fq5vmt1rjn2xh) -----
insert into t_base_source
        select s.*, sysdate as insert_dt
          from v_base_source s

, полезно посмотреть в ASH чем занималась пользовательская сессия до падения: (more…)

12.08.2014

Кластерные ожидания и запросы Advanced Queuing

Filed under: Active Session History,Диагностика системы (instance),Oracle,RAC — Игорь Усольцев @ 22:08
Tags: ,

Периодически в Oracle 11.2 RAC системе возникают характерные кластерные проблемы, в основном, по причинам неверной конфигурации, например, выбора неподходящего сервиса для выполнения ресурсоёмких бизнес процессов / пакетных заданий

Далее описана наглядная краткосрочная проблема этого типа и, в частности, роль AQ запросов

Итак, AWR показал:

              Snap Id      Snap Time      Sessions Curs/Sess
            --------- ------------------- -------- ---------
Begin Snap:    296087 07-Aug-14 12:00:39       451       2.2
  End Snap:    296088 07-Aug-14 12:30:40       504       2.1
   Elapsed:               30.02 (mins)
   DB Time:            2,615.89 (mins)                       -- завышенный DB Time для 16 ядерного сервера

Top 5 Timed Foreground Events
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                                           Avg
                                                          wait   % DB
Event                                 Waits     Time(s)   (ms)   time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
gc buffer busy acquire              354,144      67,484    191   43.0 Cluster    -- и богатый набор кластерных ожиданий
gc cr block 2-way                   319,644      16,234     51   10.3 Cluster
gc current grant busy               117,362      11,066     94    7.1 Cluster
gc current block 2-way              169,545       9,974     59    6.4 Cluster

(more…)

23.07.2014

12.1.0.2

Filed under: Oracle — Игорь Усольцев @ 10:56
Tags:

Похоже, вчера появилась доступная для скачивания для Linux / Solaris

А сегодня — обновили документацию версии 12.1 описаниями добавленной опции Using the In-Memory Column Store, из которой в частности следует, что заполнением/обновлением содежимого поколоночного хранилища в памяти будут заниматься background процессы, кол-во которых регулируется параметрами INMEMORY_MAX_POPULATE_SERVERS и INMEMORY_TRICKLE_REPOPULATE_SERVERS_PERCENT

Будет интересно

UPD. В частности, любопытное замечание можно видеть в спмске Features Not Available or Restricted in This Release of Oracle Database 12.1.0.2:

  • Oracle Automatic Storage Management Cluster File System (Oracle ACFS) does not currently support Hybrid Columnar Compression (HCC)

- значит ли это, что планируется поддержка HCC на ACFS ?

21.07.2014

JPPD в присутствии удалённой таблицы и View Merging

Filed under: CBO,heuristics,Oracle — Игорь Усольцев @ 00:50
Tags: ,

На продакшн системе версии 11.2.* наблюдал, как сам факт использования удалённой (remote) таблицы блокировал использование Join Predicate Push-Down (JPPD) в запросе следующего типа:

select t.char_column, analytic_view.max_id, analytic_view.max_char_column
  from t,
       t@SCOTT_LOOPBACK
         t2,
       (select id1,
               max(id2) keep(dense_rank first order by id1 desc) max_id,
               max(char_column) max_char_column
          from t
         group by id1) analytic_view
 where t.id1 = t2.id1
   and t.id2 = analytic_view.id1
   and t.id1 = 10

- несмотря на то, что удалённая таблица, казалось бы, никакими условиями запроса с inline view связана не была. Т.е. JPPD работает для локальной таблицы T2 и не работает для удалённой.
Использование аналитического запроса в inline view препятствием для применения JPPD не является

Тестовая схема для версий 11.2.0.3/12.1.0.1: (more…)

12.07.2014

Дочерние процессы LGWR 12c

Filed under: Диагностика системы (instance),Oracle,Oracle new features — Игорь Усольцев @ 12:32
Tags:

Лог процесса LGWR, начиная с версии 12c, указывает:

Created 2 redo writer workers (2 groups of 1 each)
...
Adaptive scalable LGWR disabling workers
...
Adaptive scalable LGWR enabling workers

- на вновь реализованную идею использовать множество процессов для записи логов, в последний раз наблюдавшуюся в версиях до 8i через ныне неиспользуемый (depricated) параметр _lgwr_io_slaves

В новой версии Oracle 12c это называется Adaptive scalable LGWR workers и грубо регулируется параметром скрытым _use_single_log_writer: (more…)

25.06.2014

Особенности преобразования Table Expansion

Filed under: bugs,Oracle,Partitioning — Игорь Усольцев @ 00:03
Tags: ,

Полезное стоимостное (CBQT) преобразование Table Expansion (TE), доступное с версии 11.2, кроме несомненных достоинств имеет ряд недоработок-багов особенностей реализации и применения, периодически омрачающих радость столкновений с лучшим из стоимостных оптимизаторов (CBO)

Далее — краткий обзор случаев неоднозначного поведения TE, доступных в версиях 11.2 — 12.1.0.1

И вначале — о хорошем: для случая простого Range Partitioning технология успешно отрабатывает независимо от количества и порядка расположения Unusable Index Partitions: (more…)

Следующая страница →

Theme: Rubric. Get a free blog at WordPress.com

Отслеживать

Get every new post delivered to your Inbox.

Join 126 other followers