Oracle mechanics

09.09.2013

Oracle 12c

Filed under: Oracle,Oracle 12c — Igor Usoltsev @ 23:48
Tags:

Нововведения 12c, на первый взгляд показавшиеся важными и интересными:c12-logo-1974558[1]

Контейнерная архитектура бд (Multitenant Architecture)

проявляется сразу же после установки и старта сервиса на ноутбуке (Windows 7 x86_64), при соединении к дескриптору, автоматически прописываемому в tnsnames.ora:

C:\> sqlplus /@"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))" as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Sun Aug 25 00:33:03 2013

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> @scott
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT IDENTIFIED BY TIGER
*
ERROR at line 1:
ORA-65049: creation of local user or role is not allowed in CDB$ROOT -- новые ошибки и понятие локального пользователя

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT                                                             -- , вызванные текущим соединением с корневому контейнеру

SQL> select name, open_mode from v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDBORCL                        MOUNTED   -- созданная при установке pluggable db (PDB) по умолчанию при старте сервиса не открывается

SQL> alter session set container=PDBORCL;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
PDBORCL

SQL> alter database open;

Database altered.

SQL> with xxx_users as        -- запрос пользователей, выполняемый из PDB
  2   (select--+ materialize
  3     * from dba_users)
  4  select username, common
  5    from xxx_users
  6   order by user_id OFFSET 36 ROWS FETCH NEXT 4 ROWS ONLY; -- ***

USERNAME               COMMON
---------------------- ------
BI                     NO     -- показывает и локальных,
SCOTT                  NO
DVSYS                  YES    -- и глобальных пользователей
SYSBACKUP              YES

SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor());

----------------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name                      | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                           |       |       |    29 (100)|          |
|   1 |  TEMP TABLE TRANSFORMATION   |                           |       |       |            |          |
|   2 |   LOAD AS SELECT             |                           |       |       |            |          |
...
|* 19 |   VIEW                       |                           |    88 |  8360 |     3   (0)| 00:00:01 |
|* 20 |    WINDOW SORT PUSHED RANK   |                           |    88 |  7216 |     3   (0)| 00:00:01 |
|  21 |     VIEW                     |                           |    88 |  7216 |     3   (0)| 00:00:01 |
|  22 |      TABLE ACCESS FULL       | SYS_TEMP_0FD9D660B_31276A |    88 | 20240 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------

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

  ...
  19 - filter(("from$_subquery$_003"."rowlimit_$$_rownumber"<=CASE  WHEN (36>=0) THEN 36 ELSE 0  -- ***
              END +4 AND "from$_subquery$_003"."rowlimit_$$_rownumber">36))
  20 - filter(ROW_NUMBER() OVER ( ORDER BY "USER_ID")<=CASE  WHEN (36>=0) THEN 36 ELSE 0 END +4) -- ***

***) использованная в запросе новая sql-конструкция OFFSET … FETCH реализуется фильтрами со стандартными аналитическими функциями, однако удобно

Вопрос с автозапуском логично решается триггером — Robert Geier. Oracle 12c — need to start container AND pluggable databases (+ в том же блоге — другие фичи 12c):

C:\> sqlplus / as sysdba

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> create or replace trigger Sys.After_Startup_cdb
  2    after startup on database
  3  begin
  4    execute immediate 'alter pluggable database all open';
  5  end;
  6  /

Trigger created.

SQL> startup force
ORACLE instance started.
Database mounted.
Database opened.

SQL> select name, open_mode from v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDBORCL                        READ WRITE -- автоматическое открытие PDB

Немного необычно отрабатывает команда shutdown для PDB:

C:\> sqlplus /@"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=pdborcl)))" as sysdba

SQL> show con_name

CON_NAME
------------------------------
PDBORCL

SQL> select name, open_mode from v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDBORCL                        READ WRITE

SQL> shutdown abort
Pluggable Database closed.                -- закрытие контейнерной бд

SQL> select name, open_mode from v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDBORCL                        MOUNTED    -- соответствует состоянию MOUNTED 

В целом контейнерная архитектура представляется интересной, имхо, для небольших некритичных бд и крупных серверов/систем — например, для утилизации больших брендовых серверов)

Новые системные обзоры со статистикой медленных (> 500 ms) операций ввода-вывода

