Você está na página 1de 243

Oracle Performance Diagnostcs & Tuning 12cR2

Em Oracie Eoterprise Editoo 12a2a0a1 (RU 12a2a0a1a180116)


Em Oracie Eoterprise Lioux 7a4 – Modo Texto
Iociui CDB Arclitecture

Ricardo Portilo Prooi


ricardo@oervioformatcaacomabr
Esta obra está iiceociada sob a iiceoça
Creatve Commoos AtribuiçooS emDerivados oa0 Brasiia
Para ver uma cópia desta iiceoça, visite ltp://creatvecommoosaorg/iiceoses/bySod/oa0/br/a
Isenção de responsabilidade
● Noo acredite em tudo o que iêa Questooe tudoa
● Por aigo estar escrito, ooo sigoifca que é verdadea
● O que é verdade aqui, pode ooo ser verdade iáa
● O que era verdade ootem, pode ooo ser verdade lojea
● O que é verdade loje, pode ooo ser verdade amaoloa
● e os fatos ooo se adequam à teoria, modifque a teoriaa
● Questooe, e só acredite em fatos: testea
● Também teote provar que você está erradoa
● Impiemeote a soiuçoo oo meoor escopo possíveia
● Quaodo você mudar aigo, pode acootecer uma de três coisasa
Comandos no Treinamento
Comando com o usuário root:
# ls -lh

Comando com um usuário oracle:


$ ls -lh

Adicionar texto a um arquivo:


$ vi initORCL.ora
...
db_cache_size=500M
...

Comando no Oracle:
SQL> SELECT STATUS FROM V$INSTANCE;

Algo deve ser alterado de acordo com sua máquina:


Hostoame: oerv01aiocaidomaio

Quando algo dá errado propositalmente:


O que aconteceu?

Todas as senhas (root, oracle, SYS, SYSTEM) são Nerv2018. 3


Linux Modo Texto
Alt + F1
Alt + F2
Alt + F3
Alt + F4
Alt + F5
Alt + F6

4
rlwrap
# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum -y install epel-release-latest-7.noarch.rpm
# yum -y install rlwrap

$ rlwrap sqlplus / AS SYSDBA


$ rlwrap rman TARGET /
$ rlwrap lsnrctl
$ rlwrap dgmgrl SYS/Nerv2018@ORCL

5
Logs
Linux
# tail -f /var/log/messages

Oracle
$ tail -f $ORACLE_BASE/diag/rdbms/<database>/<SID>/trace/alert_<SID>.log

Mantenha os Logs visíveis o tempo todo. 6


glogin.sql
$ cat $ORACLE_HOME/sqlplus/admin/glogin.sql

SET PAGESIZE 1000
SET LINESIZE 220
SET TIMING ON
SET TIME ON
SET SQLPROMPT '&_user@&_connect_identifier> '
DEFINE _EDITOR=vi

09:08:44 SYS@ORCL> SELECT 1 FROM DUAL;

1
----------
1

Elapsed: 00:00:00.00
09:09:00 SYS@ORCL>

7
CDB Architecture

8
Deprecaton of Non-CDB Architecture

Documentação 12cR1:

Documentação 12cR2:
12cR2 CDB New Features
✔ ubset taodby
✔ Data Guard Broker PDB Migratoo or Faiiover
✔ CrossSPiatorm Import of a Piuggabie Database ioto a Muitteoaot Cootaioer Database
✔ I/O Rate Limits for PDBs
✔ Heat Map aod Automatc Data Optmizatoo upport for CDBs
✔ PDB Claracter et
✔ PDB Refresl
✔ Hiots io CONTAINER Query
✔ Paraiiei PDB Creatoo Ciause
✔ PDB Arclive Fiies (apdb Fiies)
✔ Defauit Tabiespace Ciause
✔ Ciooiog a PDB
✔ Near Zero Dowotme PDB Reiocatoo
✔ Logicai taodby Database to upport CDBs witl PDBs witl Difereot Claracter ets
✔ LogMioer to upport CDBs witl PDBs witl Difereot Claracter ets
✔ upport for PDBs witl Difereot Claracter ets, Time Zooe Fiie Versioos, aod Database Time
Zooes io a CDB
✔ Memory Resource Maoagemeot
✔ PerSProcess PGA Limits
✔ Performaoce Profies aod Maodatory PDB Profies
✔ CDBSLevei PDB Lockdowo
12cR2 CDB New Features
✔ Appiicatoo Root
✔ Proxy PDB
✔ Forwardiog Coooectoos to A New Address Based oo ervice
✔ erviceSLevei ACLs for TCP Protocoi
✔ Fiaslback Piuggabie Database
✔ Upgradiog a CDB Witl Ooe or More PDBs io a iogie Operatoo
✔ upport for Tlousaods of Piuggabie Databases for Eacl Muitteoaot Cootaioer Database
✔ Piuggabie Database Lockdowo Profies Eolaocemeots
✔ Piuggabie Database Operatog ystem Credeotais
✔ Oracie Eoterprise Maoager Database Express (EM Express) Resource Maoager upport
✔ EM Express: impiifyiog Coofguratoo for Muitteoaot Tlrougl iogie Port Access
✔ EM Express: Performaoce Hub Eolaocemeots
✔ Automatc Workioad Repository (AWR) upport for a Piuggabie Database (PDB)
✔ eiectve PDB Upgrades
✔ AWR_PDB_AUTOFLU H_ENABLED Ioitaiizatoo Parameter
✔ ENABLE_AUTOMATIC_MAINTENANCE_PDB Ioitaiizatoo Parameter
✔ AUTOTA K_MAX_ACTIVE_PDB Ioitaiizatoo Parameter
✔ Giobai aod lared Coooectoo Pooi for Oracie Cioud aod Muitteoaot Oracie Databases
✔ Prioritzed Rebaiaociog
✔ Oracie Database Vauit Commoo Reaims aod Commaod Ruies for Oracie Muitteoaot
Opton Multtenant
Multtenant - EE
Singletenant - SE2
Esse banco utliza CDB Arquitecture?
Que Containers / PDBs este banco tem?
Em que Container estou conectado?
Como conectar em um PDB? SET CONTAINER
Como conectar em um PDB?
$ lsnrctl status
...
Services Summary...
Service "5397376af7702ac5e0536a00a8c0505d" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORCL" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Service "prod" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
The command completed successfully
$
Como conectar em um PDB? tnsnames.ora
$ cat $ORACLE_HOME/network/admin/tnsnames.ora
...
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = nerv06.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)

PROD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = nerv06.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PROD)
)
)

...
$
Como conectar em um PDB? tnsnames.ora
Como conectar em um PDB? Easy Connect
E agora, qual o nome da Instância? E do Banco?
E agora, qual o nome da Instância? E do Banco?
CDB e PDBs: STARTUP
CDB e PDBs: STARTUP
Alert Log
DATAFILEs
DATAFILEs
DATAFILEs
Dicionário de Dados
VIEWs
VIEWs
Parâmetros
Parâmetros
TABLESPACEs
USERs
USERs
USERs
USERs
SELECT em outros Containers
Criando (Clonando) um PDB
Criando (Clonando) um PDB
Criando (Clonando) um PDB
Criando (Clonando) um PDB
Criando (Clonando) um PDB
Unplug / Plug
Unplug / Plug
DROP
Backup
CDB e PDBs
RMAN> BACKUP DATABASE;
RMAN> BACKUP DATAFILE 1;
RMAN> BACKUP DATAFILE 1,3;

CDB
RMAN> BACKUP DATABASE ROOT;
RMAN> BACKUP TABLESPACE SYSTEM;
RMAN> BACKUP TABLESPACE SYSTEM,SYSAUX;

PDBs
RMAN> BACKUP PLUGGABLE DATABASE DEV1;
RMAN> BACKUP PLUGGABLE DATABASE DEV1,DEV2;
RMAN> BACKUP TABLESPACE DEV1:SYSTEM;
Restore / Recover
CDB e PDBs
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
RMAN> RESTORE DATAFILE 1;
RMAN> RECOVER DATAFILE 1;

CDB
RMAN> RESTORE DATABASE ROOT;
RMAN> RECOVER DATABASE ROOT;
RMAN> RESTORE TABLESPACE SYSTEM;
RMAN> RECOVER TABLESPACE SYSTEM;

PDBs
RMAN> RESTORE PLUGGABLE DATABASE DEV1;
RMAN> RECOVER PLUGGABLE DATABASE DEV1;
RMAN> RESTORE TABLESPACE DEV1:USERS;
RMAN> RECOVER TABLESPACE DEV1:USERS;
Tuning: Top Ten Mistakes
1 S Bad coooectoo maoagemeot
2 S Bad use of cursors aod tle slared pooi
o S Bad QL
4 - Use of nonstandard initalizaton parameters
5 - Getng database I/O wrong
6 - Online redo log setup problems
7 - Serializaton of data blocks in the bufer cache due to lack of free lists, free list groups,
transacton slots (INITRANS), or shortage of rollback segments.
8 - Long full table scans
9 S Higl amouots of recursive ( Y ) QL
10 - Deployment and migraton errors

Foote: Oracie Database Performaoce Tuoiog Guide


ltp://docsaoracieacom/database/122/TGDBA/performaoceSimprovemeotSmetlodsaltm 52
Minha abordagem

Performaoce de istemas Computaciooais só pode ser medida em TEMPOa

Performaoce Tuoiog deve ser reatvaa

Performaoce Tuoiog deve ter ROIa

Apeoas os maiores gargaios devem ser soiuciooadosa

O processo deve ser Diagoostcs, e depois Tuoioga

Aito coosumo de CPU ooo é um probiemaa

O usuário ooo executa um QL por prazera

O deseovoivedor ooo deveria saber como fazer um bom QL (COBOL?)a

Ferrameotas Gráfcas / Eoterprise Maoager / Wizards / Automaçoo soo boos auxiiiaresa

Baocos com bom desempeolo devem ser observadosa

Cooleça outros RDBM s: TI ooo é iugar para paixõesa

Noo acredite em oada (separar tabeias e íodices?)a Testea

e louvesse um parâmetro que sempre deixasse o Oracie mais rápido, sem oeolum efeito
coiaterai, eie já viria labiiitadoa

Deseovoiva um método de cooveocimeoto gereociaia

Por aigo clamarSse torage, ooo quer dizer que eie ooo teola probiemasa

Maoteola o priocípio KI (Keep It impie, tupid): a probabiiidade de faila cresce
iioearmeote com o aumeoto de compiexidadea

aiba dizer “Noo”a

aiba dizer “Noo sei”a
53
Tempo

54
Tempo Computacional

R=S+W

OU

Response Time = Service Time + Wait Time

55 55
Instrumentação: Mainframe

56
Instrumentação: Solaris DTrace

57
OWI - Oracle Wait Interface

58
Evolução da OWI

Versoo 7a0a12: 104 Wait Eveots

Versoo 8: 140 Wait Eveots

Versoo 8i: 220 Wait Eveots

Versoo 9i: ~400 Waits Eveots

Versoo 10gR1: ~800 Wait Eveots

Versoo 11gR2: ~1100 Wait Eveots

Versoo 12cR1: ~1650 Wait Eveots

Versoo 12cR2: ~1800 Wait Eveots

59
Wait Events mais comuns

bufer busy / read by oler sessioo / iatcl: cacle bufers claios

free bufer

cootroi fie siogie write / cootroi fie paraiiei write / cootroi fie sequeotai read

