Oracle mechanics

20.04.2014

Partition Push-Up при выполнении MIN/MAX операций

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

При наблюдении за замедлением выполнения запросов типа:

select * from 
(select max(max_value) supermax_value           -- этот подзапрос был оформлен в виде VIEW
          from (select max(x) max_value from t1 -- одна из таблиц партицирована RANGE PARTITION по искомому ключу
                union all
                select max(y)           from t2
                union all
                select max(z)           from t3
                union all
                ...)
)

обратил внимание на неожиданно простую «синтактическую чувствительность» запроса: если сам запрос выполняется удовлетворительно быстро:

11.1.0.7.@ SQL> select max(last_date) max_last_date
  2            from (select last_date
  3                    from (select max(showtime) last_date
  4                            from shows))
  5  /

MAX_LAST
--------
16.04.13

1 row selected.

Elapsed: 00:00:00.47 -- быстро

, то при добавлении обвязки типа SELECT * FROM (), характерной при использовании обзора, скорость резко падает:

SQL> select *  from (select max(last_date) max_last_date
  2                    from (select last_date
  3                            from (select max(showtime) last_date
  4                                    from shows)))
  5  /

MAX_LAST
--------
16.04.13

1 row selected.

Elapsed: 00:06:10.67 -- небыстро

При детальном рассмотрении оказалось, такое поведение характерно до версии Oracle 12c включительно, не относится к оптимизатору и плану выполнения, и, похоже, определяется на стадии выполнения механизмом PARTITION PUSHUP (more…)

19.04.2014

Практический тест параллельной последовательной (многоблочной) записи на SSD

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

Некоторое время назад с Дмитрием Якубеней использовали возможность протестировать SSD на предмет массированной/параллельной многоблочной записи (что обычно считается слабым местом SSD против обычных дисков), в роли временного/temporary tablespace на бд с преобладающими операциями direct path write temp / direct path read temp в профиле нагрузки

Кратко можно отметить, что один SSD почти успешно заменил семь SATA (7,200 rpm) дисков в части записи-чтения временных сегментов на умеренно нагруженной бд DWH профиля. При этом на протяжении тестов все остальные файлы бд оставались на дисковой группе SATA, однако временная запись составляла заметно более 50% всей записи, а чтение >= 35-40% от общего объёма чтения бд. Почти успешно потому, что замедление временной записи всё-таки было заметно для отдельных запросов в относительно высоким DOP

Некоторые детали и прочая статистика (more…)

23.03.2014

Таймауты выполнения PL/SQL процедуры, Гауссово распределение и и статистика будущих периодов

Filed under: Active Session History,hints,Oracle — Игорь Усольцев @ 21:34
Tags: ,

По жалобе на превышение 20 секундного таймаута при выполнении кастомизированной процедуры XXWHY_NOT_INTF.REQUEST, оценка статистики выполнения соответствующего запроса оказалась не очень информативной:

11.2.0.3.@ SQL> @dba_hist_sqlstat "sql_id = 'arhv5vxgj80uf' and snap_id >= 62450"
 
BEGIN_SNAP_TIME  EXECS SQL_ID        ELA_PER_EXEC CPU_PER_EXEC GETS_PER_EXEC READS_PER_EXEC ROWS_PER_EXEC IOWAITS_PER_EXEC PLSQL_PER_EXEC
--------------- ------ ------------- ------------ ------------ ------------- -------------- ------------- ---------------- --------------
...
21.01 08:30        541 arhv5vxgj80uf      2223235      2195982         20628              2             1            19878          23186
21.01 08:00        564 arhv5vxgj80uf      2188863      2145934         20396              4             1            30133          17214
21.01 07:30        562 arhv5vxgj80uf      2187546      2157540         20390              2             1            18394          18801
21.01 07:00        555 arhv5vxgj80uf      2221630      2189168         20563              2             1            22075          21824
21.01 06:30        570 arhv5vxgj80uf      2158897      2127110         20144              2             1            21746          19995
21.01 06:00        566 arhv5vxgj80uf      2191961      2136901         20037              3             1            42246          37670
...