V$IO_OUTLIER
V$LGWRIO_OUTLIER  — ранее, начиная c 10.2.0.4, эта информация отражались в трейсах LGWR в виде:

Warning: log write elapsed time 3807ms, size 1KB

Расширение размерности типов данных VARCHAR2, NVARCHAR2 и RAW до 32767 байт

не функционирует сразу после установки бд, требует некоторых дополнительных действий — How to Increase the Maximum Size of VARCHAR2, NVARCHAR2, and RAW Columns in 12C Database using MAX_STRING_SIZE ? (Doc ID 1570297.1)

При этом столбцы VARCHAR2, NVARCHAR2 размером более 4000 и RAW более 2000 байт рассматриваются как тип данных увеличенного размера (extended data types) и хранятся в виде out-of-line LOB сегментов в том же табличном пространстве что и таблица. При размещении таблицы в ASSM табличном пространстве эти LOB-ы хранятся в виде SecureFiles, в не-ASSM — как BasicFiles. Всё красиво

Как показал Саян Малакшинов. Oracle 12c: Extended varchars  — граница extended data types (4000) определяется соответствующим параметром и модифицируема (!):

SQL> @param_ _scalar_type_lob_storage_threshold

NAME                                VALUE  IS_DEF   DSC
----------------------------------- ------ -------- ----------------------------------------------------------
_scalar_type_lob_storage_threshold  4000   TRUE     threshold for VARCHAR2, NVARCHAR2, and RAW storage as BLOB

Там же Саян показывает, что использование таких расширенных типов данных снижает кол-во SQL*Net roundtrips, по сравнению с fetch-ем обычных CLOB столбцов ( когда для каждой строки требуется один roundtrip), что важно!

Концептуальные доработки контроля доступа в PL/SQL

Tom Kyte. 12c — Whitelists:

SQL> create or replace package my_pkg
  2  accessible by (p1)
  3  as ...

Tom Kyte. 12c — Code Based Access Control (CBAC) part 1

SQL> grant create_table_role to procedure p;
Grant succeeded.

Oracle Database Driver for MySQL Applications

- реализована остроумная идея подменить MySQL client library для обеспечения работы приложения без изменения кода с данными, мигрировавшими из MySQL в Oracle — в рамках качественного развития (эволюции) проекта по версии Oracle

SQL Translation Framework

- задуман для трансляции диалектов SQL в Oracle-синтаксис, например, для корректировки синтаксиса при использовании вышеупомянутого Oracle Driver for Mysql

Кроме этого прямого назначения, как оказалось, функционал нового пакета dbms_sql_translator может быть использован для «прозрачной» подмены текста обычных запросов в Oracle — Kerry Osborne. SQL Translation Framework — оригинальная дополнительная возможность улучшения плохо написанных SQL

Встроенный в SQL функционал Pattern Matching

- серьёзная разработка и, в отличие от появившейся в 12c поддержки диапазона выбираемых строк (OFFSET … FETCH), работающей через «аналитические» фильтры, Pattern Matching реализуется через новую операцию плана выполнения:

SQL> select time_id,
  2         MR.start_time_id,
  3         MR.start_day_name,
  4         day_name,
  5         MR.start_day_number,
  6         MR.down_day_number,
  7         MR.up_day_number
  8  from sh.times t
  9  MATCH_RECOGNIZE (
 10       PARTITION BY calendar_month_desc
 11       ORDER BY time_id
 12       MEASURES  STRT.time_id AS start_time_id,
 13                 STRT.day_name AS start_day_name,
 14                 STRT.day_number_in_week AS start_day_number,
 15                 DOWN.day_number_in_week AS down_day_number,
 16                 UP.day_number_in_week AS up_day_number
 17       ALL ROWS PER MATCH
 18       AFTER MATCH SKIP TO NEXT ROW
 19       PATTERN (STRT DOWN UP)
 20       DEFINE
 21          DOWN AS DOWN.day_number_in_week < PREV(DOWN.day_number_in_week),  22          UP AS UP.day_number_in_week > PREV(UP.day_number_in_week)
 23       ) MR
 24  ORDER BY MR.start_time_id
 25  OFFSET 3 ROWS FETCH NEXT 6 ROWS ONLY
 26  /