db fie siogie write / db fie paraiiei read / db fie paraiiei write / db fie asyoc I/O submit

db fie scateread read / db fie sequeotai read

direct patl read / direct patl write

eoqueue

free bufer

iatcl free / iatcl: slared pooi / iatcl: iibrary cacle

iibrary cacle pio / iibrary cacle iock

iog bufer space

iog fie paraiiei write / iog fie siogie write / iog fie sequeotai read

iog fie switcl (arcliviog oeeded)

iog fie switcl (cleckpoiot iocompiete) / iog fie switcl compietoo

iog fie syoc

QL*Net message from ciieot / QL*Net message to ciieot

QL*Net more data from ciieot / QL*Net more data to ciieot

QL*Net break/reset from ciieot / QL*Net break/reset to ciieot

60 60
Wait Class

61
Análise de Desempenho
Granularidades de análise

QL tatemeot

essioo

Iostaoce

Cenários de Análise

Há ieotdoo agoraa

Tivemos ieotdoo ootema

Ferramentas de Análise

Dyoamic Performaoce Views

Exteoded QL Trace (Eveot 10046)

tatspack / AWR

Se possível, traga relatórios AWR / Statspack.


62 62
Limitações Oracle Wait Interface

Noo é um mooitorameoto EodStoSEod

CPU / Memória / istema Operaciooai

Coerêocia

Imprecisões

Limitações - Views

Histórico

Limitações - Extended SQL Trace



Muitos dados

Aitssima graouiaridade

Desempeolo

Correiaçoo de ioformações

essões PARALLEL

essões HARED ERVER

Waits só dispooíveis em >=9iR1

uporte ofciai só em >10gR1

Limitações - AWR / Statspack



Baixa graouiaridade

Apeoas listórico
63 63
Lab 1.1: Views
Quais são as colunas importantes destas VIEWs?
→ V$SYSTEM_EVENT
→ V$SESSION_EVENT
→ V$SESSION_WAIT

64 64
Lab 1.2: VIEWs
Mantenha uma sessão aberta com o SCOTT e outra com o SYS.
$ rlwrap sqlplus SCOTT/TIGER@PROD
$ rlwrap sqlplus / AS SYSDBA

Na sessão do SYS verifque (várias vezes seguidas) a V$SESSION_WAIT.


SQL> SELECT SID, EVENT, SECONDS_IN_WAIT FROM V$SESSION_WAIT ORDER BY
SECONDS_IN_WAIT;
SQL> SELECT SID, EVENT, SECONDS_IN_WAIT FROM V$SESSION_WAIT WHERE
WAIT_CLASS != ‘Idle’ ORDER BY SECONDS_IN_WAIT;

6565
Lab 1.3: VIEWs
Na sessão do SCOTT, crie uma tabela de testes, e a duplique 9 vezes.
Enquanto os INSERTs estão sendo executados, verifque a V$SESSION_WAIT na sessão do SYS.
Anote o tempo do últmo INSERT.
SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> INSERT INTO T SELECT * FROM T;
SQL> COMMIT;

De acordo com o que você viu na V$SESSION_WAIT, qual é o problema?


Onde o tempo é gasto?

66
Lab 1.4: VIEWs
Na sessão do SYS, verifque a V$SESSION_EVENT.
SQL> SELECT SID FROM V$SESSION WHERE USERNAME = 'SCOTT';
SQL> SELECT EVENT, TIME_WAITED FROM V$SESSION_EVENT WHERE SID = 279
ORDER BY TIME_WAITED;
De acordo com o que você viu na V$SESSION_EVENT, qual é o problema?
Onde o tempo é gasto?

Reconecte a sessão do SCOTT, e crie uma cópia da tabela de testes.


Contnue observando a V$SESSION_WAIT e V$SESSION_EVENT na sessão do SYS.
Anote o tempo do CREATE TABLE.
SQL> CONN SCOTT/TIGER@PROD
SQL> CREATE TABLE X AS SELECT * FROM T;

67
Lab 1.5: VIEWs
Na sessão do SYS, adicione 10 Redo Logs de 1GB cada.
$ mkdir -p /u01/app/oracle/FRA
SQL> ALTER SYSTEM SET db_recovery_file_dest_size=100G;
SQL> ALTER SYSTEM SET db_recovery_file_dest='/u01/app/oracle/FRA/';
SQL> ALTER DATABASE ADD LOGFILE SIZE 1G;
SQL> ALTER DATABASE ADD LOGFILE SIZE 1G;
...

Reconecte a sessão do SCOTT, e execute novamente os testes.


SQL> CONN SCOTT/TIGER@PROD
SQL> DROP TABLE T;
SQL> CREATE TABLE T AS SELECT * FROM ALL_OBJECTS;
SQL> INSERT INTO T SELECT * FROM T;
...
SQL> COMMIT;
SQL> CONN SCOTT/TIGER@PROD
SQL> DROP TABLE X;
SQL> CREATE TABLE X AS SELECT * FROM T;

Na sessão do SYS, enquanto os testes estão sendo executados, verifque a


V$SESSION_WAIT e a V$SESSION_EVENT.
O tempo melhorou? Os Eventos são os mesmos?

68
Lab 1.6: VIEWs
Na sessão do SYS, enquanto os INSERTs estão sendo executados, verifque os Eventos também
pelas formas a seguir.
SQL> @PorQueOBancoEstaLento_01.sql
SQL> @PorQueOBancoEstaLento_02.sql
SQL> @PorQueOBancoEstaLento_03.sql
SQL> @PorQueOBancoEstavaLento_01.sql

$ chmod +x /home/oracle/oratop.RDBMS_12.1_LINUX_X64
$ /home/oracle/oratop.RDBMS_12.1_LINUX_X64 -f -i2 / AS SYSDBA
No oratop, aperte a tecla h, verifque e teste as opções.

69 69
Arquitetura

70
Sistema Operacional

71
top
Se Load Average = Cores = 100%
Se Load Average > Cores =
Se Load Average < Cores =

72
vmstat

73
iostat

74
Linux: Outras Ferramentas

75 75
Huge Pages / Large Pages

Configuring HugePages for Oracle on Linux (x86-64)


https://oracle-base.com/articles/linux/configuring-huge-pages-for-oracle-on-linux-64 76
Swappiness

Deploying Oracle Database 12c on Red Hat Enterprise Linux 7 Best Practces
ltps://accessaredlatacom/oode/1282o0o/40/0 77
ASYNC / Direct I/O

78
I/O Scheduler

79
Arquitetura Oracle

80 80
Confguração de Memória

SGA Manual e PGA Manual (< 9i)


db_cacle_size = 10G
slared_pooi_size = 2G
iarge_pooi_size = 128M
java_pooi_size = 128M
streams_pooi_size = 128M
sort_area_size = 1M / sort_area_retaioed_size = 1M / lasl_area_size = 1M /
bitmap_merge_area_size = 1M / create_bitmap_area_size = 1M

SGA Manual e PGA Automátca (>= 9i)


sga_max_size = 15G
db_cacle_size = 10G
slared_pooi_size = 2G
iarge_pooi_size = 128M
java_pooi_size = 128M
streams_pooi_size = 128M
pga_aggregate_target = 1G 81
Confguração de Memória
Automátco – ASMM (Automatc Segment Memory Management) (>= 10g)
sga_max_size = 15G
sga_target = 15G
pga_aggregate_target = 1G
pga_aggregate_iimit = 2G (>= 12c)

Semi-automátco – ASMM (Automatc Segment Memory Management) (>= 10g)


sga_max_size = 15G
sga_target = 15G
db_cacle_size = 10G
pga_aggregate_target = 1G
pga_aggregate_iimit = 2G (>= 12c)

Automátco – AMM (Automatc Memory Management) (>= 11g)


memory_max_target = 16G
memory_target = 16G
sga_target = 0
pga_aggregate_target = 0
pga_aggregate_iimit = 2G (>= 12c)

82 82
Confguração de Memória
db_biock_size = 8192

db_2k_cacle_size = 128M
db_4k_cacle_size = 128M
db_8k_cacle_size = 128M
db_16k_cacle_size = 128M
db_o2k_cacle_size = 128M

db_keep_cacle_size = 128M (< 10g: bufer_pooi_keep)


db_recycie_cacle_size = 128M (<10g: bufer_pooi_recycie)
slared_pooi_reserved_size = 128M

resuit_cacle_mode = MANUAL
resuit_cacle_max_size = 10M
resuit_cacle_max_resuit = 5

db_fie_muitbiock_read_couot = 128

iog_bufer = 8o88608

fast_start_mtr_target = 0

83 83
Compression

10g OLAP

11g OLTP

12c InMemory

84
Extended SQL Trace

85 85
Extended SQL Trace: Atvação
Minha sessão:
SQL> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12';
SQL> ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT OFF';

Outra sessão:
SQL> SELECT P.SPID, P.TRACEFILE
FROM V$SESSION S, V$PROCESS P
WHERE S.PADDR = P.ADDR AND S.USERNAME = 'SCOTT';
SQL> oradebug setospid 9999;
SQL> oradebug tracefile_name;
SQL> oradebug unlimit;
SQL> oradebug event 10046 trace name context forever, level 12;

86
Extended SQL Trace: Atvação
CREATE OR REPLACE TRIGGER SET_TRACE AFTER LOGON ON DATABASE
BEGIN
IF USER IN ('SCOTT') THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET TRACEFILE_IDENTIFIER=''SESSAO_RASTREADA_PORTILHO''';
EXECUTE IMMEDIATE 'ALTER SESSION SET TIMED_STATISTICS=TRUE';
EXECUTE IMMEDIATE 'ALTER SESSION SET MAX_DUMP_FILE_SIZE=UNLIMITED';
EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''10046 TRACE NAME CONTEXT FOREVER, LEVEL 12''';
END IF;
END;
/

87
Extended SQL Trace: tkprof

88
Lab 2.1: Extended SQL Trace
Feche e abra a sessão com o SCOTT com SET TIMING ON
SQL> EXIT
$ rlwrap sqlplus SCOTT/TIGER@PROD
SQL> SET TIMING ON

Com o usuário SYS, habilite o Extended Trace para a sessão do SCOTT:


SQL> SELECT P.SPID FROM V$SESSION S, V$PROCESS P WHERE S.PADDR =
P.ADDR AND S.USERNAME = 'SCOTT';
SQL> oradebug setospid 8708;
SQL> oradebug tracefile_name;
SQL> oradebug unlimit;
SQL> oradebug event 10046 trace name context forever, level 12;

Em outro terminal, verifque o conteúdo do Trace.


$ tail -f /u01/app/oracle/diag/rdbms/orcl/ORCL/trace/ORCL_ora_8708.trc

89 89
Lab 2.2: Extended SQL Trace
Com o usuário SCOTT, apague o conteúdo da grande tabela, altere o valor do parâmetro
db_fle_multblock_read_count (apenas na sessão) e reinsira os dados.
SQL> TRUNCATE TABLE X;
SQL> INSERT INTO X SELECT * FROM T;
SQL> COMMIT;

Contnue verifcando o conteúdo do Trace durante a execução da operação.


Anote o tempo do INSERT.

Repita a operação, mas com db_fle_multblock_read_count de 8, 50 e 1000.


SQL> ALTER SESSION SET db_file_multiblock_read_count = 8;
SQL> TRUNCATE TABLE X;
SQL> INSERT INTO X SELECT * FROM T;
SQL> COMMIT;