- хотя понятно, что в среднем большая часть времени выполнения процедуры тратилась на ЦПУ (и/или чтение/обработку блоков буферного кэша)

В поисках потенциального источника таймаутов может пригодиться древо ожиданий вызова как самой процедуры (sql_id=arhv5vxgj80uf), так и генерируемых ею рекурсивных запросов: (more…)

Определение SQL_ID/PLAN_HASH_VALUE для SPM Baseline

Filed under: Oracle,Plan Management — Игорь Усольцев @ 00:09
Tags: ,

Внезапно замедлившиеся сессии при выполнении запроса 4y4bvy7bhkqbn согласованно ожидали read by other session / db file sequential read:

11.2.0.3.@ SQL> @ash_sql_wait_tree "event='read by other session' and ash.sql_id = '4y4bvy7bhkqbn'"
 
LVL INST_ID BLOCKING_TREE   EVENT                     WAITS_COUNT EXECS_COUNT AVG_WAIT_TIME_MS  EST_WAITS EST_AVG_LATENCY_MS SQL_ID       
--- ------- --------------- ------------------------- ----------- ----------- ---------------- ---------- ------------------ -------------
  1       1 FOREGROUND      read by other session            5297           8               35     651128                 17 4y4bvy7bhkqbn
  1       2 FOREGROUND      read by other session            1689           9               36      87337                 20 4y4bvy7bhkqbn
  2       1   FOREGROUND    db file sequential read          4921           8               37     429427                 23 4y4bvy7bhkqbn
  2       2   FOREGROUND    db file sequential read          1524          10               37      69937                 22 4y4bvy7bhkqbn
...

В историю выполнения обнаружилась нестабильность времени выполнения/планов запроса: (more…)

13.03.2014

Полезное напоминание о скором окончании основной (Premier) поддержки версии Oracle 11.2

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

от сотрудника фирмы-производителя

Do you know?
Premier Support for Oracle 11.2 will end soon!!!

и действительно:

Database 11g Release 2 Lifetime Support Dates
Release GA
Date
Premier
Support Ends
Extended
Support Ends
Sustaining
Support Ends
11.2 Sep 2009 31 Jan 2015 31 Jan 2018 Indefinite

Пора обновляться на 12c?

Диагностика проблем сетевых соединений с использованием Oracle wait event интерфейса

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

Беда пришла, как обычно, откуда не ждали — т.е. неизвестно откуда:

sqlnet_bad

- ось ординат на графике мониторинга отражает резко увеличившееся время выполнения некоего набора критически важных запросов и процедур

Ну и поскольку кроме графика из логов приложения получить никакой дополнительной информации не было решительно никакой возможности — пришлось нам с Дмитрием Якубеней искать причины возникновения проблем средствами Oracle

При рассмотрении AWR на втором месте в топе было замечено нехарактерное для системы ожидание SQL*Net more data from client: (more…)

07.03.2014

Проблема использования standby db в качестве FAL-сервера в 11.2

Filed under: Active Data Guard,Диагностика системы (instance),Oracle — Игорь Усольцев @ 18:26
Tags:

Конфигурация

-------------- Log_Archive_Dest_1->       ----------------
|            |----------------------------|              |
| Primary db |              <- FAL_Server | Standby_1 db |
|            |\                          /|              |
-------------- \                        / ----------------
                \                      /
                 \                    /
                  \ <- FAL_Server -> /
Log_Arch_Dest_2-> --------------------
                  |                  |
                  |   Standby_2 db   |
                  |                  |
                  --------------------

- серверы primary и standby_1 работают в рамках стандартных switchover/failover, сервер бд standby_2 используется только для резервного копирования бд

Проблема

На standby_1 наблюдалось постоянно растущее кол-во клиентских соединений с сервера standby_2 в состоянии долгого SQL*Net message from client: (more…)

23.02.2014

Отличная презентация по анализу AWR

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

