Oracle mechanics

Термины Oracle

Некоторые термины, понятия и определения Oracle

Общие понятия

deadlock «Смертельные объятия»

BOC broadcast on commit

IMU or In-Memory Undo

Shallahamer All About Oracle’s In-Memory Undo

Объекты бд

Типы типа SYS_PLSQL_%

SQL> select object_type from dba_objects where object_name = 'SYS_PLSQL_513589_95_1'
  2  /

OBJECT_TYPE
-----------
TYPE

SQL> select * from dba_types where type_name = 'SYS_PLSQL_513589_95_1'
  2  /

no rows selected

SQL> select owner, object_name, object_id, object_type
  2    from dba_objects
  3   where object_id = REGEXP_SUBSTR('SYS_PLSQL_513589_95_1', '\d+')
  4  /

OWNER  OBJECT_NAME   OBJECT_ID OBJECT_TYPE
------ ------------ ---------- -----------
SCOTT  MY_PACKAGE       513589 PACKAGE

create or replace package SCOTT.MY_PACKAGE
as
    type my_pkg_type is ...

Shared Pool SGA

Структуры

x$kgllk.kgllkmod
x$kglpn.kglpnmod

  • 0: no lock
  • 1: null
  • 2: shared
  • 3: exclusive
Объекты
Pseudo cursor

AskTom. v$open_cursor.sql_text showing «table_4_200_5e14_0_0_0, version 8.1.7

H$PSEUDO_CURSOR [ID 1298471.1] «Псевдокурсоры — структуры для предоставления прямого доступа к объектам бд, исключающего overhead, связанный с написанием явного запроса»

Или по-простому, это такие курсоры, которые могут встретиться в V$SESSION и V$OPEN_CURSOR, но отсутствуют в V$SQL, V$SQLAREA, V$SQL_PLAN. Обычно имеют отношение к LOB столбцам, объектным типам, таблицам пользователя SYS:

SQL> with q as
2   (select /*+ materialize*/
3     o.sql_id
4      from gv$open_cursor o
5     where not exists (select * from gv$sql s where s.sql_id = o.sql_id))
6  select ss.sql_id, ss.prev_sql_id, o.sql_text
7    from gv$session ss, gv$open_cursor o
8   where ss.sql_id in (select sql_id from q)
9     and ss.sql_id = o.sql_id(+)
10  /

SQL_ID        PREV_SQL_ID   SQL_TEXT
------------- ------------- --------------------
9jmd3y1tnxy9n 7frqszzdu8sgg table_1_ff_213_0_0_0

SQL> select to_char(OBJECT_ID, 'xxx') as OBJECT_ID, owner, object_name, object_type
2     from dba_objects
3    where OBJECT_ID in (to_number('213', 'xxx'))
4  /

OBJECT_ID OWNER OBJECT_NAME OBJECT_TYPE
--------- ----- ----------- -----------
213      SYS   KOTTBX$     TABLE

SQL> select table_name, column_name, data_type, hidden_column
2    from dba_tab_cols
3   where table_name = 'KOTTBX$'
4  /

TABLE_NAME COLUMN_NAME     DATA_TYPE HIDDEN_COLUMN
---------- --------------- --------- -------------
KOTTBX$    SYS_NC_OID$     RAW       YES
KOTTBX$    SYS_NC_ROWINFO$ KOTTBX    YES

Компоненты SQL запросов

Subquery

SQL> select sysdate from dual
where sysdate =
                (select sysdate from dual); --SUBQUERY

 

SQL> SELECT count(*) FROM dual
   HAVING count(*) >=
                      (SELECT count(*) FROM dual); --SUBQUERY

Nested Subqueries

подзапросы, распологающиеся в разделе WHERE родительского запроса

Inline View

SQL> select *
from (select empno, ename from emp) e, -- INLINE VIEW
dept d;

Scalar Subquery [Expressions]

подзапрос, возвращающий в точности один столбец  и одну строку… NULL, если подзапрос не возвращает строк, ошибка — если подзапрос выбирает > 1-й строки и/или 1-го столбца

SQL> select
  2     (select sysdate from dual) as DT -- Scalar Subquery
  3   from dual
  4  /

DT
-----------
22.06.1812

SQL> select sysdate as DT
  2    from dual
  3   where sysdate = NVL((select sysdate from dual) -- Scalar Subquery
  4                      ,sysdate)
  5  /

DT
---------
07-OCT-12

До версии 11.1 наблюдается Bug 4483257 — Explain plan does not show a part of the execution path [ID 4483257.8],

тесткейс с sql.ru:

10.2.0.5.ORCL102@SCOTT SQL> drop table a1;

Table dropped.

SQL> create table a1
  2  (x number);

Table created.

SQL> drop table b1;

Table dropped.

SQL> create table b1
  2  (x number,
  3  y varchar2(100));

Table created.

SQL> insert into a1
  2  (x)
  3  select level
  4  from dual
  5  connect by level<10; 9 rows created. SQL> insert into b1
  2  (x,y)
  3  select level,'Level '||to_char(level)
  4  from dual
  5  connect by level<20; 19 rows created. SQL> exec dbms_stats.gather_table_stats('','A1');

PL/SQL procedure successfully completed.

SQL> exec dbms_stats.gather_table_stats('','B1');

PL/SQL procedure successfully completed.

запрос выполняется без ошибок, при этом в плане выполнения и в секции  Predicate отображается только таблица A1:

