Sie sind auf Seite 1von 16

AdministracinAvanzadadeOracle10g

PRACTICASTEMA5.
MONITORIZACINYAJUSTETRADICIONAL.
5.1.Revisarloseventosdelsistemaycomprobarlosmssignificativos.Comprobareleventolatch
free por sesiones. Comprobar sesiones esperando por el evento db file sequential read.
CompruebaelparmetroTIMED_STATISTICS.
5.2.Revisalasestadsticasdelsistemamssignificativas.CompruebaeltamaomediodelaPGA
decadasesin.RevisalaslecturaslgicasyfsicasycalculaelratiodeE/S.Compararelusode
CPUparaSQLdelsistema(accesoalDD)sobreeltotal.
5.3.VerelestadodeocupacindelaspartesmssignificativasdelaSharedPool.
5.4.ComprobarlacontencinenlatchesdelaSharedPoolyLibraryCache.
5.5.ComprobarelpinhitratiodelaLibraryCach,ascomolosreloads.Verificarelespaciolibrede
laSharedPool,yelvalordeopen_cursors.
5.6.VerelratiodelaRowCache.
5.7.ComprobarsielsistemarecomiendaampliarlaSharedPool.
5.8. Detectar sentencias similares que usan literales. Verificar los parmetros cursor_sharing y
session_cached_cursors.Asignarcursor_sharing=similar.
5.9.InstalarelpaqueteDBMS_SHARED_POOL.Comprobarpaquetesquesepuedenfijarenla
SharedPoolyhacerlo.
5.10.Comprobarsentenciasqueocupanmuchamemoria(>=10%deSharedPool).
5.11. Calcular el ratio de eficiencia de la Cach de Datos. Comprobar el parmetro
db_cache_advice.ConsultarsiOraclerecomiendaincrementarlaCachdeDatos.Comprobarsi
haycontencinenellatchcachebufferslruchain.Versihayesperasdeltipowritecomplete
waitsofreebufferwaits.
5.12.ComprobareltamaodelaCachedeRedo.Versihaycontencinenloslatchesderedo.
Verificarlaestadsticaredologspacerequests.
5.13.ComprobarlossegmentosderollbackONLINE.Verificarlasextensionesquetienecadauno,
as como el espacio total y libre del tablespace que los contiene. Ver si hay contencin en
segmentosderollback.
5.14.InstalarlautilidadSTATSPACK.Crearsnapshotsygenerarinforme.Analizarelinforme.
5.15.Probarautotracedesql*plus.
5.16.Comprobarelplandeejecucinconelquesehacompiladounasentenciasqlqueyaseha
ejecutado,obteniendolosdatosdelaSHAREDPOOL(v$sql).

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

AdministracinAvanzadadeOracle10g

5.1.Revisarloseventosdelsistemaycomprobarlosmssignificativos.
Comprobareleventolatchfreeporsesiones.Comprobarsesionesesperando
poreleventodbfilesequentialread.Compruebaelparmetro
TIMED_STATISTICS.
Solucin:
SQL>setlinesize100
SQL>selectrpad(event,30),total_waits,total_timeouts,time_waited,average_wait
fromv$system_eventorderbytotal_waitsdesc;
RPAD(EVENT,30)TOTAL_WAITSTOTAL_TIMEOUTSTIME_WAITEDAVERAGE_WAIT

...
controlfileparallelwrite141073018513.13
dbfilesequentialread30448023774.78
...
controlfilesequentialread146080247.02
logfileparallelwrite656303165.48
dbfilescatteredread4386080121.83
...
logfilesequentialread2402.1
logfilesinglewrite2406.26
logfileswitchcompletion21259228.18
latchfree210391.84
...
(Lacolumnatime_waitedestencentsimasdesegundo)
SQL>selectsid,total_waits,total_timeouts,time_waited,average_wait
fromv$session_event
whereevent='latchfree';
norowsselected
SQL>selectevent,sid,P1TEXT,P1,P2TEXT,P2,P3TEXT,P3,WAIT_TIME,SECONDS_IN_WAIT,STATE
fromv$session_wait
whereeventlike'dbfile%';
norowsselected
SQL>showparametertimed_statistics
NAMETYPEVALUE

timed_statisticsbooleanTRUE

Consultaladocumentacinparaverenquconsisteeleventodbfilescatteredread.Lopuedes
verenhttp://cursos.atica.um.es/oradoc102/server.102/b14237/waitevents003.htm#sthref4387.

5.2. Revisa las estadsticas del sistema ms significativas. Comprueba el


tamaomediodelaPGAdecadasesin.Revisalaslecturaslgicasyfsicasy
calculaelratiodeE/S.CompararelusodeCPUparaSQLdelsistema(acceso
alDD)sobreeltotal.
Solucin:
LasestadsticasdelsistemasepuedenconsultarenV$SYSSTAT.
JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

AdministracinAvanzadadeOracle10g
SQL>selectname,valuefromv$sysstat;
NAMEVALUE

logonscumulative113
logonscurrent15
openedcursorscumulative222072
openedcursorscurrent53
...
CPUusedbythissession9526
...
dbblockgets727314
...
consistentgets5805950
...
physicalreads134646...
...

LasestadsticassobreelusodelaPGAnospermitenhacerestimacionessobreelconsumode
memoria(RAM)decadasesin:
SQL>selectname,valuefromv$sysstatwherenamelike'sessionpgamemory%';
NAMEVALUE

sessionpgamemory60340248
sessionpgamemorymax101365784

LasestadsticasdeE/Snospermitencalcularelratiodeeficienciadelacachdedatos.Podemos
verelporcentajedelecturasadiscosobrelaslecturaslgicas:
SQL>select100*f1/(r1+r2)
from(selectvaluef1fromv$sysstatwherename='physicalreads'),
(selectvaluer1fromv$sysstatwherename='consistentgets'),
(selectvaluer2fromv$sysstatwherename='dbblockgets');
100*F1/(R1+R2)

2.06093003
TambinpodemoscalculareltiempodeCPUquesellevaelSQLdelsistema(accesoal
DD)respectoaltiempototaldeCPU:
SQL>select100*cpu1/cpu2
from(selectvaluecpu1fromv$sysstatwherename='recursivecpuusage'),
(selectvaluecpu2fromv$sysstatwherename='CPUusedbythissession');
100*CPU1/CPU2

79.687172

5.3.Verel estado deocupacin delaspartesmssignificativasdelaShared


Pool.
Solucin:
LavistaV$SGASTATnosmuestraelestadodelasdistintaspartesdelaSharedPool.
SQL>select*fromv$sgastat
wherenamein('freememory','librarycache','sqlarea','dictionarycache');
POOLNAMEBYTES

sharedpoolsqlarea3755132
sharedpoolfreememory680920
sharedpoollibrarycache2765552

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

AdministracinAvanzadadeOracle10g
sharedpooldictionarycache1610880

5.4.ComprobarlacontencinenlatchesdelaSharedPoolyLibraryCache.
Solucin:
Loslatchessonmicrobloqueosnecesariosparalagestindelosrecursoscompartidosdelsistema.
EnlavistaV$LATCHtenemosinformacinsobreelusodelatches.LacolumnaMISSESindicalos
fallosquehayalintentarcogerunlatch;ySLEEPSindicaelndevecesqueelprocesoqueintenta
cogerellatchpasaalestadodormido.
SQL>selectrpad(name,30),gets,misses,sleeps
fromv$latch
wherenamelike'%librarycache%'or
namelike'%sharedpool%';
RPAD(NAME,30)GETSMISSESSLEEPS

sharedpool9746542506
librarycachepinallocation222700
librarycachelockallocation534600
librarycachehashchains000
librarycachelock76883670
sharedpoolsimulator99239000
librarycache13619661233
sharedpoolsimalloc11600
librarycachepin58721320
librarycacheloadlock5651500
Como hay fallos (misses) con esperas (sleeps) en los latch shared pool y library
cache,habraqsubireltamaodelaSharedPool(shared_pool_size).

5.5.ComprobarelpinhitratiodelaLibraryCach,ascomolosreloads.Verificar
elespaciolibredelaSharedPool,yelvalordeopen_cursors.
Solucin:
Podemosver las estadsticas delaLibraryCachenlavistaV$LIBRARYCACHE.Losespacios
correspondientesaSQLyPLSQLson:
SQL>selectnamespace,pinhitratio,reloadsfromv$librarycache
wherenamespacein('SQLAREA','TABLE/PROCEDURE','BODY','TRIGGER');
NAMESPACEPINHITRATIORELOADS

SQLAREA.87204082211301
TABLE/PROCEDURE.68195679612562
BODY.81150959122
TRIGGER.1428571433

Serecomiendaunpinhitratiocercanoa1,yreloadscasicero.Llamalaatencinespacialmenteeln
de reloads en sql area y table/procedure; as como el bajo ratio en trigger. Podemos
plantearnossubiralgoeltamaodelaSharedPool.Primerohabraqueversihayespaciolibreenla
SharedPool,deformacontinuada;ytambinrevisaropen_cursors.
SQL>selectSharedPool,LibraryCache,Libre
from(selectsum(bytes)SharedPoolfromv$sgastatwherepool='sharedpool'),
(selectbytesLibraryCachefromv$sgastatwherename='librarycache'),

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

AdministracinAvanzadadeOracle10g
(selectbytesLibrefromv$sgastatwherename='freememory'andpool='sharedpool');
SHAREDPOOLLIBRARYCACHELIBRE

209715202793664764464
SQL>showparameteropen_cursors
NAMETYPEVALUE

open_cursorsinteger50

5.6.VerelratiodelaRowCache.
Solucin:
PodemosverlosratiosdelaRowCachenV$ROWCACHE,ytambincalcularunratiomedio..
SQL>SELECTrpad(parameter,25),sum(gets),sum(getmisses)
,100*sum(getsgetmisses)/sum(gets)pct_succ_gets
,sum(modifications)updates
FROMV$ROWCACHEWHEREgets>0GROUPBYparameter;
RPAD(PARAMETER,25)SUM(GETS)SUM(GETMISSES)PCT_SUCC_GETSUPDATES

dc_constraints1716760.8187135171
dc_tablespaces606137299.88121360
dc_tablespace_quotas1101
dc_awr_control7454599.932921944
dc_object_grants74688.108108110
dc_histogram_data733822163370.52001852594
dc_rollback_segments33258999.972938817
dc_sequences464110.869565246
dc_usernames12984796.37904470
dc_segments307251402854.3433686255
dc_objects89868546393.9210843334
dc_histogram_defs1065335102552.10404293090
dc_table_scns121200
dc_users10220610799.89530950
outstanding_alerts3166.66666672
dc_object_ids138501671895.1494935133
dc_global_oids208131185.05526190
dc_profiles331069.69696970
18rowsselected.
SQL>SELECTSUM(GETSGETMISSESFIXED)*100/SUM(GETS)"RatioMedio"
FROMV$ROWCACHE;
RatioMedio

84.5682021

Larecomendacinesquedichoratioser>=85%.

5.7.ComprobarsielsistemarecomiendaampliarlaSharedPool.
Solucin:
Las estadsticas sobre posibles redimensionamientos de la SharedPool los podemos ver en
V$SHARED_POOL_ADVICE.
SQL>selectSHARED_POOL_SIZE_FOR_ESTIMATESIZE_ESTIMATE,
SHARED_POOL_SIZE_FACTORSIZE_FACTOR,
ESTD_LC_TIME_SAVED_FACTORPARSE_SAVED_FACTOR

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

AdministracinAvanzadadeOracle10g
fromv$shared_pool_advice;
SIZE_ESTIMATESIZE_FACTORPARSE_SAVED_FACTOR

40.8333.8568
4811
561.16671.046
641.33331.1486
721.51.1676
801.66671.1691
881.83331.1817
9621.1817
SegnlosdatosanterioreslagananciaporsubirlaSharedPoolde48a64M(+33%)sera
del14.8%(de1a1.1486),asqprobaramosconshared_pool_size=64M.

5.8. Detectar sentencias similares que usan literales. Verificar el parmetros


cursor_sharingysession_cached_cursors.Asignarcursor_sharing=similar.
Solucin:
ParadetectarsentenciassimilaresmiraremosenV$SQLAREA:
SQL>SELECTsubstr(sql_text,1,40)"SQL",count(*),sum(executions)"TotExecs"
FROMv$sqlarea
GROUPBYsubstr(sql_text,1,40)HAVINGcount(*)>5ORDERBY2;
SQLCOUNT(*)TotExecs

SELECTsubstr(sql_text,1,40)"SQL",coun79
SQL> select sql_text from v$sqlarea where substr(sql_text,1,40) like 'SELECT
substr(sql_text,1,40)%';
SQL_TEXT

SELECT substr(sql_text,1,40) "SQL", count(*), sum(executions) "TotExecs" FROM


v$sqlareaGR
OUPBYsubstr(sql_text,1,40)HAVINGcount(*)>20ORDERBY2
SELECT substr(sql_text,1,40) "SQL", count(*), sum(executions) "TotExecs" FROM
v$sqlareaWH
EREexecutions<5GROUPBYsubstr(sql_text,1,40)HAVINGcount(*)>20ORDERBY2
SELECT substr(sql_text,1,40) "SQL", count(*), sum(executions) "TotExecs" FROM
v$sqlareaGR
OUPBYsubstr(sql_text,1,40)HAVINGcount(*)>10ORDERBY2
...
SQL>showparametercursor_sharing
NAMETYPEVALUE

cursor_sharingstringEXACT
SQL>showparametersession_cached_cursors
NAMETYPEVALUE

session_cached_cursorsinteger20
SQL>altersystemsetcursor_sharing=similar;
Systemaltered.

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

AdministracinAvanzadadeOracle10g

5.9. Instalar el paquete DBMS_SHARED_POOL. Comprobar paquetes que se


puedenfijarenlaSharedPoolyhacerlo.
Elpaquetedbms_shared_poolseinstalaconelscript$ORACLE_HOME/rdbms/admin/dbmspool.sql,
bajoelusuarioSYS.
Solucin:
Instalarelpaquete.
SQL>connect/assysdba
SQL>@$ORACLE_HOME/rdbms/admin/dbmspool.sql

Comprobarpaquetesafijar,porejemploqocupenmsde100Kb.
SQL>setserveroutputonsize2000
SQL>execdbms_shared_pool.sizes(100)
SIZE(K)KEPTNAME

429SYS.STANDARD(PACKAGE)

Fijarlo.
SQL>execdbms_shared_pool.keep('SYS.STANDARD');
PL/SQLproceduresuccessfullycompleted.

Comprobarlo:
SQL>execdbms_shared_pool.sizes(100)
SIZE(K)KEPTNAME

429YESSYS.STANDARD(PACKAGE)

5.10. Comprobar sentencias que ocupan mucha memoria (>=10% de


SharedPool).
Solucin:
EnV$SQLtenemosinformacinsobrelassentenciasSQLenejecucin,incluyendoelconsumode
memoria.Nosinteresacontrolaraquellasqueocupanel10%omsdelaSharedPool.
SQL>showparametershared_pool_size
NAMETYPEVALUE

shared_pool_sizebiginteger0
SQL>select*fromv$sgainfo;
NAMEBYTESRES

FixedSGASize1259408No
RedoBuffers2932736No
BufferCacheSize33554432Yes
SharedPoolSize50331648Yes
...
FreeSGAMemoryAvailable8388608
SQL>selecTsubstr(sql_text,1,40)"Stmt",count(*),
sum(sharable_mem)"Mem",
sum(users_opening)"Open",

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

AdministracinAvanzadadeOracle10g
sum(executions)"Exec"
FROMv$sql
GROUPBYsubstr(sql_text,1,40)
HAVINGsum(sharable_mem)>5000000;
norowsselected
Nohayninguna(siponemos50000,enlugarde5000000,veremosqsalealgo).

5.11. Calcular el ratio de eficiencia de la Cach de Datos. Comprobar el


parmetro db_cache_advice. Consultar si Oracle recomienda incrementar la
CachdeDatos.Comprobarsihay contencin enel latchcachebuffers lru
chain.Versihayesperasdeltipowritecompletewaitsofreebufferwaits.
Solucin:
LocalcularemosapartirdelosdatosdelecturasfsicasylgicasquepodemosverenV$SYSSTAT.

SQL>select100*(1(f1f2f3)/(r1+r2f2f3))Ratio
from(selectvaluef1fromv$sysstatwherename='physicalreads'),
(selectvaluef2fromv$sysstatwherename='physicalreadsdirect'),
(selectvaluef3fromv$sysstatwherename='physicalreadsdirect(lob)'),
(selectvaluer1fromv$sysstatwherename='consistentgets'),
(selectvaluer2fromv$sysstatwherename='dbblockgets');
RATIO

98.0134287

LasrecomendacionessobreincrementosdetamaodelaCachdeDatoslospodemosveren
V$DB_CACHE_ADVICE,siemprequeelparmetrodb_cache_advice=on.
SQL>showparameterdb_cache_advice
NAMETYPEVALUE

db_cache_advicestringON
SQL>setlinesize100
SQL>selectid,name,size_for_estimate,size_factor,ESTD_PHYSICAL_READ_FACTOR
fromv$db_cache_advice;
IDNAMESIZE_FOR_ESTIMATESIZE_FACTORESTD_PHYSICAL_READ_FACTOR

...
3DEFAULT24.751.0056
3DEFAULT28.8751.0033
3DEFAULT3211
3DEFAULT361.125.9986
3DEFAULT401.25.9976
3DEFAULT441.375.997
3DEFAULT481.5.9957
3DEFAULT521.625.995
3DEFAULT561.75.9943
3DEFAULT601.875.9929
3DEFAULT642.9433
...

Comoseobserva,enestecasonomerecelapenasubirlacach,puestenemosqduplicarsu
JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

AdministracinAvanzadadeOracle10g
tamao(64Mb),paraconseguirunamejoradel6%.Inclusopodramosreducirlaa28M,puesslo
empeoramosel0.3%.
EnlavistaV$LATCHpuedoversihaycontencinencachebufferslruchain.
SQL>SELECTNAME,GETS,MISSES,SLEEPSFROMV$LATCHWHERENAME='cachebufferslruchain';
NAMEGETSMISSESSLEEPS

cachebufferslruchain3411871543

EnlavistaV$BUFFER_POOL_STATISTICSpuedoversihayesperasdeltipofreebufferwaito
writecompletewait.
SQL>SELECTID,NAME,FREE_BUFFER_WAIT,WRITE_COMPLETE_WAIT
FROMV$BUFFER_POOL_STATISTICS;
IDNAMEFREE_BUFFER_WAITWRITE_COMPLETE_WAIT

3DEFAULT00

5.12.ComprobareltamaodelaCachedeRedo.Versihaycontencinenlos
latchesderedo.Verificarlaestadsticaredologspacerequests.
Solucin:
EltamaodelaCachdeRedolodeterminaelparmetrolog_buffer.
SQL>showparameterlog_buffer
NAMETYPEVALUE

log_bufferinteger2886656

Tendremoscontencinenloslatchesderedosialgunodelossiguientesratiossuperael1%:
SQL>SELECTsubstr(name,1,20)latch,
100*decode(gets,0,0,misses/gets)mis_ratio,
100*decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses))im_mis_ratio
FROMv$latch
WHEREnamein('redoallocation','redocopy');
LATCHMIS_RATIOIM_MIS_RATIO

redocopy0.245571834
redoallocation.00722064.005709181

Finalmente,comprobemoslaestadsticaredologspacerequests:
SQL>select*fromv$sysstatwherename='redologspacerequests';
STATISTIC#NAMECLASSVALUE

141redologspacerequests225

5.13.ComprobarlossegmentosderollbackONLINE.Verificarlasextensiones
que tiene cada uno, as como el espacio total y libre del tablespace que los
contiene.Versihaycontencinensegmentosderollback.
Solucin:
EnlavistaDBA_ROLLBACK_SEGSpodemosverlossegmentosderollback,siestnenlnea,ya
qu tablespace pertenecen. En V$ROLLSTAT (y V$ROLLNAME), podemos ver estadsticas de
JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

AdministracinAvanzadadeOracle10g
tamao,peticiones,extensindinmica,etc.
SQL>selectsegment_name,tablespace_name,initial_extent,

min_extents,max_extents,status
fromdba_rollback_segs;
SEGMENT_NAMETABLESPACEINITIAL_EXTENTMIN_EXTENTSMAX_EXTENTSSTATUS

SYSTEMSYSTEM102400132765ONLINE
_SYSSMU1$UNDO_RBS131072232765ONLINE
_SYSSMU2$UNDO_RBS131072232765ONLINE
_SYSSMU3$UNDO_RBS131072232765ONLINE
_SYSSMU4$UNDO_RBS131072232765ONLINE
_SYSSMU5$UNDO_RBS131072232765ONLINE
_SYSSMU6$UNDO_RBS131072232765ONLINE
_SYSSMU7$UNDO_RBS131072232765ONLINE
_SYSSMU8$UNDO_RBS131072232765ONLINE
SQL>SELECTRPAD(NAME,10)NAME,EXTENTS,RSSIZE,GETS,WAITS,SHRINKS,EXTENDS,STATUS
FROMV$ROLLNAMEA,V$ROLLSTATB
WHEREA.USN=B.USN;
NAMEEXTENTSRSSIZEGETSWAITSSHRINKSEXTENDSSTATUS

SYSTEM74567041479000ONLINE
_SYSSMU1$311776006722033ONLINE
_SYSSMU2$2129024771411132ONLINE
_SYSSMU3$212902492420412ONLINE
_SYSSMU4$311776006893033ONLINE
_SYSSMU5$21290246647021ONLINE
_SYSSMU6$212902499830736ONLINE
_SYSSMU7$21290247277022ONLINE
_SYSSMU8$3117760064940211ONLINE

PodemosconsultarlasextensionesyespacioocupadodecadaRS,enlavistaDBA_EXTENTS;yel
espaciolibredeltablespacequeloscontiene,enDBA_FREE_SPACE.
SQL>SELECTrpad(segment_name,10)Rsname,count(*),sum(bytes)
FROMDBA_EXTENTSWHERETABLESPACE_NAME='UNDO_RBS'groupbysegment_name;
RSNAMECOUNT(*)SUM(BYTES)

_SYSSMU5$2131072
_SYSSMU3$2131072
_SYSSMU2$2131072
_SYSSMU6$2131072
_SYSSMU1$31179648
_SYSSMU4$31179648
_SYSSMU8$31179648
_SYSSMU7$2131072
SQL>selectsum(bytes)fromdba_free_spacewheretablespace_name='UNDO_RBS';
SUM(BYTES)

16711680

Finalmente, las estadsticas sobre contencin en RS, las podemos ver en V$WAITSTAT. Si la
hubieseenundoheadertendramosquecrearmsRS.
SQL>SELECTCLASS,COUNTFROMV$WAITSTAT
WHERECLASSlike'%undo%';
CLASSCOUNT

saveundoblock0
saveundoheader0
systemundoheader0
systemundoblock0
undoheader1
undoblock0

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

10

AdministracinAvanzadadeOracle10g

5.14.InstalarlautilidadSTATSPACK.Crearsnapshotsygenerarinforme.
Solucin:
Creartablespacestatspack_tspcon100Men/u05/oradata/CURSOxy(creardir.
/u05/oradata/CURSOxy).
Creartablespacestatspack_tempcon2Men/u05/oradata/CURSOxy.
Instalarstatspackcon$ORACLE_HOME/rdbms/admin/spcreate.sql,indicandolosdatosquese
piden:clavedeusuarioperfstat,tablespacepordefecto,ytablespacetemporalpordefecto.
$mkdir/u05/oradata/CURSOxy
$chmodRg+w/u05/oradata/CURSOxy
SQL>createtablespacestatpack_tsp
datafile'/u05/oradata/CURSOxy/statpack_tsp01.dbf'size100M
autoextendonnext10Mmaxsize200M
extentmanagementlocalautoallocate
segmentspacemanagementauto;
Tablespacecreated.
SQL>createtemporarytablespacestatpack_temp
tempfile'/u05/oradata/CURSOxy/statpack_temp01.dbf'size2M
autoextendonnext1Mmaxsize10M;
Tablespacecreated.
SQL>@$ORACLE_HOME/rdbms/admin/spcreate.sql
...InstallingRequiredPackages
...
...CreatingPERFSTATuser...
ChoosethePERFSTATuser'spassword.
NotspecifyingapasswordwillresultintheinstallationFAILING
SpecifyPERFSTATpassword
Entervalueforperfstat_password:perfcursoXY
...
ChoosetheDefaulttablespaceforthePERFSTATuser

...
SpecifyingtheSYSTEMtablespacewillresultintheinstallation
FAILING,asusingSYSTEMforperformancedataisnotsupported.
TABLESPACE_NAMECONTENTSSTATSPACKDEFAULTTABLESPACE

SEGAUTOPERMANENT
STATPACK_TSPPERMANENT
SYSAUXPERMANENT*
TSP4KPERMANENT
USERSPERMANENT
Pressing<return>willresultinSTATSPACK'srecommendeddefault
tablespace(identifiedby*)beingused.
Entervaluefordefault_tablespace:STATPACK_TSP
...
ChoosethePERFSTATuser'stemporarytablespace.
SpecifyingtheSYSTEMtablespacewillresultintheinstallation
FAILING,asusingSYSTEMforthetemporarytablespaceisnotrecommended.
...
SpecifyPERFSTATuser'stemporarytablespace.
Entervaluefortemporary_tablespace:STATPACK_TEMP

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

11

AdministracinAvanzadadeOracle10g
...
Noerrors.
NOTE:
SPCPKGcomplete.Pleasecheckspcpkg.lisforanyerrors.

UnavezinstaladoSTATSACK,comprobamossihahabidoerrores(enlosficheros*.lis):
SQL>!grepierr*.lis
spcpkg.lis:Noerrors.
spcpkg.lis:Noerrors.
spcpkg.lis:SPCPKGcomplete.Pleasecheckspcpkg.lisforanyerrors.
spctab.lis:SPCTABcomplete.Pleasecheckspctab.lisforanyerrors.
spcusr.lis:SPCUSRcomplete.Pleasecheckspcusr.lisforanyerrors.

AhorapodemosutilizarelpaqueteSTATSPACK.
Primerocompruebosiestactivadalarecoleccindeestadsticas:
SQL>showparametertimed_statistics
NAMETYPEVALUE

timed_statisticsbooleanTRUE

AhorameconectocomoPERFSTAT(ousuarioconaccesoalpaqueteSTATSPACK)ygeneroel
primersnapshot(baseline)connivel10(i_snap_level).Despus,esperoalmenos5minutospara
generarotrosnapshot,puesparasacaruninformenecesitoalmenosdos:
SQL>connectperfstat
Enterpassword:
Connected.
SQL>execSTATSPACK.SNAP(i_snap_level=>10)
PL/SQLproceduresuccessfullycompleted.
(...LANZARALGUNASCONSULTAS,COMOLASDOSSIGUIENTES...)
SQL>SELECTCOUNT(*)FROMDBA_OBJECTS;
COUNT(*)

5924
SQL>SELECTCOUNT(*)FROMDBA_EXTENTS;
COUNT(*)

2647
(...ESPERAR5MINUTOSDESDEQUEHICIMOSELSNAPSHOT...)
SQL>execSTATSPACK.SNAP
PL/SQLproceduresuccessfullycompleted.

Ahorayapodemosgenerarelinforme:
SQL>@$ORACLE_HOME/rdbms/admin/spreport.sql
...
Entervalueforbegin_snap:1
...
Entervalueforend_snap:2
...
SnapshotSnapIdSnapTimeSessionsCurs/SessComment
~~~~~~~~
BeginSnap:129Jan0713:15:56155.4
EndSnap:229Jan0713:17:40156.8
Elapsed:1.73(mins)
CacheSizesBeginEnd
~~~~~~~~~~~
BufferCache:28MStdBlockSize:2K
SharedPoolSize:52M
LogBuffer:2,819K

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

12

AdministracinAvanzadadeOracle10g
LoadProfilePerSecondPerTransaction
~~~~~~~~~~~~
Redosize:17,111.121,779,556.00
Logicalreads:352.4336,653.00
Blockchanges:64.206,677.00
Physicalreads:35.243,665.00
Physicalwrites:31.093,233.00
Usercalls:0.1010.00
Parses:13.851,440.00
Hardparses:1.34139.00
Sorts:6.13637.00
Logons:0.000.00
Executes:29.433,061.00
Transactions:0.01
%BlockschangedperRead:18.22RecursiveCall%:99.98
Rollbackpertransaction%:0.00RowsperSort:12.03
InstanceEfficiencyPercentages
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BufferNowait%:100.00RedoNoWait%:99.95
BufferHit%:89.99InmemorySort%:100.00
LibraryHit%:83.66SoftParse%:90.35
ExecutetoParse%:52.96LatchHit%:99.99
ParseCPUtoParseElapsd%:50.98%NonParseCPU:61.48
SharedPoolStatisticsBeginEnd

MemoryUsage%:83.2284.28
%SQLwithexecutions>1:72.2787.15
%MemoryforSQLw/exec>1:66.2178.80
Top5TimedEventsAvg%Total
~~~~~~~~~~~~~~~~~~waitCall
EventWaitsTime(s)(ms)Time

dbfilesequentialread1,3876474.5
CPUtime116.4
dbfilescatteredread107023.1
logfileparallelwrite90242.6
logfileswitchcompletion20551.3
...
EndofReport(sp_1_2.lst)

5.15.Probarautotracedesqlplus.
Solucin:
AUTOTRACEesunaopcindesql*plus,quenospermiteverelplandeejecucindeunasentencia
sqly/olasestadsticasasociadasalamisma:
Plandeejecucin:nosdicecmosevaaejecutarlasentencia(quindicesseusanosise
accedealatablacompleta,etc).
Estadsticas:proporcionandatoscomolaslecturaslgicasyfsicasnecesariasparaextraer
losdatos.
Msinformacinsobreautotraceen
http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch8.htm#i1037226.

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

13

AdministracinAvanzadadeOracle10g
SQL>connectsystem/systcursoXY
Enterpassword:
Connected.
(AhoravamosaactivarAUTORACE,demodoqueslomuestreelplandeejecucindelas
sentenciassqlquelancemosposteriormente)
SQL>setautotracetraceonlyexplain
SQL>setlinesize100
SQL>selectcount(*)fromdba_objectswherestatus='VALID';
ExecutionPlan

|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|

|0|SELECTSTATEMENT||1|5|86(2)|
|1|SORTAGGREGATE||1|5||
|2|VIEW|DBA_OBJECTS|89|445|86(2)|
|3|UNIONALL|||||
|*4|FILTER|||||
|*5|HASHJOIN||99|7623|85(2)|
|6|TABLEACCESSFULL|USER$|27|81|3(0)|
|*7|TABLEACCESSFULL|OBJ$|99|7326|82(2)|
|*8|TABLEACCESSBYINDEXROWID|IND$|1|7|2(0)|
|*9|INDEXUNIQUESCAN|I_IND1|1||1(0)|
|10|NESTEDLOOPS||1|16|1(0)|
|11|INDEXFULLSCAN|I_LINK1|1|13|0(0)|
|12|TABLEACCESSCLUSTER|USER$|1|3|1(0)|
|*13|INDEXUNIQUESCAN|I_USER#|1||0(0)|

...
(Pordefecto,eloptimizadorseleccionarelmejorplandeejecucinparaobtenerTODAS
lasfilasquepuededevolverunaconsulta(ALL_ROWS).Ahoravamosadecirlequequeremos
queescojaelmejorplandeejecucinparaobtenerprontoalgnresultado.olasPRIMERAS
FILAS(FIRST_ROWS))
SQL>altersessionsetoptimizer_mode=first_rows;
Sessionaltered.
SQL>selectcount(*)fromdba_objectswherestatus='VALID';
ExecutionPlan

|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|

|0|SELECTSTATEMENT||1|5|182(1)|
|1|SORTAGGREGATE||1|5||
|2|VIEW|DBA_OBJECTS|89|445|182(1)|
|3|UNIONALL|||||
|*4|FILTER|||||
|5|NESTEDLOOPS||99|7623|181(1)|
|*6|TABLEACCESSFULL|OBJ$|99|7326|82(2)|
|7|TABLEACCESSCLUSTER|USER$|1|3|1(0)|
|*8|INDEXUNIQUESCAN|I_USER#|1||0(0)|
|*9|TABLEACCESSBYINDEXROWID|IND$|1|7|2(0)|
|*10|INDEXUNIQUESCAN|I_IND1|1||1(0)|
|11|NESTEDLOOPS||1|16|1(0)|
|12|INDEXFULLSCAN|I_LINK1|1|13|0(0)|
|13|TABLEACCESSCLUSTER|USER$|1|3|1(0)|
|*14|INDEXUNIQUESCAN|I_USER#|1||0(0)|

...

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

14

AdministracinAvanzadadeOracle10g
(Ahoraqueremosverslolasestadsticasdeaccesoadisco)
SQL>setautotracetraceonlystatistics
SQL>selectcount(*)fromdba_objectswherestatus='VALID';
Statistics

0recursivecalls
0dbblockgets
22992consistentgets
0physicalreads
0redosize
412bytessentviaSQL*Nettoclient
384bytesreceivedviaSQL*Netfromclient
2SQL*Netroundtripsto/fromclient
0sorts(memory)
0sorts(disk)
1rowsprocessed

Yahemosvistocomoverdeformaautomticaelplandeejecucindeunasentencia,ascomolas
estadsticasdeE/S.
TambinpodemoscalculareltiempoderepuestaalusuarioconSETTIMING:
SQL>setautotraceoff
SQL>settimingon
SQL>selectcount(*)fromdba_objectswherestatus='VALID';
COUNT(*)

9932
Elapsed:00:00:00.07

5.16.Comprobarelplandeejecucinconelquesehacompiladounasentencia
sqlqueyasehaejecutado,obteniendolosdatosdelaSHAREDPOOL(v$sql).
Solucin:
EnV$SQLpuedoverlassentenciassqlqueyasehanejecutado,demodoquepuedoobtenerel
identificador(V$SQL.SQL_ID)decualquiersentenciasql,paraposteriormenteconsultarelplande
ejecucinhaciendousodelpaquetedbms_xplan(DBMS_XPLAN.DISPLAY_CURSOR(SQL_ID)).
SQL>connectsystem/systcursoXY
Enterpassword:
Connected.
SQL>selectdeptno,count(*)fromscott.empgroupbydeptno;
DEPTNOCOUNT(*)

306
205
103
SQL>selectsql_idfromv$sqlwheresql_text='selectdeptno,count(*)fromscott.empgroup
bydeptno';
SQL_ID

cxwqkgckrcpd8
SQL>select*fromtable(dbms_xplan.display_cursor('cxwqkgckrcpd8'));

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

15

AdministracinAvanzadadeOracle10g
PLAN_TABLE_OUTPUT

SQL_IDcxwqkgckrcpd8,childnumber0

selectdeptno,count(*)fromscott.empgroupbydeptno
Planhashvalue:4067220884

|Id|Operation|Name|Rows|Bytes|Cost(%CPU)|Time|

|0|SELECTSTATEMENT||||7(100)||
|1|HASHGROUPBY||3|9|7(15)|00:00:01|
|2|TABLEACCESSFULL|EMP|14|42|6(0)|00:00:01|

14filasseleccionadas.

JuanLuisSerradillaAmarillayFranciscoFernndezMartnez

16

Das könnte Ihnen auch gefallen