Remova os REDO LOGs de 1G, e execute novamente os testes com o parâmetro


db_fle_multblock_read_count em 8, 50 e 1000.

Execute o tkprof nos Trace gerado.


$ tkprof /u01/app/oracle/diag/rdbms/orcl/ORCL/trace/ORCL_ora_8708.trc

Analise o relatório gerado pelo tkprof.


90 90
Lendas do Oracle

91 91
RAM x SGA
Não utilizarás mais que 50% de tua RAM para a SGA.
[ricardo@Melquior ~]$ free
total used free shared buffers cached
Mem: 3719480 3262932 456548 797828 6308 1094712
-/+ buffers/cache: 2161912 1557568
Swap: 16777212 764576 16012636

[ricardo@Melquior ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 443G 325G 96G 78% /
tmpfs 1.8G 2.3M 1.8G 1% /dev/shm
[ricardo@Melquior ~]$

RAM Total do Servidor


S (quaotdade máxima de cooexões simuitâoeas + 40) x 2MB
S Memória do istema Operaciooai
= (OLTP) 80% GA e 20% PGA OU
= (OLAP) 80% PGA e 20% GA

92 92
SWAP
Terás uma área de SWAP com o dobro de tua RAM.

93 93
Checkpoint
Teus DATAFILEs deverão ter no máximo 2GB / 10GB / xGB.
Eventos relacionados

cootroi fie siogie write

cootroi fie paraiiei write

cootroi fie sequeotai read

db fie siogie write

Checkpoints:

Fuii Cleckpoiot

Tlread Cleckpoiot

Fiie Cleckpoiot

Object Cleckpoiot

Paraiiei Cleckpoiot

Iocremeotai Cleckpoiot

Cleckpoiot Log witcl

94 94
UNDO

Deverás executar COMMIT a cada N linhas.


Qual a transação mais longa que o sistema deve suportar?
UNDO_RETENTION
CREATE UNDO TABLESPACE … RETENTION GUARANTEE
AUTOEXTEND ON

95 95
Lendas do Oracle

Todo teu ELECT deverá utiizar um íodice, para que eie seja rápidoa

Utiizarás HINTs, pois tu és mais sábio que o Oraciea

e coietar estatstcas em 100%, os piaoos de execuçoo seroo perfeitosa

Noo coietarás estatstcas do diciooário de dadosa

Deverás separar teus dados e íodicesa

Deverás separar teus dados em diversas TABLE PACEsa

Noo labiiitarás AUTOEXTEND ONa

Utiizarás RAID 5, pois é mais rápido para ieiturasa

Coiocar os Redo Logs em D (ODA?)a

Noo permitrás mais que um WITCH a cada 20 mioutosa

Mas ooo terás graodes REDO LOGsa

Executarás REBUILD de íodices reguiarmeotea

Executarás MOVE de tabeias reguiarmeotea

e graode a tabeia toroarSse, a partciooarása

e quiseres mais veiocidade, usarás RACa

Quaoto mais CPUs, mais rápido teu baoco de dados seráa

e teus RATIO estverem aitos, feiizes estaroo teus usuáriosa

empre que possívei, aumeotarás seu DB_CACHE_ IZE e HARED_POOLa

e os dados estoo oa memória, tudo será rápidoa

O Exadata resoive todos os probiemas de desempeoloa

Desabiiitarás o AWR / TAT PACK, pois eie causa ieotdooa

Noo utiizarás memória automátcaa Tu és mais sábio que o Oraciea

e usar, deixarás a GA_TARGET um pouco meoor que a GA_MAX_ IZEa

AUTOMATIC QL TUNING é um dos cavaieiros do apocaiipsea
96 96
Lab 3.1: LGWR x DBWR
Feche e abra a sessão com o SCOTT com SET TIMING ON
SQL> CONN SCOTT/TIGER@PROD
SQL> SET TIMING ON

Com o usuário SCOTT, apague o conteúdo da grande tabela, e reinsira os dados.


SQL> TRUNCATE TABLE X;
SQL> INSERT INTO X SELECT * FROM T;
SQL> COMMIT;

Ao término da execução, verifque os valores de V$SESSION_EVENT da sessão do SCOTT.


Guarde o resultado.

Altere o valor do parâmetro log_bufer para 512k, repita a operação, e compare.


Altere o valor do parâmetro log_bufer para 10m, repita a operação, e compare.
Altere o valor do parâmetro log_bufer para 100m, repita a operação, e compare.

97
Wait Events - Detalhes

98 98
Referência

99 99
Performance Tuning Guide

100 100
Performance Tuning Guide

101 101
MOS

102 102
OWI: Fontes de Consulta
Oracle Database Reference (explicação simples, direta)
ltp://docsaoracieacom/database/121/REFRN/waiteveots00oaltmBBGGIBDJI

Oracle Database Performance Tuning Guide (explicação melhor, orientada a causas / soluções)
ltp://docsaoracieacom/database/121/TGDBA/pfgrf_iostaoce_tuoealtmBTGDBA94497

MOS / My Oracle Support / Metalink (várias notas sobre Wait Events específcos)
ltps://supportaoracieacom/

Livro "Oracle Wait Interface"


ltp://wwwaamazooacom/OracieSWaitSIoterfaceSPerformaoceSDiagoostcs/dp/007222729X

103 103
bufer busy
Explicação: O bioco soiicitado está em uso, pois outra sessoo está carregaodo o bioco
para o DB_CACHE_ IZE, ou outra sessoo está utiizaodo o bioco oo DB_CACHE_ IZE em
um modo iocompatveia
Causa: DB_CACHE_ IZE iosufcieote, ou QL ioefcieotea
Correção: Aumeote o DB_CACHE_ IZE ou aitere o QLa

P1: Número do DATAFILEa


P2: Número do biocoa
P3: ID – a soiicitaçoo vem de difereotes iocais da sessooa

104 104
read by other session
Explicação: O bioco soiicitado está em uso, pois outra sessoo está carregaodo o bioco
para o DB_CACHE_ IZE, ou outra sessoo está utiizaodo o bioco oo DB_CACHE_ IZE em
um modo iocompatveia
Causa: DB_CACHE_ IZE iosufcieote, ou QL ioefcieotea
Correção: Aumeote o DB_CACHE_ IZE ou aitere o QLa

P1: Número do DATAFILEa


P2: Número do biocoa
P3: Razoo (<10g)a
P3: Wait Ciass (>=10g)a

105 105
free bufer
Explicação: O RDBM aguarda biocos de DB_CACHE_ IZE iivresa
Causa: DB_CACHE_ IZE iosufcieotea
Correção: Aumeote o DB_CACHE_ IZEa

P1: Número do DATAFILEa


P2: Número do biocoa

106 106
control fle single write / control fle parallel write
Explicação: Espera de I/O para gravar em CONTROLFILEsa
Causa: Excesso de gravaçoo oos CONTROLFILEs ou I/O ioefcieotea
Correção: Mioimize as gravações oos CONTROLFILEs ou meilore o mecaoismo de I/Oa

P1: Quotdade de CONTROLFILEsa


P2: Quaotdade de biocosa
P3: Quaotdade de soiicitações de I/Oa

107 107
control fle sequental read
Explicação: Espera de I/O para ier os CONTROLFILEsa
Causa: Excesso de ieitura oos CONTROLFILEs ou I/O ioefcieotea
Correção: Mioimize as ieituras oos CONTROLFILEs ou meilore o mecaoismo de I/Oa

P1: Número do CONTROLFILEa


P2: Número do biocoa
P3: Quaotdade de biocosa

108 108
db fle parallel write / db fle async I/O submit
Explicação: Gravações de dados oos DATAFILEs esperam peio I/Oa
Causa: Excesso de gravações ou ieotdoo de I/Oa
Correção: Mioimize as gravações ou meilore o mecaoismo de I/Oa

P1: Quaotdade de requisiçõesa


P2: Ioterrupta
P3: Timeouta

109 109
db file single write
Explicação: Uma gravaçoo oo HEADER do DATAFILE espera peio I/Oa
Causa: Excesso de gravações oo HEADER dos DATAFILEs ou ieotdoo de I/Oa
Correção: Mioimize as gravações oo HEADER dos DATAFILEs ou meilore o mecaoismo de
I/Oa

P1: Quaotdade de requisiçõesa


P2: Ioterrupta
P3: Timeouta

110 110
db fle parallel read
Explicação: Duraote RECOVER ou duraote PREFETCHING, ieituras de DATAFILEs esperam
peio I/Oa
Causa: RECOVER muito ioogo, PREFETCHING excessivo, ou ieotdoo de I/Oa
Correção: Aceiere o RECOVER, mioimize o PREFETCHING, ou meilore o mecaoismo de I/
Oa

P1: Quaotdade de DATAFILEsa


P2: Quaotdade de biocosa
P3: Quaotdade de requisiçõesa

111 111
User I/O

112 112
MBRC: scateread / sequental
Em “db fle scateread read” ocorre “db fle sequental read” quando:
S O bioco já está oo cacle;
S O bioco está oo foai do Exteot;
S Excede o iimite do sistema operaciooai;
S UNDOa

113
db fle scatered read
Explicação: Duraote FT , ieituras de DATAFILEs esperam peio I/Oa
Causa: DB_CACHE_ IZE iosufcieote, FT desoecessário ou ieotdoo de I/O
Correção: Aumeote o DB_CACHE_ IZE, eiimioe o FT , ou meilore o mecaoismo de I/Oa

P1: Número do DATAFILEa


P2: Bioco ioiciaia
P3: Quaotdade de biocosa

114 114
db fle sequental read
Explicação: Duraote a ieitura de um bioco, ieituras de DATAFILEs esperam peio
mecaoismo de I/Oa
Causa: DB_CACHE_ IZE iosufcieote, ieitura desoecessária ou ieotdoo de I/O
Correção: Aumeote o DB_CACHE_ IZE, eiimioe a ieitura desoecessária, ou meilore o
mecaoismo de I/Oa

P1: Número do DATAFILEa


P2: Bioco ioiciaia
P3: Quaotdade de biocosa

115 115
direct path read [temp] / direct path write [temp]
Explicação: Leitura / gravaçoo eotre DATAFILEs / TEMPFILEs e PGAa
Causa: PGA iosufcieote, ou ieotdoo de I/Oa
Correção: Aumeote a PGA, ou meilore o mecaoismo de I/Oa

P1: Número do arquivo (DATAFILE ou TEMPFILE)a


P2: Bioco ioiciaia
P3: Quaotdade de biocosa

116 116
enqueue
Explicação: Mecaoismo de fia ordeoada do RDBM a
Causa: Diversas, depeodeodo do tpo de fiaa
Correção: Diversas, depeodeodo do tpo de fiaa

P1: Tipo ou modo da eoqueuea


P2: ID1 (como oa V$LOCK)a
P3: ID2 (como oa V$LOCK)a

Problemas mais comuns:



TX, Traosactoo (80%)

TM, DML Eoqueue (10%)

HW, HiglSWater Lock (1%)

Q, equeoce Number Eoqueue (1%)

CF, Cootroifie Traosactoo (0a1%)

117 117
latch free
Explicação: Mecaoismo de fia desordeoada do RDBM a
Causa: Diversas, depeodeodo do tpo de fiaa
Correção: Diversas, depeodeodo do tpo de fiaa

P1: Eodereço da Latcl (como oa V$LATCH)a


P2: Número da Latcl (como oa V$LATCH)a
P3: Quaotdade de teotatvasa

Problemas mais comuns:



slared pooi (40%)

iibrary cacle (40%)

cacle bufers iru claio (5%)

cacle bufers claios (5%)

row cacle objects (1%)

118 118
library cache pin / library cache lock
Explicação: Uso iocompatvei do objeto eotre duas sessõesa
Causa: Uso do objeto de forma iocompatvei eotre duas sessõesa
Correção: Fioaiizar o uso do objeto por uma das sessõesa

P1: Eodereço do objetoa


P2: Eodereço do ioad iocka
P3: Mode + Namespacea

QL> ELECT /*+ ORDERED */ W1a ID WAITING_ E ION, H1a ID HOLDING_ E ION, WaKGLLKTYPE
LOCK_OR_PIN, WaKGLLKHDL ADDRE , DECODE(HaKGLLKMOD,0,’Nooe’,1,’Nuii’,2,’ lare’,o,’Exciusive’,'Uokoowo’)
MODE_HELD, DECODE(WaKGLLKREQ,0,’Nooe’,1,’Nuii’,2,’ lare’,o,’Exciusive’,'Uokoowo’) MODE_REQUE TED FROM
DBA_KGLLOCK W, DBA_KGLLOCK H, V$ E ION W1, V$ E ION H1 WHERE (((HaKGLLKMOD != 0) AND
(HaKGLLKMOD != 1) AND ((HaKGLLKREQ = 0) OR (HaKGLLKREQ = 1))) AND (((WaKGLLKMOD = 0) OR (WaKGLLKMOD=
1)) AND ((WaKGLLKREQ != 0) AND (WaKGLLKREQ != 1)))) AND WaKGLLKTYPE = HaKGLLKTYPE AND WaKGLLKHDL =
HaKGLLKHDL AND WaKGLLKU E = W1a ADDR AND HaKGLLKU E = H1a ADDR;

QL> ELECT TO_NAME FROM V$OBJECT_DEPENDENCY WHERE TO_ADDRE = ‘0700000010F62750';

119 119
log bufer space
Explicação: Mais espaço oo LOG_BUFFER é oecessário para gravaçõesa
Causa: LOG_BUFFER iosufcieote, REDO LOGs iosufcieotes, ou I/O ieotoa
Correção: Aumeote o LOG_BUFFER, aumeote a quaotdade / tamaolo de REDO LOGs, ou
meilore o mecaoismo de I/Oa

P1: Quaotdade de REDO LOGsa


P2: Quaotdade de biocos do sistema operaciooaia
P3: Quaotdade de requisições de I/Oa

120 120
log fle parallel write
Explicação: Duraote gravaçoo de REDO LOGs, o LGWR espera peio I/Oa
Causa: Excesso de membros oos grupos de REDO LOGs ou ieotdoo de I/Oa
Correção: Reduza a quaotdade de membros oos grupos de REDO LOGs ou meilore o
mecaoismo de I/Oa

P1: Quaotdade de REDO LOGsa


P2: Quaotdade de biocos de sistema operaciooaia
P3: Quaotdade de requisições de I/Oa

121 121
log fle single write
Explicação: Duraote gravaçoo oo HEADER de um REDO LOGs, o LGWR espera peio I/Oa
Causa: Excesso de gravações oo HEADER do REDO LOG ou ieotdoo de I/Oa
Correção: Reduza a quaotdade de gravações oo HEADER do REDO LOG ou meilore o
mecaoismo de I/Oa

P1: Número do REDO LOGa


P2: Número do biocoa
P3: Quaotdade de biocosa

122 122
log fle sequental read
Explicação: Duraote ieitura de REDO LOGs, o LGWR espera peio I/Oa
Causa: Leotdoo de I/Oa
Correção: Meilore o mecaoismo de I/Oa

P1: Número do REDO LOGa


P2: Número do biocoa
P3: Quaotdade de biocosa

123 123
log fle switch
Explicação: Todos os grupos de REDO LOGs foram utiizados e aioda soo oecessários para
um eveotuai RECOVER, pois o ARCo aioda ooo criou os ARCHIVED REDO LOGs e o DBWR
aioda ooo gravou seu cooteúdo oos DATAFILEsa
Causa: REDO LOGs subSdimeosiooados, coofguraçoo ioadequada de destoo de
ARCHIVED REDO LOGs ou I/O ioefcieotea
Correção: Aumeotar os REDO LOGs em quaotdade e/ou tamaolo, corrigir a
coofguraçoo de destoo do ARCo, ou meilorar o mecaoismo de I/Oa

P1: Noo utiizadoa


P2: Noo utiizadoa
P3: Noo utiizadoa

Variações:

iog fie switcl compietoo

iog fie switcl (cleckpoiot iocompiete)

iog fie switcl (private straod fusl iocompiete)

iog fie switcl (arcliviog oeeded)

iog fie switcl (cieariog iog fie)

124 124
log fle sync
Explicação: Um CHECKPOINT foi executado, e precisa ser registrado oo REDO LOG, e o
LGRW está aguardaodo peio mecaoismo de I/Oa
Causa: COMMIT em quaotdade excessiva, ou I/O ioefcieotea
Correção: Reduzir a quaotdade de COMMITs ou otmizar o mecaoismo de I/Oa

P1: Número do Log Bufera


P2: Noo utiizadoa
P3: Noo utiizadoa

125 125
SQL*Net message to / from client
Explicação: Espera duraote comuoicaçoo via rede com o protocoio QL*Neta
Causa: essoo ioatva, iatêocia de rede ou iimitaçoo do ciieotea
Correção: Eiimioar a sessoo ioatva, mioimizar a iatêocia oa rede ou mioimizar a iimitaçoo do ciieotea

P1: Driver de redea


P2: Quaotdade de bytesa
P3: Noo utiizadoa

Variações

QL*Net message from ciieot

QL*Net message to ciieot

QL*Net more data from ciieot

QL*Net more data to ciieot

QL*Net break/reset to ciieot

QL*Net message from dbiiok

QL*Net message to dbiiok

QL*Net more data from dbiiok

QL*Net more data to dbiiok

QL*Net break/reset to dbiiok

126 126
Lab 4.1: Infuenciando SQLs
Com o usuário SCOTT, crie um índice BTREE na coluna OWNER da tabela T:
SQL> CREATE INDEX IDX_T ON T(OWNER);

Com o usuário SCOTT, execute este SQL, e anote o tempo.


SQL> SELECT COUNT(*) FROM T T_ALIAS WHERE OBJECT_NAME = 'T';
Qual Wait Event este SELECT causou?

Com o usuário SCOTT, execute este SQL, e anote o tempo.


SQL> SELECT /*+ INDEX(T_ALIAS,IDX_T) */ COUNT(*) FROM T T_ALIAS WHERE OBJECT_NAME = 'T';
Qual Wait Event este SELECT causou?

127 127
Lab 4.2: Infuenciando SQLs
Execute o SQL_TUNE do SQL sem HINT.
SQL> CONN / AS SYSDBA
SQL> SELECT SQL_ID, SQL_TEXT FROM V$SQL WHERE SQL_TEXT LIKE ‘%T_ALIAS%’;
SQL> DECLARE RET_VAL VARCHAR2(4000);
BEGIN
RET_VAL := DBMS_SQLTUNE.CREATE_TUNING_TASK(SQL_ID => 'cgj6kacnv0d5h', SCOPE
=> DBMS_SQLTUNE.SCOPE_COMPREHENSIVE, TIME_LIMIT => 60, TASK_NAME => 'Portilho
Tuning Task', DESCRIPTION => 'Portilho Tuning Task');
END;
/

SQL> EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK('Portilho Tuning Task');

SQL> SET LONG 9000


SQL> SPOOL TuningTask.txt
SQL> SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK('Portilho Tuning Task') FROM DUAL;
SQL> SELECT DBMS_SQLTUNE.SCRIPT_TUNING_TASK('Portilho Tuning Task') FROM DUAL;

Remova o SQL_TUNE executado, após executar a correção.


SQL> EXEC DBMS_SQLTUNE.DROP_TUNING_TASK('Portilho Tuning Task');

128
Lab 4.3: Infuenciando SQLs
Execute este SQL e anote seu tempo de execução:
SQL> SELECT COUNT(*) FROM T T_ALIAS WHERE OBJECT_NAME = 'T';

Execute este SQL e anote seu tempo de execução:


SQL> SELECT /*+ INDEX(T_ALIAS,IDX_T) */ COUNT(*) FROM T T_ALIAS
WHERE OBJECT_NAME = 'T';

Com o usuário SYS, dê as permissões necessárias para que o usuário SCOTT utlize o
DBMS_ADVANCED_REWRITE:
$ sqlplus / AS SYSDBA
SQL> GRANT EXECUTE ON DBMS_ADVANCED_REWRITE TO SCOTT;
SQL> GRANT CREATE MATERIALIZED VIEW TO SCOTT;

129 129
Lab 4.4: Infuenciando SQLs
Na sessão do usuário SCOTT, execute o DBMS_ADVANCE_REWRITE:
BEGIN
SYS.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE(
NAME=>'PORTILHO_REWRITE',
SOURCE_STMT=>'SELECT /*+ INDEX(T_ALIAS,IDX_T) */ COUNT(*) FROM T T_ALIAS WHERE OBJECT_NAME = ''T''',
DESTINATION_STMT => 'SELECT COUNT(OBJECT_NAME) FROM T T_ALIAS WHERE OBJECT_NAME = ''T''',
VALIDATE=>FALSE,
REWRITE_MODE=>'TEXT_MATCH');
END;
/

Execute novamente este SELECT e verifque seu tempo de execução:


SQL> SELECT /*+ INDEX(T_ALIAS,IDX_T) */ COUNT(*) FROM T T_ALIAS WHERE OBJECT_NAME = 'T';

130 130
Paralelismo
Permite Query, DML e DDL.

Quantos processos de paralelismo utlizar?

Um objeto pode ter Parallel permanente, independente do SQL:


SQL> ALTER TABLE SCOTT.T PARALLEL 4;

Uma sessão pode ter Parallel permanente, independente do SQL:


SQL> ALTER SESSION FORCE PARALLEL QUERY PARALLEL 5;
SQL> ALTER SESSION FORCE PARALLEL DML PARALLEL 5;
SQL> ALTER SESSION FORCE PARALLEL DDL PARALLEL 5;

O Parallel SQL pode ser utlizado diretamente no SQL:


SQL> SELECT /*+ PARALLEL(T2 4) */ COUNT(*) FROM T2;
SQL> SELECT /*+ PARALLEL(T2 4,2) */ COUNT(*) FROM T2;

131
Paralelismo
Parâmetros:
PARALLEL_MIN_ ERVER = Número eotre 0 e PARALLEL_MAX_ ERVER a
PARALLEL_MAX_ ERVER = De 0 a o600a
PARALLEL_MIN_PERCENT = De 0 a 100a

PARALLEL_DEGREE_POLICY = MANUAL, LIMITED ou AUTOa


PARALLEL_MIN_TIME_THRE HOLD = AUTO | eguodosa
PARALLEL_ADAPTIVE_MULTI_U ER = true ou faisea
PARALLEL_DEGREE_LIMIT = CPU, IO ou Númeroa
PARALLEL_ ERVER _TARGET = Número eotre 0 e PARALLEL_MAX_ ERVER a
PARALLEL_THREAD _PER_CPU = Quaiquer oúmeroa

PARALLEL_EXECUTION_ME AGE_ IZE = De 2148 a o2768


PARALLEL_FORCE_LOCAL = true ou falsea
PARALLEL_IN TANCE_GROUP = Oracie RAC service_oame ou group_oamea

PARALLEL_AUTOMATIC_TUNING: Deprecated.
PARALLEL_IO_CAP_ENABLED = Deprecated.

132
Lab 4.5: Infuenciando SQLs
Com o usuário SCOTT, comare estes SQLs.
SQL> SELECT COUNT(*) FROM X;
SQL> +SELECT /*+ PARALLEL(X 4) */ COUNT(*) FROM X;
SQL> SELECT /*+ PARALLEL(X 20) */ COUNT(*) FROM X;
SQL> SELECT /*+ PARALLEL(X 40) */ COUNT(*) FROM X;

Qual a diferença de Wait Events das execuções?

133
Paralelismo
SQL> SELECT SID, SERIAL#, QCSID, QCSERIAL# FROM V$PX_SESSION;

SID SERIAL# QCSID QCSERIAL#


---------- ---------- ---------- ----------
202 5249 12 387
20 3587 12 387
75 4043 12 387
141 233 12 387
204 751 12 387
16 229 12 387
73 3279 12 387
137 403 12 387
203 1137 12 387
18 103 12 387
79 5 12 387
134 3431 12 387
206 5 12 387
19 5 12 387
76 31 12 387
140 5 12 387
12 387 12

134
Estatstcas

135
Estatstcas e SQL Engine
Optmizer Statstcs
Tabie statstcs
Number of rows
Number of biocks
Average row ieogtl
Coiumo statstcs
Number of distoct vaiues (NDV) io coiumo
Number of ouiis io coiumo
Data distributoo (listogram)
Exteoded statstcs
Iodex statstcs
Number of ieaf biocks
Average data biocks per Key
Leveis
Iodex ciusteriog factor

System Statstcs
I/O performaoce aod utiizatoo
CPU performaoce aod utiizatoo

136
Estatstcas - Tabela
DBA_TABLES / ALL_TABLES / USER_TABLES
SELECT TABLE_NAME, NUM_ROWS, BLOCKS, EMPTY_BLOCKS, AVG_SPACE,
CHAIN_CNT, AVG_ROW_LEN, SAMPLE_SIZE, LAST_ANALYZED FROM USER_TABLES
ORDER BY 1;

137
Estatstcas - Índices
DBA_INDEXES / ALL_INDEXES / USER_INDEXES
SELECT TABLE_NAME, INDEX_NAME, NUM_ROWS, BLEVEL, LEAF_BLOCKS,
DISTINCT_KEYS, CLUSTERING_FACTOR, AVG_LEAF_BLOCKS_PER_KEY,
AVG_DATA_BLOCKS_PER_KEY, SAMPLE_SIZE, LAST_ANALYZED FROM
USER_INDEXES ORDER BY 1,2;

138
Estatstcas - Colunas
DBA_TAB_COLUMNS / ALL_TAB_COLUMNS / USER_TAB_COLUMNS
SELECT TABLE_NAME, COLUMN_NAME, NUM_DISTINCT, NUM_NULLS, DENSITY,
LOW_VALUE, HIGH_VALUE, DATA_LENGTH, AVG_COL_LEN, SAMPLE_SIZE,
LAST_ANALYZED FROM USER_TAB_COLUMNS ORDER BY 1,2;

139
Coleta de Estatstcas - ANALYZE
ANALYZE TABLE emp VALIDATE STRUCTURE;
ANALYZE TABLE emp VALIDATE STRUCTURE CASCADE;
ANALYZE TABLE emp VALIDATE STRUCTURE CASCADE FAST;
ANALYZE TABLE emp VALIDATE STRUCTURE CASCADE ONLINE;

UTLCHAIN.SQL / UTLCHN1.SQL
ANALYZE TABLE emp LIST CHAINED ROWS INTO CHAINED_ROWS;

140
Quando coletar? Coleta automátca
Quando coletar? Coleta automátca
Quando coletar? Coleta automátca
Quando coletar? OPTIMIZER_DYNAMIC_SAMPLING
Nível 0 = Noo lá coietaa
Nível 1 = Coieta o2 biocosa
e lá peio meoos 1 tabeia partciooada oo QL sem estatstcasa
e esta tabeia ooo tem íodicesa
e esta tabeia tem mais que 64 biocosa
Nível 2 = Coieta 64 biocosa
Coieta se lá peio meoos uma tabeia do QL sem estatstcasa
Nível 3 = Coieta 64 biocosa
Coieta se o Nívei 2 é ateodido OU se é utiizada expressoo oo WHEREa
Nível 4 = Coieta 64 biocosa
Coieta se o oívei o é ateodido OU se o QL utiiza AND ou OR eotre múitpios predicadosa
Nível 5 = Coieta 128 biocosa
Coieta se o oívei 4 é ateodidoa
Nível 6 = Coieta 256 biocosa
Coieta se o oívei 4 é ateodidoa
Nível 7 = Coieta 512 biocosa
Coieta se o oívei 4 é ateodidoa
Nível 8 = Coieta 1024 biocosa
Coieta se o oívei 4 é ateodidoa
Nível 9 = Coieta 4086 biocosa
Coieta se o oívei 4 é ateodidoa
Nível 10 = Coieta todos os biocosa
Coieta se o oívei 4 é ateodidoa
Nível 11 (Adaptve Dynamic Sampling: >= 11.2.0.4) = Coieta ? Biocosa Coieta quaodo?
Coleta de Estatstcas
Verifque os planos de execução dos SQL abaixo.
SQL> CONN SCOTT/TIGER
SQL> SET AUTOTRACE ON EXPLAIN
SQL> SELECT COUNT(OBJECT_NAME) FROM T WHERE OBJECT_TYPE = 'SYNONYM';
SQL> SELECT COUNT(OBJECT_NAME) FROM T WHERE OBJECT_TYPE = 'PACKAGE';
SQL> SELECT COUNT(OBJECT_NAME) FROM T WHERE OBJECT_TYPE = 'DIRECTORY';

Remova as estatstcas e verifque novamente os planos de execução.


SQL> EXEC DBMS_STATS.DELETE_TABLE_STATS('SCOTT','T');

Desabilite as estatstcas dinâmicas, e verifque novamente os planos de execução.


SQL> ALTER SESSION SET OPTIMIZER_DYNAMIC_SAMPLING=0;

Colete as estatstcas com os parâmetros padrão, e verifque novamente os planos de execução.


SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','T');

145
Estatstcas: Coleta Manual
Coleta de todos os objetos.
SQL> EXEC DBMS_STATS.GATHER_DATABASE_STATS;
SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SOE');
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SOE','CUSTOMERS');
SQL> EXEC DBMS_STATS.GATHER_INDEX_STATS('SOE','CUSTOMERS_PK');

Coleta apenas de objetos EMPTY e STALE.


SQL> EXEC DBMS_STATS.GATHER_DATABASE_STATS(OPTIONS=>'GATHER EMPTY');
SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SOE',OPTIONS=>'GATHER EMPTY');

SQL> EXEC DBMS_STATS.GATHER_DATABASE_STATS(OPTIONS=>'GATHER STALE');


SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SOE',OPTIONS=>'GATHER STALE');

146 146
Como coletar? Opções
ESTIMATE_PERCENT
DBMS_STATS.AUTO_SAMPLE_SIZE / N

BLOCK_SAMPLE
FALSE / TRUE

DEGREE
NULL / N

GRANULARITY
AUTO / ALL / DEFAULT / GLOBAL / GLOBAL AND PARTITION / PARTITION / UBPARTITION

CASCADE
DBM _ TAT aAUTO_CA CADE / TRUE / FAL E

OPTIONS
GATHER / GATHER AUTO / GATHER STALE / GATHER EMPTY

GATHER_SYS
TRUE / FALSE

NO_INVALIDATE
DBM _ TAT aAUTO_INVALIDATE / TRUE / FALSE
Estatstcas - Histogramas
DBA_TAB_COLUMNS / ALL_TAB_COLUMNS / USER_TAB_COLUMNS
DBA_TAB_HISTOGRAMS / ALL_TAB_HISTOGRAMS / USER_TAB_HISTOGRAMS
SELECT H.TABLE_NAME, H.COLUMN_NAME, C.HISTOGRAM, H.ENDPOINT_NUMBER,
H.ENDPOINT_ACTUAL_VALUE, H.ENDPOINT_REPEAT_COUNT FROM
USER_TAB_HISTOGRAMS H, USER_TAB_COLUMNS C WHERE H.TABLE_NAME =
C.TABLE_NAME AND H.COLUMN_NAME = C.COLUMN_NAME AND HISTOGRAM <>
'NONE' AND TABLE_NAME = ‘T’ ORDER BY 1,2,4;

148
Como coletar? Histogramas
METHOD_OPT
FOR ALL COLUMNS SIZE AUTO
FOR ALL [INDEXED | HIDDEN] COLUMN IZE [N | REPEAT | AUTO | KEWONLY]
FOR COLUMN column IZE [N | REPEAT | AUTO | KEWONLY]

Exemplos:
FOR ALL COLUMN SIZE 1
FOR ALL COLUMN IZE 100
FOR ALL COLUMN IZE AUTO
FOR ALL COLUMN IZE REPEAT
FOR ALL COLUMN IZE KEWONLY
FOR ALL INDEXED COLUMN SIZE 1
FOR ALL INDEXED COLUMN IZE 100
FOR ALL INDEXED COLUMN IZE AUTO
FOR ALL INDEXED COLUMN IZE REPEAT
FOR ALL INDEXED COLUMN IZE KEWONLY
FOR COLUMN C1 SIZE 1
FOR COLUMN C1 IZE 100
FOR COLUMN C1 IZE AUTO
FOR COLUMN C1 IZE REPEAT
FOR COLUMN C1 IZE KEWONLY
Coleta de Estatstcas
Verifque os planos de execução dos SQL abaixo.
SQL> SELECT COUNT(OBJECT_TYPE), OBJECT_TYPE FROM T GROUP BY OBJECT_TYPE
ORDER BY 1;
SQL> CREATE INDEX IND_T ON T(OBJECT_TYPE);
SQL> SET AUTOTRACE ON EXPLAIN
SQL> SELECT COUNT(OBJECT_NAME) FROM T WHERE OBJECT_TYPE = 'SYNONYM';
SQL> SELECT COUNT(OBJECT_NAME) FROM T WHERE OBJECT_TYPE = 'PACKAGE';
SQL> SELECT COUNT(OBJECT_NAME) FROM T WHERE OBJECT_TYPE = 'DIRECTORY';

Remova as estatstcas e verifque novamente os planos de execução.


SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','T', METHOD_OPT=>’FOR
COLUMNS OBJECT_TYPE SIZE AUTO’);

Remova as estatstcas e verifque novamente os planos de execução.


SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','T', METHOD_OPT=>’FOR
COLUMNS OBJECT_TYPE SIZE 10’);

Remova as estatstcas e verifque novamente os planos de execução.


SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','T', METHOD_OPT=>’FOR
COLUMNS OBJECT_TYPE SIZE 5’);

150
Frequency Histograms
Utlizados se:
S e o NDV é meoor ou iguai que a quaotdade de Buckets iodicados oa coieta;
- É utlizado AUTO_SAMPLE_SIZE na execução da coleta.

151
Height Balanced Histograms
Utlizados se:
S e o oúmero de Buckets iodicados oa coieta é meoor que o NDVa

152
Top Frequency Histograms (12c)
Utlizados se:
S e o NDV é maior que a quaotdade de Buckets iodicados oa coieta;
S É utiizado AUTO_ AMPLE_ IZE oa execuçoo da coieta;
S e o perceotuai de iiolas ocupadas peios Top Vaiues é iguai ou maior que p, seodo que p = (1S
(1/Buckets))*100a

153
Hybrid Histograms (12c)
Utlizados se:
S e o oúmero de Buckets iodicados oa coieta é meoor que o NDV;
S É utiizado AUTO_ AMPLE_ IZE oa execuçoo da coieta;
S e os critétos para Top Frequeocy Histograms ooo se apiicama

154
Histogramas
S Buckets: máximo de 254 / 127 (2048 oo 12c);
S Frequeocy Histograms;
S HeigltSBaiaoced Histograms;
S Top Frequeocy Histograms (12c);
S Hybrid Histograms (12c)a

Problemas:
S Tabeias que ooo precisam de Histogramas;
S Custo de coieta;
S eosibiiidade a coieta por AMPLE;
S eosibiiidade a momeoto da coieta (Novos pedidos às 22:00?);
S Biod Variabies (pré AC );
S Frequeocy: e um vaior ooo está em um Bucket, será coosiderada metade da cardioaiidade do
vaior meoos popuiar;
S HeigltSBaiaoced: e um vaior ooo é popuiar (só está em 1 Bucket), será coosiderada a
cardioaiidade = oúmero de iiolas ooo popuiares / oúmero de vaior ooo popuiares (11gR2)a

htp:////docs.oracle.com//datab.ase//121//TGSLL//tgsql_histo.htm
155
Como coletar?
Controle de Opções
QL> EXEC DBM _ TAT a ET_DATABASE_PREF ('DEGREE','2');
QL> EXEC DBM _ TAT a ET_SCHEMA_PREF (' OE','CA CADE','TRUE');
QL> EXEC DBM _ TAT a ET_TABLE_PREF (' OE','CU TOMER ',' TALE_PERCENT',5);

CA CADE
DEGREE
E TIMATE_PERCENT
GRANULARITY
INCREMENTAL
INCREMENTAL_LEVEL
INCREMENTAL_ TALENE
METHOD_OPT
NO_INVALIDATE
PUBLI H
TALE_PERCENT
TABLE_CACHED_BLOCK
OPTION
Como coletar?
Coleta geral
EXEC DBMS_STATS.GATHER_DATABASE_STATS
(ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SIZE,
BLOCK_SAMPLE=>FALSE,
DEGREE=>8,
GRANULARITY=>'AUTO',
CASCADE=>TRUE,
OPTIONS=>'GATHER STALE',
GATHER_SYS=>FALSE,
NO_INVALIDATE=>FALSE,
METHOD_OPT=>'FOR ALL COLUMNS SIZE SKEWONLY');
Como coletar?
Coleta por exceção
EXEC DBMS_STATS.UNLOCK_TABLE_STATS('SCOTT','EMP');

EXEC DBMS_STATS.GATHER_TABLE_STATS
('SCOTT', 'EMP',
ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SIZE,
BLOCK_SAMPLE=>FALSE,
DEGREE=>16,
GRANULARITY=>'PARTITION',
CASCADE=>TRUE,
OPTIONS=>'GATHER',
NO_INVALIDATE=>FALSE,
METHOD_OPT=>'FOR COLUMNS EMPNO SIZE REPEAT');

EXEC DBMS_STATS.LOCK_TABLE_STATS('SCOTT','EMP');
Como coletar? Coleta de exceção
HINT /*+ GATHER_PLAN_ TATI TIC */
Parâmetro TATI TIC _LEVEL = ALL
Como coletar? Coleta de exceção

QLT (MO 215187a1)


oratop (MO 1500864a1)
Outras estatstcas
Fixed Objects Statstcs (V$SQL, V$SESSION, etc.)
SQL> EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

Dictonary Statstcs (DBA_SEGMENTS, DBA_TABLES, etc.);


SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

System Statstcs (CPU e I/O)


SQL> EXEC DBMS_STATS.GATHER_SYSTEM_STATS;

OU

SQL> EXEC DBMS_STATS.GATHER_SYSTEM_STATS('START');


...
SQL> EXEC DBMS_STATS.GATHER_SYSTEM_STATS('STOP');

OU

SQL> EXEC DBMS_STATS.GATHER_SYSTEM_STATS('EXADATA');


System Statstcs
Verifque e guarde os planos de execução do capítulo de JOINs.

Colete as estatstcas de sistema durante uma carga, e verifque sua alteração.


SQL> SELECT * FROM SYS.AUX_STATS$;
SQL> EXEC DBMS_STATS.GATHER_SYSTEM_STATS('START');

$ unzip -q swingbench261046.zip
$ cd /home/oracle/swingbench/bin/
$ ./charbench -uc 10 -cs //nerv01/PROD -c ../configs/SOE_Server_Side_V2.xml

...

SQL> SELECT * FROM SYS.AUX_STATS$;


SQL> EXEC DBMS_STATS.GATHER_SYSTEM_STATS('STOP');
SQL> SELECT * FROM SYS.AUX_STATS$;

162
Extended Statstcs – Column Groups e Expression
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS( 'SH','CUSTOMERS',
METHOD_OPT=>'FOR ALL COLUMNS SIZE SKEWONLY ' || 'FOR COLUMNS SIZE
SKEWONLY (CUST_STATE_PROVINCE,COUNTRY_ID)');

SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SH','CUSTOMERS'


,METHOD_OPT => 'FOR ALL COLUMNS SIZE SKEWONLY FOR COLUMNS
(LOWER(CUST_STATE_PROVINCE)) SIZE SKEWONLY');

163 163
Estatstcas Pendentes

164
Estatstcas Pendentes
Colete estatstcas, e verifque-as antes de publica-las.
SQL> CONN SH/SH
SQL> EXEC DBMS_STATS.SET_TABLE_PREFS
('SH','CUSTOMERS','PUBLISH','FALSE');
SQL> SELECT * FROM USER_TAB_PENDING_STATS;
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SH','CUSTOMERS');
SQL> SELECT * FROM USER_TAB_PENDING_STATS;
SQL> EXEC DBMS_STATS.PUBLISH_PENDING_STATS('SH','CUSTOMERS');
SQL> SELECT * FROM USER_TAB_PENDING_STATS;

SQL> EXEC DBMS_STATS.SET_TABLE_PREFS ('SH','SALES','PUBLISH','FALSE');


SQL> SELECT * FROM USER_TAB_PENDING_STATS;
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SH','SALES');
SQL> SELECT * FROM USER_TAB_PENDING_STATS;
SQL> EXEC DBMS_STATS.DELETE_PENDING_STATS('SH','SALES');
SQL> SELECT * FROM USER_TAB_PENDING_STATS;

165
Restore de Estatstcas

166
Restore de Estatstcas
Execute o Restore de uma estatstca anterior.
SQL> COL TABLE_NAME FORMAT A10
SELECT TABLE_NAME, TO_CHAR(STATS_UPDATE_TIME,'YYYY-MM-DD:HH24:MI:SS') AS
STATS_MOD_TIME
FROM DBA_TAB_STATS_HISTORY
WHERE TABLE_NAME='T'
AND OWNER='SCOTT'
ORDER BY STATS_UPDATE_TIME DESC;

SQL> EXEC DBMS_STATS.RESTORE_TABLE_STATS('SCOTT','T',TO_TIMESTAMP('2018-


03-11 05:01:47','YYYY-MM-DD HH24:MI:SS'), NO_INVALIDATE=>FALSE);

167
Transporte de Estatstcas

168
Transporte de Estatstcas
Origem
EXEC DBMS_STATS.CREATE_STAT_TABLE (ownname => 'HR', stattab =>
TESTE_STATS'));

EXEC DBMS_STATS.GATHER_SCHEMA_STATS ('HR');


BEGIN DBMS_STATS.EXPORT_SCHEMA_STATS (ownname => 'HR', stattab =>
'TESTE_STATS';

$ expdp HR/HR DIRECTORY=dump_directory DUMPFILE=TESTE_STATS.dmp


TABLES=TESTE_STATS

Destno:
$ impdp HR/HR DIRECTORY=dump_directory DUMPFILE=TESTE_STATS.dmp
TABLES=TESTE_STATS

SQL> EXEC DBMS_STATS.IMPORT_SCHEMA_STATS(ownname => 'HR', stattab =>


'TESTE_STATS');

169
Fragmentação

170 170
Fragmentação

Biocos iogicameote cootguos espailados fsicameotea

Espaço iivre oa TABLE PACE / DATAFILEsa

Espaço iivre da TABELAa

Espaço iivre oo ÍNDICEa

Row Claioioga

Migrated Rowsa

EXTENTsa

171 171
Fragmentação: SHRINK

ALTER TABLESPACE ... COALESCE

ALTER TABLE ... ENABLE ROW MOVEMENT

ALTER TABLE ... SHRINK SPACE COMPACT

ALTER TABLE ... SHRINK SPACE

ALTER TABLE ... MOVE

172 172
Fragmentação: Row Chaining

Wlat’s tle Difereoce betweeo Row Migratoo aod Row Claioiog?


ltps://aotogoioiacl/2016/10/wlatsStleSdifereoceSbetweeoSrowSmigratooSaodSrowSclaioiog/
173 173
Fragmentação: Row Migraton

174 174
Lab 5.1: Fragmentação
$ sqlplus SCOTT/TIGER@PROD
SQL> SET AUTOTRACE OFF
SQL> @IndexesToRebuild-UPDATEs.sql
SQL> UPDATE T1 SET OBJECT_TYPE = 'NO';
SQL> COMMIT;
SQL> @IndexesToRebuild-UPDATEs.sql
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT', 'T1');
SQL> @IndexesToRebuild-UPDATEs.sql
SQL> ALTER TABLE T1 MOVE;
SQL> ALTER INDEX T1_IDX1 REBUILD;
SQL> @IndexesToRebuild-UPDATEs.sql

175 175
Lab 5.2: Fragmentação
$ sqlplus SCOTT/TIGER@PROD
CREATE TABLE X1 TABLESPACE USERS AS SELECT * FROM ALL_OBJECTS;
INSERT INTO X1 SELECT * FROM X1;
INSERT INTO X1 SELECT * FROM X1;
INSERT INTO X1 SELECT * FROM X1;
INSERT INTO X1 SELECT * FROM X1;
COMMIT;
CREATE TABLE X2 TABLESPACE USERS AS SELECT * FROM X1;
CREATE TABLE X3 TABLESPACE USERS AS SELECT * FROM X1;
CREATE TABLE X4 TABLESPACE USERS AS SELECT * FROM X1;
CREATE INDEX X1_IDX ON X1(OBJECT_NAME) TABLESPACE USERS;
CREATE INDEX X2_IDX ON X2(OBJECT_NAME) TABLESPACE USERS;
CREATE INDEX X3_IDX ON X3(OBJECT_NAME) TABLESPACE USERS;
CREATE INDEX X4_IDX ON X4(OBJECT_NAME) TABLESPACE USERS;

DELETE FROM X2 WHERE OBJECT_TYPE = 'SYNONYM';


COMMIT;

UPDATE X3 SET OBJECT_NAME = 'A' WHERE OBJECT_TYPE = 'SYNONYM';


UPDATE X3 SET OWNER = 'A' WHERE OBJECT_TYPE = 'SYNONYM';
UPDATE X3 SET OBJECT_TYPE = 'A' WHERE OBJECT_TYPE = 'SYNONYM';
COMMIT;

176 176
Lab 5.3: Fragmentação
UPDATE X4 SET OBJECT_NAME =
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' WHERE OBJECT_TYPE = 'SYNONYM';

UPDATE X4 SET SUBOBJECT_NAME =


'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' WHERE OBJECT_TYPE = 'SYNONYM';

UPDATE X4 SET OWNER =


'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' WHERE OBJECT_TYPE = 'SYNONYM';

UPDATE X4 SET EDITION_NAME =


'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' WHERE OBJECT_TYPE = 'SYNONYM';

UPDATE X4 SET DEFAULT_COLLATION =


'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA' WHERE OBJECT_TYPE = 'SYNONYM';

COMMIT;

177 177
Lab 5.4: Fragmentação
$ rlwrap sqlplus / AS SYSDBA
SQL> ALTER SESSION SET CONTAINER = PROD;
SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');
SQL> @OracleBaseAdvisor.sql TABLESPACE USERS NULL

178 178
Limitação de Recursos

179 179
Instance Caging

11.2.0.1: CPU_COUNT

12.1.0.1: PROCESSOR_GROUP_NAME

180 180
Resource Plan
Separação de Recursos por:

ORACLE_USER

SERVICE_NAME

CLIENT_OS_USER

CLIENT_PROGRAM

CLIENT_MACHINE

MODULE_NAME

MODULE_NAME_ACTION

SERVICE_MODULE

SERVICE_MODULE_ACTION

Controle dos Recursos:



CPU

essões Atvas

Paraieiismo

I/O (>= 11gR1)

181 181
Lab 6.1 – Resource Plan
Analise o código do arquivo ResourcePlan.sql:

Usuário OE: OLTP, deve ter muita prioridade duraote o dia, e pouca duraote a ooitea

Usuário COTT: ADSHOC, só pode utiizar CPU que oeolum dos usuários acima estver utiizaodoa

Outros: OTHER _GROUP, só podem utiizar CPU que oeolum dos usuários acima estver utiizaodoa

Execute a criação do Resource Plan, e o habilite.


SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'PEAKTIME';

Conecte com o usuário SCOTT, e verifque se ele está no Consumer Group correto.
SQL> SELECT USERNAME, RESOURCE_CONSUMER_GROUP FROM V$SESSION WHERE
USERNAME IS NOT NULL;

O que está errado?

182
182
Relatório AWR

183 183
AWR != Relatório AWR

184
Evolução do Statspack / AWR

185
Evolução do (BSTAT - ESTAT) / Statspack / AWR

186
Custo do AWR

187
Custo do AWR
Parâmetro CONTROL_MANAGEMENT_PACK_ACCESS
NONE
DIAGNO TIC (AWR, ADDM, etca)
DIAGNO TIC+TUNING ( QL Tuoiog Advisor, QLAccess Advisor, etc) DEFAULT

A license for DIAGNOSTIC is required for enab.ling the TUNING pack.

188
Custo do AWR

ltp://wwwaoracieacom/us/corporate/priciog/priceSiists/iodexaltmi 189
Statspack

190
Statspack
Instalação
$ sqlplus / AS SYSDBA
– - Em 12c com CDB, execute: alter session set "_oracle_script"=true;
SQL> @?/rdbms/admin/spcreate.sql
Enter value for perfstat_password: Nerv2018
Enter value for default_tablespace: SYSAUX
Enter value for temporary_tablespace: TEMP

Desinstalação
$ sqlplus / AS SYSDBA
SQL> @?/rdbms/admin/spdrop.sql

191
Statspack
Job de Coleta de Snapshots
$ sqlplus PERFSTAT/Nerv2018
SQL> @?/rdbms/admin/spauto.sql

Ajuste de nível de coleta


$ sqlplus PERFSTAT/Nerv2018
SQL> SELECT SNAP_LEVEL, DESCRIPTION FROM STATS$LEVEL_DESCRIPTION ORDER
BY SNAP_LEVEL;
SQL> EXECUTE STATSPACK.MODIFY_STATSPACK_PARAMETER(i_snap_level => 7);

Snapshots avulsos
$ sqlplus PERFSTAT/Nerv2018
SQL> EXECUTE STATSPACK.SNAP;

192
Statspack
Remoção de Snapshots
$ sqlplus PERFSTAT/Nerv2018
SQL> @?/rdbms/admin/sppurge.sql
Enter value for losnapid: 3
Enter value for hisnapid: 4

Automação de Remoção de Snapshots


column min_snap_id new_val LoSnapId
column max_snap_id new_val HiSnapId
select min(s.snap_id) min_snap_id, max(s.snap_id) max_snap_id
from stats$snapshot s
, stats$database_instance di
where s.dbid = :dbid
and di.dbid = :dbid
and s.instance_number = :inst_num
and di.instance_number = :inst_num
and di.startup_time = s.startup_time
and s.snap_time < sysdate-30;

--
-- Post warning

193
Statspack
Extração do Relatório Statspack
$ sqlplus PERFSTAT/Nerv2018
SQL> @?/rdbms/admin/spreport.sql
Enter value for begin_snap: 3
Enter value for end_snap: 4
Enter value for report_name: Teste01
$ vi Teste01.lst

Extração do Relatório Statspack – SQL


STATS$SQL_PLAN / STATS$SQL_PLAN_USAGE
$ sqlplus PERFSTAT/Nerv2018
SQL> @?/rdbms/admin/sprepsql.sql
Enter value for begin_snap: 3
Enter value for end_snap: 4
Enter value for hash_value: 532522188
Enter value for report_name: SQL01
$ vi SQL01.lst

194
Gerenciamento do AWR

195
Gerenciamento do AWR
Parâmetro CONTROL_MANAGEMENT_PACK_ACCESS
NONE
DIAGNO TIC (AWR, ADDM, etca)
DIAGNO TIC+TUNING ( QL Tuoiog Advisor, QLAccess Advisor, etc) DEFAULT

Parâmetro TIMED_STATISTICS
true DEFAULT
faise

Parâmetro STATISTICS_LEVEL
BA IC
TYPICAL DEFAULT
ALL

196
Gerenciamento do AWR
Parâmetro STATISTICS_LEVEL = TYPICAL

Automatc Workioad Repository (AWR) oapslots

Automatc Database Diagoostc Mooitor (ADDM)

Aii serverSgeoerated aierts

Automatc GA Memory Maoagemeot

Automatc optmizer statstcs coiiectoo

Object ievei statstcs

Eod to Eod Appiicatoo Traciog (V$CLIENT_ TAT )

Database tme distributoo statstcs (V$ E _TIME_MODEL aod V$ Y _TIME_MODEL)

ervice ievei statstcs

Bufer cacle advisory

MTTR advisory

lared pooi siziog advisory

egmeot ievei statstcs

PGA Target advisory

Timed statstcs

Mooitoriog of statstcs

Parâmetro STATISTICS_LEVEL = ALL



Timed statstcs

Timed O statstcs

Piao executoo statstcs

197
Gerenciamento do AWR
Snapshot avulso
$ sqlplus / AS SYSDBA
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;

Alteração de intervalo de coleta e retenção


$ sqlplus / AS SYSDBA
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS
(RETENTION=>86400,
INTERVAL=>30,
TOPNSQL=>100);

198
Gerenciamento do AWR
Criação de Baseline
$ sqlplus / AS SYSDBA
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(
START_SNAP_ID => 2600,
END_SNAP_ID => 2680,
BASELINE_NAME => 'BEFORE MIGRATION',
EXPIRATION => 365);

Remoção de Baseline
$ sqlplus / AS SYSDBA
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE
(BASELINE_NAME => 'BEFORE MIGRATION',
CASCADE => FALSE);

199
Gerenciamento do AWR
Automatc Workload Repository Views
DBA_HI T_WR_CONTROL
DBA_HI T_ NAP HOT
DBA_HI T_DATABA E_IN TANCE
DBA_HI T_DB_CACHE_ADVICE
DBA_HI T_DYN_REMA TER_ TAT
DBA_HI T_IO TAT_DETAIL
DBA_HI T_ QL_PLAN

DBA_HI T_ACTIVE_ E _HI TORY


V$ACTIVE_ E ION_HI TORY

DBA_HI T_DI PATCH


DBA_HI T_ HARED_ ERVER_ UMMARY

DBA_HI T_BA ELINE


DBA_HI T_BA ELINE_DETAIL
DBA_HI T_BA ELINE_TEMPLATE

200
Scripts AWR

201
Scripts AWR
AWR Report
@?/rdbms/admin/awrrpt.sql
Enter value for report_type: html
Enter value for num_days: 1
Enter value for begin_snap: 40
Enter value for end_snap: 41
Enter value for report_name: AWR_01.html

AWR Report (Specifc Database Instance)


@$ORACLE_HOME/rdbms/admin/awrrpti.sql

Oracle RAC AWR Report


@$ORACLE_HOME/rdbms/admin/awrgrpt.sql

Oracle RAC AWR Report (Specifc Database Instance)


@$ORACLE_HOME/rdbms/admin/awrgrpti.sql

202
Scripts AWR
AWR Informaton
@?/rdbms/admin/awrinfo.sql
Enter value for report_name: awrinfo.txt

Extractng AWR Data


@?/rdbms/admin/awrextr.sql
Enter value for dbid: 1442122872
Enter value for num_days: 7
Enter value for begin_snap: 2622
Enter value for end_snap: 2780
Enter value for directory_name: DATA_PUMP_DIR
Enter value for file_name: awrdat_2622_2780

Loading AWR Data


@?/rdbms/admin/awrload.sql
Informe o valor para directory_name: BACKUP
Informe o valor para file_name: awrdat_2622_2780
Informe o valor para schema_name: C##AWR_STAGE
Informe o valor para default_tablespace: SYSAUX
Informe o valor para temporary_tablespace: TEMP

203
AWR Informaton

204
AWR Warehouse

205
Oracle RAC AWR Report

206
Scripts AWR
AWR Compare Periods Report
@$ORACLE_HOME/rdbms/admin/awrddrpt.sql
Enter value for report_type: html
Enter value for num_days: 2
Enter value for begin_snap: 33
Enter value for end_snap: 34
Enter value for num_days2: 1
Enter value for begin_snap2:
Enter value for end_snap2: 56
Enter value for report_name: AWR_DIFF_01.html

AWR Compare Periods Report (Specifc Database Instance)


@$ORACLE_HOME/rdbms/admin/awrddrpi.sql

Oracle RAC AWR Compare Periods Report


@$ORACLE_HOME/rdbms/admin/awrgdrpt.sql

Oracle RAC AWR Compare Periods Report (Specifc Database Instance)


@$ORACLE_HOME/rdbms/admin/awrgdrpi.sql

207
AWR Compare Periods Report

208
Scripts AWR
SQL Statement
@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
Enter value for report_type: html
Enter value for num_days: 1
Enter value for begin_snap: 40
Enter value for end_snap: 41
Enter value for sql_id: 062savj8zgzut
Enter value for report_name: AWR_SQL_01.html

SQL Statement (Specifc Database Instance)


@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql

209
SQL Statement

210
SQL Statement
DISPLAY AWR
SQL> SELECT SQL_ID, SQL_TEXT FROM DBA_HIST_SQLTEXT
WHERE SQL_TEXT LIKE '%SELECT ENAME FROM EMP%';
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('a10jnjwd22gs8'));

TOP N SQL
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS
(RETENTION=>86400,
INTERVAL=>30,
TOPNSQL=>100);

Colored SQL
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.ADD_COLORED_SQL('az9p3ctumhpr8');
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.REMOVE_COLORED_SQL('az9p3ctumhpr8');

211
Scripts AWR
Automatc Database Diagnostc Monitor (ADDM)
SQL> @$ORACLE_HOME/rdbms/admin/addmrpt.sql
Enter value for begin_snap: 51
Enter value for end_snap: 52
Enter value for report_name: ADDM_01.txt

212
ADDM

213
Scripts AWR
Actve Session History Reports
@$ORACLE_HOME/rdbms/admin/ashrpt.sql
Enter value for report_type: html
Enter value for begin_time: -30
Enter value for duration: 10
Enter value for report_name: ASH_01.html

Oracle RAC Actve Session History Reports


@$ORACLE_HOME/rdbms/admin/ashrpti.sql

214
Scripts AWR
Actve Session History Reports (Specifc Database Instance)
@$ORACLE_HOME/rdbms/admin/ashrpti.sql
Enter value for report_type: html
Enter value for dbid: 1383175475
Enter value for inst_num: 1
Enter value for begin_time:
Enter value for begin_time: -30
Enter value for duration: 10
Enter value for slot_width: 30
Enter value for target_session_id:
Enter value for target_sql_id:
Enter value for target_wait_class:
Enter value for target_service_hash:
Enter value for target_module_name:
Enter value for target_action_name:
Enter value for target_client_id:
Enter value for target_plsql_entry:
Enter value for target_container:
Enter value for report_name: ASH_SID666_01.html

215
ASH Report

216
ASH Report

217
Método de Tuning com AWR

218
Método de Tuning com AWR
Passo 0: Ver o que o AWR não vê.
Identfcar os detalhes da infraestrutura do amb.iente fora do escopo da instância.

Passo 1: Defnir Escopo (ADDM → AWR → ASH → SQL).


Utlizar o menor escopo possível, de acordo com o prob.lema informado pelo cliente.

Passo 2: Analisar Cabeçalho.


Conhecer o amb.iente (Passo 0) e o escopo (Passo 1) analisado. A partr do tempo analisado,
defne-se a gravidade do tempo afetado. Utlizar as estatstcas de carga em caso de
comparação de períodos ou amb.ientes.

Passo 3: Analisar Time Model.


Defnir a efciência do amb.iente, e se é necess rio Tuning de Instância // Banco ou não.

219
Método de Tuning com AWR
Passo 4: Identfcar Wait Events agressores
Defnir os Wait Events relevantes, agressores do tempo penalizador da efciência (Passo 3),
analisando em conjunto de tpo (Foreground e Background), agrupando por causa.

Passo 5: Analisar Acessórios dos Wait Events


De acordo com os Wait Events relevantes defnidos (Passo 4), encontrar nas seções acessórias
do relatório as causas associadas, levando em conta o escopo de tempo analisado (Passo 2).

Passo 6: Analisar Parâmetros


Identfcar agravantes, atenuantes e oportunidades dos parâmetros relacionadas aos Wait
Events agressores (Passo 4).

Passo 7: Defnir correções e ganhos.


De acordo com o tempo identfcado dos Wait Events relevantes (Passo 4) e as soluções
encontradas e possíveis (Passo 5), levando em conta os parâmetros (Passo 6) e amb.iente
(Passo 0) defnir o tempo ganho, e portanto o ROI do cliente.

220
Seções do AWR

221
Seções do AWR: Cabeçalho
Passo 2: Analisar Cabeçalho.
Conhecer o amb.iente (Passo 0) e o escopo (Passo 1) analisado. A partr do tempo analisado,
defne-se a gravidade do tempo afetado. Utlizar as estatstcas de carga em caso de comparação
de períodos ou amb.ientes.

Elapsed Time * Cores = 100%


Se DB Time > (Elapsed Time * Cores) =
Se DB Time < (Elapsed Time * Cores) =

222
Seções do AWR: Cabeçalho
Elapsed Time * Cores = 100%
Se DB Time > (Elapsed Time * Cores) =
Se DB Time < (Elapsed Time * Cores) =

223
Seções do AWR: Efciência
Passo 3: Analisar Time Model.
Defnir a efciência do amb.iente, e se é necess rio Tuning de Instância // Banco ou não.

224
Seções do AWR: Carga
Passo 2: Analisar Cabeçalho.
Conhecer o amb.iente e o escopo analisado. A partr do intervalo analisado, defne-se a gravidade
do tempo afetado. Utlizar as estatstcas de carga em caso de comparação de períodos.

225
Seções do AWR: Carga
Passo 2: Analisar Cabeçalho.
Conhecer o amb.iente e o escopo analisado. A partr do intervalo analisado, defne-se a gravidade
do tempo afetado. Utlizar as estatstcas de carga em caso de comparação de períodos.

226
Seções do AWR: Wait Events
Passo 4: Identfcar Wait Events agressores
Defnir os Wait Events relevantes, agressores do tempo penalizador da efciência (Passo 3),
analisando em conjunto de tpo (Foreground e Background), agrupando por causa.

227
Seções do AWR: Wait Events
Passo 4: Identfcar Wait Events agressores
Defnir os Wait Events relevantes, agressores do tempo penalizador da efciência (Passo 3),
analisando em conjunto de tpo (Foreground e Background), agrupando por causa.

228
Seções do AWR: Seções Acessórias
Passo 5: Analisar Acessórios dos Wait Events
De acordo com os Wait Events relevantes defnidos (Passo 4), encontrar nas seções
acessórias do relatório as causas associadas, levando em conta o escopo de tempo
analisado (Passo 2).

229
Seções do AWR: Seções Acessórias
Passo 5: Analisar Acessórios dos Wait Events
De acordo com os Wait Events relevantes defnidos (Passo 4), encontrar nas seções
acessórias do relatório as causas associadas, levando em conta o escopo de tempo
analisado (Passo 2).

230
Seções do AWR: Parâmetros
Passo 6: Analisar Parâmetros
Identfcar agravantes, atenuantes e oportunidades dos parâmetros relacionados aos Wait
Events agressores (Passo 4).

231
Cálculo do ROI
Passo 7: Defnir correções e ganhos.
De acordo com o tempo identfcado dos Wait Events relevantes (Passo 4) e as soluções
encontradas e possíveis (Passo 5), levando em conta os parâmetros (Passo 6) e amb.iente (Passo
0) defnir o tempo ganho, e portanto o ROI do cliente.

232
Cálculo do ROI
Passo 7: Defnir correções e ganhos.
De acordo com o tempo identfcado dos Wait Events relevantes (Passo 4) e as
soluções encontradas e possíveis (Passo 5), levando em conta os parâmetros
(Passo 6) e amb.iente (Passo 0) defnir o tempo ganho, e portanto o ROI do cliente.

233
Cálculo do ROI
Passo 7: Defnir correções e ganhos.
De acordo com o tempo identfcado dos Wait Events relevantes (Passo 4) e as soluções
encontradas e possíveis (Passo 5), levando em conta os parâmetros (Passo 6) e amb.iente (Passo
0) defnir o tempo ganho, e portanto o ROI do cliente.

234
Cálculo do ROI
Passo 7: Defnir correções e ganhos.
De acordo com o tempo identfcado dos Wait Events relevantes (Passo 4) e as soluções
encontradas e possíveis (Passo 5), levando em conta os parâmetros (Passo 6) e amb.iente (Passo
0) defnir o tempo ganho, e portanto o ROI do cliente.

235
Wait Events – Causas e Correções

236
Wait Events: Causas similares
Leitura
db fie scateread read / db fie sequeotai read / direct patl read / db fie paraiiei read
free bufer / bufer busy / read by oler sessioo
iatcl: cacle bufers claios / iatcl: cacle bufers iru claio
gc cr request / gc bufer busy / gc bufer busy acquire / gc bufer busy reiease

Gravação
cootroi fie siogie write / cootroi fie paraiiei write / cootroi fie sequeotai read
db fie siogie write / db fie paraiiei write
direct patl write

Gravação LGRW
iog bufer space
iog fie paraiiei write / iog fie siogie write / iog fie sequeotai read
iog fie switcl (cleckpoiot iocompiete) / iog fie switcl compietoo
iog fie switcl (arcliviog oeeded)
iog fie syoc

237
Wait Events: Causas similares
Design / Concorrência / Troubleshootng
eoqueue: TX
eoqueue: TM
eoqueue: HW
eoqueue: Q
eoqueue: CF
free bufer / bufer busy / read by oler sessioo
gc cr request / gc bufer busy / gc bufer busy acquire / gc bufer busy reiease
iatcl: slared pooi / iatcl: iibrary cacle
iatcl: cacle bufers claios / iatcl: cacle bufers iru claio
iatcl: row cacle objects

Compilação / Concorrência
iatcl free / iatcl: iibrary cacle
iibrary cacle pio / iibrary cacle iock

Rede
QL*Net message from ciieot / QL*Net message to ciieot
QL*Net more data from ciieot / QL*Net more data to ciieot
QL*Net break/reset from ciieot / QL*Net break/reset to ciieot
238
Correção de Wait
Leitura

Cacle ( GA)

DB Fiie Muitbiock Read Couot

Database Writers

A M

Directo I/O

Hugepages

Compressioo (OLAP Compressioo, OLTP Compressioo, IoMemory)

Resuit Cacle

Parttooiog

CBO Coofguratoo

Object tatstcs

ystem tatstcs

QL

I/O

Actve Data Guard

239
Lab 7.1: AWR
Tire um SNAPSHOT avulso.
$ sqlplus / AS SYSDBA
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;

Execute a carga no sistema.


$ unzip -q swingbench261046.zip
$ cd swingbench/bin
./charbench -uc 10 -cs //localhost/ORCL

Tire outro SNAPSHOT avulso.


$ sqlplus / AS SYSDBA
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;

Tire um relatório AWR comparando os dois SNAPSHOTs.


SQL> @?/rdbms/admin/awrrpt.sql

Analise o relatório AWR.

240 240
Revisão

241 241
Método de Tuning

O Banco de Dados está lento agora:

Eocootrar iodícios do gargaio oa V$ Y TEM_EVENTa

Eocootrar iodícios do gargaio oa V$ E ION_WAITa

Eocootrar o(s) ID(s) ofeosor oa V$ E ION_WAITa

Eocootrar o maior Wait Eveot deste(s) ID(s) oa V$ E ION_EVENTa

Corrigir o maior Wait Eveot possíveia

e o tempo esta satsfatório, foaiizar o processoa


O Banco de Dados estava lento ontem:

Eocootrar iodícios do gargaio oa V$ Y TEM_EVENT (listórico)a

Eocootrar o maior Wait Eveot via tatspack / AWRa

Corrigir o maior Wait Eveot possíveia

e o tempo esta satsfatório, foaiizar o processoa


Este SQL está lento:

Executar o comaodo QL com Exteoded QL Tracea

Eocootrar iodícios do gargaio duraote a execuçoo do QL Tracea

Eocootrar o maior Wait Eveot via tkprofa

Corrigir o maior Wait Eveot possíveia

e o tempo esta satsfatório, foaiizar o processoa

242 242
Perguotas?

Ricardo Portilo Prooi


ricardo@ioformatcaacomabr
Nerv Ioformátca 243