Для тех, кто ещё не видел — Interpreting AWR Report — Straight to the Goal by Franck Pachot

 Interpreting AWR Report

- виртуозно по испонению и полезно по содержанию!

21.01.2014

Ожидание log file sync на медленных дисках

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

В результате переноса бд с SAS на более ёмкие SATA (в обоих случаях — ASM), с заметной периодичностью на уровне ОС стали наблюдаться симптомы перегрузки отдельных дисков в случайном порядке следующего типа:

# iostat -x 2 /dev/sd*5
...
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          12.81    0.00    0.66   10.37    0.00   76.16

Device:         rrqm/s   wrqm/s    r/s    w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda5              0.00     0.00   0.00   0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdb5              9.50     0.00  82.00 181.50 17616.00  6864.00    92.90     3.08   11.69   1.68  44.15
sdc5             11.00     0.00 113.00 176.50 22608.00  7136.00   102.74     3.23   11.17   1.70  49.15
sdh5             11.50     0.00  53.50 207.50 19120.00  8292.00   105.03     3.84   14.74   1.80  46.85
sdi5              8.00     0.00  47.50 148.50 15568.00  5616.00   108.08     1.61    8.16   1.65  32.35
sdj5              7.50     0.00  56.50 163.50 16016.00  6576.00   102.69     2.70   12.28   1.77  38.85
sdg5             10.00     0.00  58.50 185.00 19104.00  7344.00   108.62     3.77   15.49   1.82  44.40
sdd5             15.50    15.50  94.00 182.00 21840.00  8000.00   108.12   115.31  494.38   3.62 100.00 -- здесь,
sde5             13.00     5.00  68.00 179.50 15536.00  7760.00    94.13   129.35  507.48   4.04 100.00 -- здесь
sdn5              9.00     0.00  67.00 178.50 19376.00  6608.00   105.84     2.67   10.85   1.64  40.25
sdl5              7.00     0.00 104.50 191.00 14384.00  7376.00    73.64     2.13    7.22   1.38  40.90
sdf5             15.50     6.00  66.50 145.00 18272.00  5616.00   112.95   137.51  404.19   4.73 100.00 -- и здесь
...

(more…)

29.12.2013

Функциональный хинт IGNORE_ROW_ON_DUPKEY_INDEX

Filed under: hints,Oracle,PL/SQL — Игорь Усольцев @ 11:53
Tags:

По следам обсуждения необоснованного роста ASSM табличных сегментов в результате автоматической обработки исключений с использованием добавленной в 11.2 подсказки IGNORE_ROW_ON_DUPKEY_INDEXПочему занимаемый таблицей размер растет при холостых инсертах?

В версии 12.1.0.1 основная проблема была тихо исправлена (во всяком случае мне не удалось обнаружить упоминаний соотв.бага):

12.1.0.1.@ SQL> select segment_name, bytes, blocks from user_segments where segment_name like 'TIG%';

SEGMENT_NAME            BYTES     BLOCKS
-------------------- -------- ----------
TIG                  25165824       3072
TIG_PK                2097152        256

SQL> insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(tig tig_pk)*/ into tig
  2    select level, rpad('*', 200, '*') from dual connect by level <= 1e5
  3  /

0 rows created.

Elapsed: 00:00:57.78

SQL> select segment_name, bytes, blocks from user_segments where segment_name like 'TIG%';

SEGMENT_NAME            BYTES     BLOCKS
-------------------- -------- ----------
TIG                  25165824       3072
TIG_PK                2097152        256

- сегмент не растёт, однако скорость выполнения вставки с использованием такого хинта остаётся весьма невысокой по сравнению, например, с обработкой встроенного исключения DUP_VAL_ON_INDEX в PL/SQL блоке:

сравнение

Что проще всего, похоже, проверить с помощью INSTEAD OF INSERT триггера (more…)

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

Тема: Rubric Блог на WordPress.com.

Отслеживать

Get every new post delivered to your Inbox.

Join 86 other followers