10.2.0.5.ORCL102@SCOTT SQL> SELECT t.x
  2                ,(SELECT tt.y FROM b1 tt WHERE tt.x = t.x) y
  3            FROM a1 t
  4           WHERE t.x < 5   5          UNION ALL   6          SELECT t.x   7                ,(SELECT tt.y FROM b1 tt WHERE tt.x = t.x) y   8            FROM a1 t   9           WHERE t.x > 5;

         X Y
---------- ----------------------------------------------------------------------------------------------------
         1 Level 1
         2 Level 2
         3 Level 3
         4 Level 4
         6 Level 6
         7 Level 7
         8 Level 8
         9 Level 9

8 rows selected.

SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor('','','allstats advanced -alias -note -projection last'));

PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  fcvr6f09bxk87, child number 0
-------------------------------------
...

Plan hash value: 3981291029

----------------------------------------------------------------------------
| Id  | Operation          | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |        |       |     6 (100)|          |
|   1 |  UNION-ALL         |      |        |       |            |          |
|*  2 |   TABLE ACCESS FULL| A1   |      4 |    52 |     3   (0)| 00:00:01 |
|*  3 |   TABLE ACCESS FULL| A1   |      4 |    52 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('10.2.0.5')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$2")
      OUTLINE_LEAF(@"SEL$1")
      OUTLINE_LEAF(@"SEL$4")
      OUTLINE_LEAF(@"SEL$3")
      OUTLINE_LEAF(@"SET$1")
      FULL(@"SEL$3" "T"@"SEL$3")
      FULL(@"SEL$1" "T"@"SEL$1")
      FULL(@"SEL$2" "TT"@"SEL$2") -- доступ к таблице B1
      FULL(@"SEL$4" "TT"@"SEL$4") -- --//--
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("T"."X"<5)    3 - filter("T"."X">5)

— однако в данных OUTLINE описывается доступ к обеим таблицам запроса

В Oracle 11g проблем с отображением плана не наблюдается:

11.2.0.3.ORCL112@SCOTT SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor('','','allstats advanced -alias -note -projection last'));

PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  fcvr6f09bxk87, child number 0
-------------------------------------
...
Plan hash value: 2890762954

---------------------------------------------------------------------------------------------------------------------
| Id  | Operation          | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
---------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |      1 |        |       |     6 (100)|          |      8 |00:00:00.01 |      61 |
|   1 |  UNION-ALL         |      |      1 |        |       |            |          |      8 |00:00:00.01 |      61 |
|*  2 |   TABLE ACCESS FULL| B1   |      4 |      1 |    12 |     3   (0)| 00:00:01 |      4 |00:00:00.01 |      24 |
|*  3 |   TABLE ACCESS FULL| A1   |      1 |      5 |    15 |     3   (0)| 00:00:01 |      4 |00:00:00.01 |       7 |
|*  4 |   TABLE ACCESS FULL| B1   |      4 |      1 |    12 |     3   (0)| 00:00:01 |      4 |00:00:00.01 |      24 |
|*  5 |   TABLE ACCESS FULL| A1   |      1 |      5 |    15 |     3   (0)| 00:00:01 |      4 |00:00:00.01 |       6 |
---------------------------------------------------------------------------------------------------------------------

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
      DB_VERSION('11.2.0.3')
      ALL_ROWS
      OUTLINE_LEAF(@"SEL$2")
      OUTLINE_LEAF(@"SEL$1")
      OUTLINE_LEAF(@"SEL$4")
      OUTLINE_LEAF(@"SEL$3")
      OUTLINE_LEAF(@"SET$1")
      FULL(@"SEL$3" "T"@"SEL$3")
      FULL(@"SEL$1" "T"@"SEL$1")
      FULL(@"SEL$2" "TT"@"SEL$2")
      FULL(@"SEL$4" "TT"@"SEL$4")
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("TT"."X"=:B1)
   3 - filter("T"."X"<5)    4 - filter("TT"."X"=:B1)    5 - filter("T"."X">5)

В версии 11.2.0.2 при использовании scalar subquery наблюдается Bug 10405897 — Wrong results from subquery in an expression which includes an NVL() /decode operator [ID 10405897.8], связанный с Cost-Based Query Transformation типа Scalar subquery unnesting

subquery factoring

aka with subquery

aka Common Table Expression (CTE) in ANSI

ANSI join, Oracle-specific joins syntax(+), Lateral Views — сравнение, описание — Outerjoins in Oracle

Оптимизация запросов/CBO

kke Kernel query Cost Engine
kko Kernel Cost based Optimizer operation
kkopm … Optimizer Plan Management

kkopmCheckSmbUpdate: KKOPM Check if updates to the Sql Management Base are pending

Системные процессы Oracle Background Processes

В документации 11.2
New Background Processes In 11g [ID 444149.1]

Прочие слова и выражения

MQL / TUR

механизм для отслеживания (tracking mechanism) длительности запроса (Maximum Query Length) и настройки параметров хранения undo-информации (Tuning Undo Retention) в Oracle 10g/11.1 — Alert.log Shows: ktsmgtur(): TUR was not tuned for 4476 secs [ID 754751.1]

In-flux Latch Freed / freeing

PMON Generates Trace File With In-flux Latch Freed Message [ID 112321.1]

freeing in-flux r/w latch for process state: 69c3bc7e8
... in-flux r/w latch  69fdd7b40 Child cache buffers chains level=1 child#=7806
 Location from where latch is held: kcbgtcr: fast path:

«… PMON производит нормальную операцию очистки окружения «мёртвого» [пользовательского] процесса Oracle в случае, когда обнаруциваются latch, удерживаемый этим процессом.  PMON освобождает latch и генерирует трейс для информации»

Добавить комментарий »

Комментариев нет.

RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Создайте бесплатный сайт или блог на WordPress.com.

%d такие блоггеры, как: