Beruflich Dokumente
Kultur Dokumente
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.
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
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.
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
cursor_sharingstringEXACT
SQL>showparametersession_cached_cursors
NAMETYPEVALUE
session_cached_cursorsinteger20
SQL>altersystemsetcursor_sharing=similar;
Systemaltered.
JuanLuisSerradillaAmarillayFranciscoFernndezMartnez
AdministracinAvanzadadeOracle10g
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)
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).
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