TIME_ID   START_TIM START_DAY DAY_NAME  START_DAY_NUMBER DOWN_DAY_NUMBER UP_DAY_NUMBER
--------- --------- --------- --------- ---------------- --------------- -------------
11-JAN-98 11-JAN-98 Sunday    Sunday                   7
12-JAN-98 11-JAN-98 Sunday    Monday                   7               1
13-JAN-98 11-JAN-98 Sunday    Tuesday                  7               1             2
18-JAN-98 18-JAN-98 Sunday    Sunday                   7
19-JAN-98 18-JAN-98 Sunday    Monday                   7               1
20-JAN-98 18-JAN-98 Sunday    Tuesday                  7               1             2

6 rows selected.

PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------
| Id  | Operation                                          | Name  | Rows  | Bytes | Cost (%CPU)|
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                   |       |       |       |    18 (100)|
|*  1 |  VIEW                                              |       |  1826 |   162K|    18   (0)|
|*  2 |   WINDOW SORT PUSHED RANK                          |       |  1826 |   123K|    18   (0)|
|   3 |    VIEW                                            |       |  1826 |   123K|    18   (0)|
|   4 |     BUFFER SORT                                    |       |  1826 | 51128 |    18   (0)|
|   5 |      MATCH RECOGNIZE SORT DETERMINISTIC FINITE AUTO|       |  1826 | 51128 |    18   (0)| -- новая операция в плане
|   6 |       TABLE ACCESS FULL                            | TIMES |  1826 | 51128 |    18   (0)|
-------------------------------------------------------------------------------------------------

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

   1 - filter(("from$_subquery$_003"."rowlimit_$$_rownumber"<=CASE  WHEN (3>=0) THEN 3 ELSE 0 END
              +6 AND "from$_subquery$_003"."rowlimit_$$_rownumber">3))
   2 - filter(ROW_NUMBER() OVER ( ORDER BY "MR"."START_TIME_ID")<=CASE  WHEN (3>=0) THEN 3 ELSE 0
              END +6)

Поддержка Cube Statistics в V$SESSTAT / V$SYSSTAT, и, соответсвенно, в AWR, ASH, ADDM

в виде статистик с названиями, начинающимися на OLAP% в классе 64 (SQL)

Например, после установки тестовой схемы GLOBAL для Oracle OLAP Option можно наблюдать:

SQL> select class, name, value from v$sysstat where name like 'OLAP%' and value > 0;

     CLASS NAME                                                                  VALUE
---------- ---------------------------------------------------------------- ----------
        64 OLAP Paging Manager Cache Hit                                       4090730
        64 OLAP Paging Manager Cache Miss                                       131887
        64 OLAP Paging Manager New Page                                         129617
        64 OLAP Paging Manager Cache Write                                       12953
        64 OLAP Import Rows Pushed                                              310346
        64 OLAP Import Rows Loaded                                              310346
        64 OLAP Row Source Rows Processed                                          105
        64 OLAP Engine Calls                                                      3141
        64 OLAP Temp Segment Read                                                  395
        64 OLAP Perm LOB Read                                                     2283
        64 OLAP Paging Manager Cache Changed Page                                63637
        64 OLAP Limit Time                                                           1
        64 OLAP Row Load Time                                                  2318187

- т.е. технология Oracle OLAP Option (Express MOLAP) подерживается и интегрируется / развивается в единой бд, что радует

Адаптивная оптимизация запросов

- сложное серьёзное изменение механизма оптимизации, результаты будут зависеть от заложенных разработчиками возможностей управления и контроля, а также взаимодействия элементов адаптивного выполнения между собой и уже существующими технологиями типа Adaptive cursor sharing, SPM и т.д.

Концептуально, кроме адаптивных изменений текущего плана выполнения (левая ветка), включает генерацию и использование адаптивной статистики:

tgsql_vm_069[1]
, в свою очередь состоящей из:

  • динамической статистики (dynamic statistics) — как дополненной возможностями оценки JOIN CARDINALITIY и GROUP BY STATISTICS версии dynamic sampling
  • автореоптимизации (Automatic Reoptimization), состоящей из:
  • Statistics Feedback (известной ранее как Cardinality Feedback) и теперь отображаемой (и сохраняемой в течение жизни инстанса) в виде хинтов типа OPT_ESTIMATE (широко применяемых в SQL Profiles) с привязкой к конкретному SQL_ID в обзоре V$SQL_REOPTIMIZATION_HINTS
  • и Performance Feedback , автоматически определяющей DOP при установке нового значения параметра PARALLEL_DEGREE_POLICY = ADAPTIVE
  • директив плана выполнения (SQL Plan Directives), восполняющих отсутствие / несоответствие статистики таблиц, столбцов и групп без привязки к конкретному SQL

Optimizer with Oracle Database 12c

Адаптивное управление элементами SPM

автоматизирует жизненный цикл (evolution) Baseline-ов: тестирование (verification) и одобрение к использованию (accept) — как создаваемых автоматически, так и созданных вручную, используя:

SQL> select description, advisor_name, how_created, system_task from DBA_ADVISOR_TASKS where task_name = 'SYS_AUTO_SPM_EVOLVE_TASK';

DESCRIPTION                ADVISOR_NAME        HOW_CREATED  SYSTEM_TASK
-------------------------- ------------------- ------------ -----------
Automatic SPM Evolve Task  SPM Evolve Advisor  AUTO         TRUE

SQL Plan Management with Oracle Database 12c

Расширения статистики

, кроме новых форматов и типов гистограмм включающие в себя:

  • автоматическое определение / создание групп столбцов (DBA_STAT_EXTENSIONS) из генерируемых SQL Plan Directives для последующего ручного создания расширенной статитики с использованием DBMS_STATS.CREATE_EXTENDED_STATS
  • автоматический динамический сбор статистики (dynamic statistics), используемый в 11g для параллельных запросов, расширен для некоторых непараллельных операций, и должен улучшить качество планов. Для управления сбором динамической статистики добавлено специальное значение OPTIMIZER_DYNAMIC_SAMPLING = 11, доступное также в обновлении 11.2.0.4
  • по умолчанию для GTT теперь в первую очередь используется статистика уровня сессии:
SQL> select dbms_stats.get_prefs('GLOBAL_TEMP_TABLE_STATS') from dual;

GLOBAL_TEMP_TABLE_STATS
-----------------------
SESSION

, собраемая / устанавливаемая процедурами DBMS_STATS , которые в версии 12c логично не выполняют COMMIT для транзакционных GTT

Поддержка списка устройств Database Smart Flash Cache

- удобно + подтверждает признание успеха и развитие технологии со стороны производителя

Out-of-Place Materialized View Refresh

- важнейшая доработка, значительно упрощающая управление и сокращающая период недоступности объёмных материализованных представлений, которые экономичнее (в плане генерации REDO) обновлять COMPLETE non-atomic методом, даже несмотря на существенный пока список ограничений

SQL> CREATE MATERIALIZED VIEW MV_SALES_BY_MONTH_BY_STATE
  2       TABLESPACE example
  3       REFRESH COMPLETE
  4       AS SELECT t.calendar_month_desc, c.cust_state_province,
  5          SUM(s.amount_sold) AS sum_sales
  6          FROM sh.times t, sh.sales s, sh.customers c
  7          WHERE s.time_id = t.time_id AND s.cust_id = c.cust_id
  8          GROUP BY t.calendar_month_desc, c.cust_state_province -- только JOIN и GROUP BY MV поддерживают Out-of-Line refresh
  9  /

Materialized view created.

SQL> select object_type, object_id, data_object_id from dba_objects where object_name = 'MV_SALES_BY_MONTH_BY_STATE';

OBJECT_TYPE              OBJECT_ID DATA_OBJECT_ID
----------------------- ---------- --------------
MATERIALIZED VIEW            93292
TABLE                        93339          93339                  -- первоначальный объект

SQL> update sh.times set calendar_month_desc = calendar_month_desc -- ибо без изменения подлежащих данных Oracle
  2  /                                                             -- естественно сэкономит ресурсы, и делать ничего не станет

1826 rows updated.

SQL> exec DBMS_MVIEW.REFRESH('MV_SALES_BY_MONTH_BY_STATE',method => 'c', atomic_refresh => false, out_of_place => true);

PL/SQL procedure successfully completed.

SQL> select object_type, object_id, data_object_id from dba_objects where object_name = 'MV_SALES_BY_MONTH_BY_STATE';

OBJECT_TYPE              OBJECT_ID DATA_OBJECT_ID
----------------------- ---------- --------------
MATERIALIZED VIEW            93292
TABLE                        93341          93341                  -- новый объект бд

SQL> select ORIGINAL_NAME, TYPE, BASE_OBJECT, PURGE_OBJECT from dba_recyclebin;

ORIGINAL_NAME   TYPE                      BASE_OBJECT PURGE_OBJECT
--------------- ------------------------- ----------- ------------
RV$16C9B        TABLE                           93339        93339 -- прежний можно найти в корзине

Параметр PGA_AGGREGATE_LIMIT

- очень жёсткое, вплоть до терминирования самых объёмных по суммарному потреблению памяти (включая память PX Slave процессов) пользовательских сессий, ограничение суммарного размера PGA. Использование должно определяться бизнес требованиями к системе, с другой стороны — дополнительный инструмент управления размером разделяемой памяти Oracle

Использование SecureFiles по умолчанию для хранения LOB в ASSM табличных пространствах

- отличная ожидаемая новость. Как справедливо отмечается разработчиками, «по причинам оптимальной производительности»

Концепция жизненного цикла данных, Information Lifecycle Management (ILM), включает:

  • Новое понятие температурной карты (Heat Map), как возможность мониторинга доступа к объектам бд на уровне сегмента (партиции) и модификации данных на уровнях сегмента и/или строки/блока
  • Автоматическая оптимизация хранения данных — Automatic Data Optimization (ADO) позволяет устанавливать на уровне сегмента различные политики хранения (ILM policies), комбинирующие степени сжатия и возможности перемещения архивных сегментов данных в табличные пространства на недорогих носителях. В определении политики допускается использование пользовательских PL/SQL функций

Heap+Maps

Возможность использования Heat Map и ADO определяется параметром:

SQL> @param heat_map

NAME      VALUE  IS_DEF   IS_MOD  DSC
--------- ------ -------- ---------- -----------------
heat_map  OFF    TRUE     FALSE   ILM Heatmap Tracking

В списке ограничений/особенностей:

  • не поддерживается для бд с контейнерной архитектурой
  • активности, связанные с применением ILM policies (сжатие и перенос данных) реализуются во время  maintenance windows

Марк Ривкин. Презентация о новых возможностях Oracle Database 12c — температурная карта и автоматическая оптимизация хранения данных

Active Data Guard Far Sync

- крайне полезная и красивая 3-х звенная конфигурация ADG, дополненная на стороне primary лёгким инстансом (standby control files + redologs, без файлов данных и необходимости media recovery), на который в режиме SYNC (без потерь) передаются логи от primary с последующей передачей в асинхронном режиме на удалённые standby (числом до 29 с возможностью сжатия Oracle Advanced Compression)

Неплохой аллегорией представляется ноутбук с GSM-модемом на крыше горящего датацентра:

12c[1]

Сравнительные тесты передачи логов в режиме SYNC между удалённым ДЦ и локальным Far Sync ожидаемо показывают многократное сокращение времён ожиданий log file sync без потери данных в последнем случае  — Marcin Przepiorowski. DataGuard – Far Sync – part 1 – simple configuration

About these ads

Комментарии (4) »

  1. Очепятка: Tom Tyte -> Tom Kyte

    комментарий от Yuri — 11.09.2013 @ 10:09 | Ответить

    • Спасибо, исправил

      комментарий от Igor Usoltsev — 11.09.2013 @ 10:12 | Ответить

  2. Много разных интересных фич в одном месте. Спасибо за ссылки. Марк Ривкин, как всегда, порадовал.
    Спасибо, Игорь!

    комментарий от Sergey Golikov — 11.09.2013 @ 10:17 | Ответить

    • Рад, что понравилось, Сергей, и рад слышать)
      Это, понятно, не все значимые новинки, но наиболее интересными мне показались адаптивные технологии оптимизации и статистика — будем тестировать!

      комментарий от Igor Usoltsev — 12.09.2013 @ 22:57 | Ответить


RSS-лента комментариев к этой записи. TrackBack URI

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s

Тема: Rubric. Get a free blog at WordPress.com

Отслеживать

Get every new post delivered to your Inbox.

Join 113 other followers

%d bloggers like this: