In-Memory-Undo in Oracle 10g-11g

Содержание

Слайд 2

Сведения об IMU отсутствуют в:

Oracle Database 10R1g Documentation
Oracle Database 11gR1 Documentation
Oracle

Сведения об IMU отсутствуют в: Oracle Database 10R1g Documentation Oracle Database 11gR1
Database 11gR2 Documentation
MyOracleSupport

Слайд 4

Как это бывает:

Bug 9406607 Corrupt blocks in 11.2 in table with unique

Как это бывает: Bug 9406607 Corrupt blocks in 11.2 in table with
key.
Applies to: Oracle Server - Enterprise Edition - Version: 11.2.0.1 to 11.2.0.1 - Release: 11.2 to 11.2 Information in this document applies to any platform.
Description: Block corruption during recovery for a table with Primary or Unique key constraint and lots of inserts done on that table due to Bug 9406607 . The recovery can happen as part of normal STARTUP during crash recovery.
Workaround or Resolution: In order to avoid this problem set parameter _in_memory_undo = FALSE (Disable IMU). To repair the existent corruption, the table may need to be recovered from a backup or use DBMS_REPAIR to skip the affected blocks.  The redo being applied from the redo log is already corrupt meaning that regular media recovery does not fix the corruption.

Слайд 5

Bug 9406607: CORRUPT BLOCKS DURING RECOVERY. ORA-600 [KDBLKCHECKERROR] WHEN CHECKING ENABLED

Type: B

Bug 9406607: CORRUPT BLOCKS DURING RECOVERY. ORA-600 [KDBLKCHECKERROR] WHEN CHECKING ENABLED Type:
– Defect
Fixed in Product Version: 12.1
Severity1: Complete Loss of Service
Product Version: 11.2.0.1.0
Platform: IBM AIX on POWER Systems (64-bit)
Created: 24-Feb-2010
Updated: 31-Mar-2010
Affects Platforms: Generic

Слайд 6

ORA-04031
ORA-00474: SMON process terminated with error
Instance terminated by PMON, pid = 2448
startup

ORA-04031 ORA-00474: SMON process terminated with error Instance terminated by PMON, pid
open
IMODE=BR
ILAT =363
Completed: ALTER DATABASE OPEN
Doing block recovery for file 4 block 1091148
Block recovery from logseq 20655, block 22669 to scn 30108486586
Recovery of Online Redo Log: Thread 1 Group 2 Seq 20655 Reading mem 0
Mem# 0: /oradata/redo02.log
Block recovery completed at rba 20655.24427.16, scn 7.43715515
Errors in file /oradata/admin/bdump/orcl_smon_25757.trc:
ORA-00600: internal error code, arguments: [ktbair1], [4], [1], [], [], [], [], []
Errors in file /oradata/admin/bdump/orcl_pmon_25739.trc:
ORA-00474: SMON process terminated with error
PMON: terminating instance due to error 474
Instance terminated by PMON, pid = 25739

Слайд 7

IMU

В Shared Pool создается область для хранения информации отката Undo Pool по

IMU В Shared Pool создается область для хранения информации отката Undo Pool
принципу «Один пул- одна транзакция».
Место в сегменте отката резервируется, заголовок сегмента отката обновляется, но информация отката направляется в IMU pool.
Польза: транзакция выполняется быстрее.
Каждый пул защищается собственной защелкой «in memory undo»
IMU pool = 65535 bytes
IMU pool выделяются в порядке LRU
_imu_pools = 10% от TRANSACTIONS

Слайд 8

IMU
Условия для работы IMU:
compatibility >= 10.0.
undo_management= AUTO

IMU Условия для работы IMU: compatibility >= 10.0. undo_management= AUTO

Слайд 9

Преимущества IMU

Для IMU уменьшается редо. Несколько redo record записываются одной операцией I/O

Преимущества IMU Для IMU уменьшается редо. Несколько redo record записываются одной операцией
? экономия в/в. уменьшение 'redo wastage'.
Несколько обновлений одного UNDO-блока объединяются в одно изменение и записываются на диск одной операцией.
IMU находится в памяти, поэтому consistent reads выполняемые другими сессиями завершаются быстрее. ? экономия ЦПУ

Слайд 10

Особенности

ITL в блоке данных стал указывать на IMU вместо _SYSSMU
IMU enabled by

Особенности ITL в блоке данных стал указывать на IMU вместо _SYSSMU IMU
default
Starting ORACLE instance (normal)

IMODE=BR - Batched Redo Mode
ILAT =27 - Number of IMU Pools/Latches

Starting up:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

Слайд 11

Особенности (-)

IMU не работает в RAC. т.е. как только CLUSTER_DATABASE=TRUE…
Logminer can't handle

Особенности (-) IMU не работает в RAC. т.е. как только CLUSTER_DATABASE=TRUE… Logminer
all new structures in redologs yet
+ logical standby and streams
Bug 9406607 Corrupt blocks in 11.2 in table with unique key ORA-600 [kdblkcheckerror] [ID 1078406.1]

Слайд 12

8 параметров управляют IMU-ом

_in_memory_undo = TRUE|FALSE - включает/отключает IMU, def.=TRUE.
_imu_pools -

8 параметров управляют IMU-ом _in_memory_undo = TRUE|FALSE - включает/отключает IMU, def.=TRUE. _imu_pools
Кол-во IMU-пулов
PARAMETER 11.1 SESS_VALUE INST_VALUE
--------------------------- ---------- ----------
_db_writer_flush_imu TRUE TRUE
_recursive_imu_transactions FALSE FALSE
_imu_pools 3 3
PARAMETER 11.2 SESS_VALUE INST_VALUE
--------------------------- ---------- ----------
_db_writer_flush_imu TRUE TRUE
_recursive_imu_transactions FALSE FALSE
_imu_pools 3 3

Слайд 13

8 параметров управляют IMU-ом

PROCESSES - Чем больше это значение, тем больше пулов

8 параметров управляют IMU-ом PROCESSES - Чем больше это значение, тем больше
и IMU latches.
Shalahamer: 8.25 processes/one IMU latch
Haisley: 10%*Transactions
Cогласно документации:Transactions=1.1*Sessions, Sessions=1.1*Processes+5
Следовательно: PROC=300 => (1,1*1,1*300+5)/10= 368

Слайд 14

PROC TRAN ILAT Init/ILAT
11.1 300 368 36 8,3
11.2 300 519 51

PROC TRAN ILAT Init/ILAT 11.1 300 368 36 8,3 11.2 300 519
6
-------------------------------- ------
11.1 transactions 368
11.2 transactions 519
show parameter cpu
-------------------------------- ------
cpu_count 4
parallel_threads_per_cpu 2
resource_manager_cpu_allocation 4

Слайд 15

8 параметров управляют IMU-ом

_recursive_imu_transactions – Использовать IMU для рекурсивных транзакций. The default

8 параметров управляют IMU-ом _recursive_imu_transactions – Использовать IMU для рекурсивных транзакций. The
is FALSE.
_db_writer_flush_imu – «allows Oracle the freedom to artificially age a transaction for increased automatic cache management» def.=TRUE.

Слайд 16

IMU Pools

Функции для выделения/освобождения IMU в коде СУБД:
ktiImuPoolAllocate
ktiImuPoolFree
ktiNonImuPoolAllocate
ktiNonImuPoolFree
ktiNonImuPoolLatchClean
kti_disable_imu
kti_enable_imu
kti_is_imu
ktiimu_chg
ktiimu_f
ktiredo_imupoolfree
ktiundo_imupoolallocate

IMU Pools Функции для выделения/освобождения IMU в коде СУБД: ktiImuPoolAllocate ktiImuPoolFree ktiNonImuPoolAllocate

Слайд 17

IMU-пулы можно видеть через представление X$ktifp. Размер каждого пула 65535 байт:
SQL> select

IMU-пулы можно видеть через представление X$ktifp. Размер каждого пула 65535 байт: SQL> select ktifpno,ktifppsi from x$ktifp;
ktifpno,ktifppsi from x$ktifp;

Слайд 18

Транзакции

обновляется заголовок undo-сегмента
в undo-сегменте выделяется место под данный IMU-пул,
физическая запись

Транзакции обновляется заголовок undo-сегмента в undo-сегменте выделяется место под данный IMU-пул, физическая
из IMU в блок UNDO-сегмента происходит несколько позже (при наступлении commit или flush - при заполнении пула до 100%). Эта запись производится одной операцией (batch)
блоки, содержащие информацию отката X$BH.FLAG: 0x8002 (PRIVATE CURRENT)

Слайд 19

Запись на диск

Max changes exceeded (~100)
Contention flushes (write induced)
Bitmap state change flushes
Rollback

Запись на диск Max changes exceeded (~100) Contention flushes (write induced) Bitmap
flushes
Commit flushes
Multi-block undo flushes (undo > blksize)

Слайд 20

Запись на диск

KTIFFCAT KTIFFFLC
------------------------------------------ ----------
Undo pool overflow flushes 25300 <-- Переполнение undo-пула
Stack

Запись на диск KTIFFCAT KTIFFFLC ------------------------------------------ ---------- Undo pool overflow flushes 25300
cv flushes 23448
Multi-block undo flushes 0
Max. chgs flushes 10197 <-- более 100 изменений
NTP flushes 0
Contention flushes 19727 <-- Contention
Redo pool overflow flushes 385 <-- Переполнение redo-пула
Logfile space flushes 0
Multiple persistent buffer flushes 0
Bind time flushes 0
Rollback flushes 355467
Commit flushes 2105449 <-- «стандартных» commit
Recursive txn flushes 79628 <-- рекурсивные транзакции
Redo only CR flushes 174
Ditributed txn flushes 0
Set txn use rbs flushes 0
Bitmap state change flushes 69772
Presumed commit violation 0
Securefile direct-write lob update flushes 0

Слайд 21

IMU Latches

select name, gets, misses, immediate_gets IM, sleeps
from v$latch_children where name like

IMU Latches select name, gets, misses, immediate_gets IM, sleeps from v$latch_children where
'In%undo%'
Instance Parameters GETS MISSES IM SLEEPS
-------------------- ---------- ------- ----- ------
In-memory undo latch 0 0 0 0
In-memory undo latch 0 0 0 0
In-memory undo latch 7623 0 3815 0
In-memory undo latch 33806 0 17437 0
In-memory undo latch 2919 0 478 0
In-memory undo latch 21624 0 356 0

Слайд 22

IMU Locks

select * from v$lock_type where type='IM'
TYPE NAME ID1_TAG ID2_TAG IS_USER
---- ------------

IMU Locks select * from v$lock_type where type='IM' TYPE NAME ID1_TAG ID2_TAG
------- ------- -------
IM Kti blr lock pool # 0 NO
DESCRIPTION
----------------------
Serializes block recovery for an IMU txn

Слайд 23

Статистики

SQL> select name from v$statname where name like 'IMU%';
IMU commits
IMU Flushes
IMU contention
IMU

Статистики SQL> select name from v$statname where name like 'IMU%'; IMU commits
recursive-transaction flush
IMU undo retention flush
IMU ktichg flush
IMU bind flushes
IMU mbu flush
IMU pool not allocated
IMU CR rollbacks
IMU undo allocation size
IMU Redo allocation size
IMU- failed to get a private strand

Слайд 24

IMU Commits

select * from v$sysstat where name like '%commit%'
STAT# NAME CLASS VALUE

IMU Commits select * from v$sysstat where name like '%commit%' STAT# NAME
STAT_ID
----- ------------ ----- ------ ----------
5 user commits 1 120366 582481098
312 IMU commits 128 98992 1914489094

Слайд 25

Мониторинг

SQL> select * from v$sgastat where name like 'KTI%';
11.1
POOL NAME BYTES
----------- -------------------

Мониторинг SQL> select * from v$sgastat where name like 'KTI%'; 11.1 POOL
-------
shared pool KTI latch structure 5760
shared pool KTI-UNDO 2535552
shared pool KTI pool states 40
shared pool KTI latches 1152
11.2 ? KTI freelists 88

Слайд 26

Выброшенное UNDO

UNDO = DATA + REDO

Выброшенное UNDO UNDO = DATA + REDO

Слайд 27

Throw Away UNDO

О его включении оповещает нас строки в alert.log:

IMODE=TUA <- Batched

Throw Away UNDO О его включении оповещает нас строки в alert.log: … IMODE=TUA ILAT=308 …
Redo mode
ILAT=308 <- Number of IMU pools/latches

Слайд 28

Events
ORA-30047 Internal event for kti tracing
ORA-30048 Internal event for IMU autotuning

Events ORA-30047 Internal event for kti tracing ORA-30048 Internal event for IMU autotuning

Слайд 29

Производительность

Craig Shalahamer:
Benefit: около 20% ЦПУ
If you check v$sesstat, you will

Производительность Craig Shalahamer: Benefit: около 20% ЦПУ If you check v$sesstat, you
see the redo size is reduced. I did a test before, the redo size in v$sesstat of a single row update was reduced by 17% (the percentage depends on your DML).

Слайд 30

Haisley

Updates
DB CPU DB Time
IMU: 9% 19%
TAU: 19% 39%

Haisley Updates DB CPU DB Time IMU: 9% 19% TAU: 19% 39%

Слайд 31

Haisley

Redo Statistics
Entries Защелка RAL
IMU: 94% 77%
TAU: 96% 79%

Haisley Redo Statistics Entries Защелка RAL IMU: 94% 77% TAU: 96% 79%

Слайд 32

Haisley

Redo Size
Redo Size
IMU: 6,5%
TAU: 57%

Haisley Redo Size Redo Size IMU: 6,5% TAU: 57%
Имя файла: In-Memory-Undo-in-Oracle-10g-11g.pptx
Количество просмотров: 167
Количество скачиваний: 0