Professional Documents
Culture Documents
FranciscoFernndezMartnez(pacof@um.es) JuanLuisSerradillaAmarilla(juanlu@um.es)
UniversidaddeMurcia
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
TEMARIO
InstalacindeOracle10g. Diseoycreacindeunabasededatos. Estructurasdealmacenamiento(bloque,fila,segmento). NuevasfuncionalidadesdemonitorizacinyajustedeOracle10g. MonitorizacinyajustetradicionaldeOracleenversionesanteriores. OracleNet. MTS. Configuracindelarchivado. Backup. Recovery.
2
OBJETIVOS
SaberinstalarOracle10g(servidoryBD)sobreLinux. Disear(memoria,CPUydisco)ycrearunabasededatos. Conocerelformatodelbloqueoracle,estructuradelafila,tiposdesegmentos ytiposdendices(BtreevsIOT). Conocer la nueva infraestructura, as como las nuevas herramientas de monitorizacinyajustedeOracle10g. Conocer la infraestructura tradicional de Oracle para el ajuste y la monitorizacin:vistasdinmicasderendimiento,ajustedesharedpool,buffer cache,redolog,rollback,temporal(sort),checkpoints,sql,cpu. Configurarelsoftwaredered(OracleNet)enelservidoryenelcliente. SaberactivaryconfigurarMTS. ConfigurarelarchivadodeunaBDOracle10g. ConocerlascuestionesavanzadasdelbackupdeunaBD. ConocerlascuestionesavanzadasdelrecoverydeunaBD.
3
TEMA1 INSTALACINDEORACLE10g
TEMA1. INSTALACINDEORACLE10g
Esquemadelprocesodeinstalacin. TiposdeBasesdeDatos. AsistentesdeConfiguracin. RequerimientosHWySW. ParmetrosdelKernelLINUX.EjemploconFC3. Paquetesnecesarios.EjemploconFC3. Preinstalacin. Instalacin. Postinstalacin. Revisindeseguridadycomprobacinfinal.
ESQUEMADELPROCESODE INSTALACIN
DescargarSWdeOracle:
http://www.oracle.com/technology/software/products/database/oracle10g/index.html
Manualdeinstalacin(primeroverReleaseNotes): Mtododeinstalacin Bsico.Parainstalacinrpida:SWypermitecrearBDdepropsitogeneral (enbaseaunaprecreada).Mtododeinstalacinpordefecto. Avanzado:paraunainstalacionpersonalizadadelswy/odelaBD. Tipodeinstalacin EnterpriseEdition StandardEdition Personalizada Directorioraz(ORACLE_HOME) Listadeproductosainstalar ComprobacinautomticadelosrequisitosdelSO GruposdelSOconprivilegios(dbay/ooper) CreacindelaBD:crearBD(verDBCA)oConfigurarASMoInstalarsloSW Asistentesdeconfiguracin(redconnetca,BDcondbca,etc) Scriptsaejecutarcomoroot
INSTALACINDEORACLE10g
http://www.oracle.com/pls/db102/homepage
TIPODEBASEDEDATOS
UsoGeneral: transaccionescortas(OLTP)ytambinlargas(procesosbatch).
LaBDcreadaincluye: ParmetrosdeinicializacinusandospfileygestinautomticadeUNDO. OracleOptionseinterMedia AdvancedReplication ServidoresDedicados(nousaMTS) NOARCHIVELOG
Procesamiento de Transacciones (OLTP: Online Transaction Processing): muchas transacciones cortas concurrentes, consistentes en
consultassencillassobrepocosdatos(tambinactualizaciones). AlmacndeDatos(DataWarehouse): consultascomplejassobremuchos datos(OnLineAnalyticalProcessing).
Personalizada. SloSoftware:nocreaBDniconfigurasqlnet.
INSTALACINDEORACLE10g
ASISTENTESDECONFIGURACIN
DatabaseConfigurationAssistant(dbca).
PermitecopiarunaBDpreconfiguradaocrearunapersonalizada. ArrancaautomticamenteunavezquesehainstaladoelswOracle. Oracle Net Configuration Assistant (netca): configura la red C/S de Oracle en $ORACLE_HOME/network/admin. Opciones Enterprise y Standard: configura listener.ora, sqlnet.ora y tnsnames.ora. Personalizada:permiteconfigurarunserviciodedirectorio(LDAP),crearlisteners para conectar a la BD y seleccionar el mtodo de resolucin de nombres. Configura,ademsdelosanteriores,elficheroldap.ora. Cliente:permiteconfigurartnsnames.ora,sqlnet.orayldap.ora. Database Upgrade Assistant (dbua): para actualizar una BD >= 8.1.7.4/9.0.1.4/9.2.0.4/10.1.0.2,despusdeinstalarelswdeOracle10g. Oracle Enterprise Manager Configuration Assistant: configura OMS y crea (o actualiza)surepositorio(necesitaBD). Oracle Internet Directory Configuration Assistant: configura OID, arrancando OIDServer(necesitaBD).
INSTALACINDEORACLE10g
REQUERIMIENTOSHWYSW (Linux)
HW:
RAM1G(256Mparaelcliente):grepMem/proc/meminfo HDentre1.5y3.5Gbparaelsw,1.2Gbparalabdyalmenos400Mbde /tmp:df Swap1.5RAM(si<=2G),eigualalaRAM(si>2G):/sbin/swapons.
SW:
EnLinux,sitenemosmuchaRAM,podemosconfigurarpocoswap;ej: RAM=4GbySwap=1Gb.
INSTALACINDEORACLE10g
PARMETROSDELKERNEL Valoresmnimos(Linux)
SEMMNI=100(#mximodeconjuntosdesemforos). SEMMNS=256(#mximodesemforos,sloparalainstalacininicial). SEMMNS=sum(processes)+max(processes)+10*count(BBDD) processeseselparmetrodelinitdecadaBD. SEMOPM=100(#mximodeoperacionesporsemopcall). SEMMSL=100(valormnimorecomendado,sloparalainstalacininicial). SHMMAX=2147483648(tamaomximodelsegmentodememoriacompartidayportanto delaSGA). 2GBparakernelSMP.SerecomiendalamitaddelaRAM. SiqueremostenerunaSGAdemsde2Gbtendremosqsubirestevalor. SHMMIN=1(tamaomnimodeunsegmentodememoriacompartida). SHMMNI=4096(#mximodesegmentosdememoriacompartida). SHMSEG=4096(#mximodesegmentosdememoriaporproceso). SHMVMX=32767(valormximodeunsemforo).
INSTALACINDEORACLE10g
10
PARMETROSDELKERNEL EjemploconLinuxFC3
(http://www.oraclebase.com/articles/10g/OracleDB10gR2InstallationOnFedora3.php)
Aadirlassiguienteslneasalfichero/etc/sysctl.conf: kernel.shmall=2097152 kernel.shmmax=2147483648 kernel.shmmni=4096 #semaphores:semmsl,semmns,semopm,semmni kernel.sem=25032000100128 fs.filemax=65536 net.ipv4.ip_local_port_range=102465000 net.core.rmem_default=262144 net.core.rmem_max=262144 net.core.wmem_default=262144 net.core.wmem_max=262144 Actualizarlosparmetrosenmemoriacon #/sbin/sysctlp
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 INSTALACINDEORACLE10g
11
Paquetesnecesarios FEDORACORE3Linux
#DeFedoraCore3Disk1 cd/media/cdrom/Fedora/RPMS rpmUvhsetarch1* rpmUvhtcl8* rpmUvhcompatlibstdc++8* #DeFedoraCore3Disk2 cd/media/cdrom/Fedora/RPMS rpmUvhxorgx11deprecatedlibs6* rpmUvhopenmotif2* rpmUvhcompatdb4* #DeFedoraCore3Disk3 cd/media/cdrom/Fedora/RPMS rpmUvhcompatlibstdc++devel8* rpmUvhcompatgcc8* rpmUvhcompatgccc++8* rpmUvhlibaio0*
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 INSTALACINDEORACLE10g
12
PREINSTALACIN(Linux)
Crearpuntosdemontaje:unoparaelswyhastaseisparalasbasesdedatos: Creargrupodba:groupadddba. Creargrupooinstall:groupaddoinstall. Crearusuariooraclecongrupoprimariodbaysecundariooinstall:useraddg dbaGoinstalloracle. Creardirectorio/u01/app/oracle(ORACLE_BASE)y/u02/oradata,/u03/oradata, etc. Variablesdeentornodelusuariooraclejustoantesdeinstalar:
DISPLAY=workstation_name:0.0(servidorXwin) ORACLE_BASE=/u01/app/oracle(elrestoesopcional) PATHdebeincluir$ORACLE_HOME/bin,/usr/bin,/bin, /usr/bin/X11/y/usr/local/bin ORACLE_HOME=$ORACLE_BASE/product/10.2.0.1 ORACLE_SID /u01(sw) /u02(datos),/u03(ndices),/u04(redo),/u05(system),/u06(temp)y/u07(rollback)
INSTALACINDEORACLE10g
13
INSTALACIN
ArtculodeOTNsobreinstalacindeOracle10gsobreLinux:
http://www.oracle.com/technology/pub/articles/smiley_10gdb_install.html
MontarCDdesdeelroot: #mount/mnt/cdrom Comousuariooracle,lanzarscriptdeinstalacindesdefueradelpunto demontajedelCD(porejemplo,desdeelHOMEdelusuariooracle). ComprobarvariablesDISPLAYyORACLE_BASE. $/mnt/cdrom/runInstaller Nota.Sepodraejecutarenmodonointeractivocon: $/mnt/cdrom/runInstallerresponsefilemirespfilesilent Cambiar CD: eject o umount /mnt/cdrom y luego mount /mnt/cdrom.
Nota:elpuntodemontajedelCDROMnotieneporquser/mnt/cdrom,puede serotro(/media/cdrom,etc).
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 INSTALACINDEORACLE10g
14
POSTINSTALACIN
Incluirvariablesen.bash_profiledelusuariooracle: exportORACLE_BASE=/u01/app/oracle exportORACLE_HOME=$ORACLE_BASE/product/10.2.0.1 exportLD_LIBRARY_PATH=$ORACLE_HOME/lib exportPATH=$ORACLE_HOME/bin:$PATH exportORACLE_SID=mibd ActivarE/Sasncrona: ElswdeOracle10gR2yalallevaactivada.Sepuedecomprobarcon:
#psfe|grepdbw|grepicurso50 oracle2254010Jan08?00:00:08ora_dbw0_CURSO50 #lsofp22540|greplibaio oracle22540oraclememREG253,026281966157/usr/lib/libaio.so.1.0.1
http://www.oracle.com/technology/deploy/security/pdf/twp_security_checklist_db_database.pdf
INSTALACINDEORACLE10g
15
REVISIONDESEGURIDAD
Instalarsloaquellasopcionesqueseannecesarias(Java,Intermedia,etc). Bloquearcuentasdeusuarioscreadospordefectoquenovayamosautilizar. DBCAbloqueatodasmenosSYS,SYSTEM,SCOTTyDBSNMP,porejemplo: outln,mdsys,wksys,ctxsys,ordsys,etc. Cambiarclavesdeusuarioscreadospordefecto:SYS,SYSTEM,etc. ProtegerelDDconO7_DICTIONARY_ACCESSIBILITY=FALSE,impidiendo acceso al DD a travs de privilegios ANY. As, por ejemplo, usuarios con DROPANYnopodrnborrarelDD Practicarelprincipiodelosprivilegiosjustos.Porejemplo,paraconectarala BDdarCREATESESSIONynoCONNECT. RestringirlosusuariosunixconaccesoalservidorOracle. RestringirelaccesoalservidorOracleatravsdeydesdelared. Aplicartodoslosparchesdeseguridadquevayansaliendo. http://otn.oracle.com/deploy/security/alerts.html
INSTALACINDEORACLE10g
16
COMPROBACINFINAL
Eneldirectorio$ORACLE_BASE/oraInventory/logspodemosrevisarlo ocurridodurantelainstalacin. ComprobarqueelSWylaBD(sihemosinstaladouna)funcionan. ConectaralaBDusandoSql*Plus
$sqlplus/nolog
SQL*Plus:Release10.2.0.2.0ProductiononTueJan212:59:462007 Copyright(c)1982,2005,Oracle.AllRightsReserved.
ComprobarelListenerSql*Net
$lsnrctlstatus
LSNRCTLforLinux:Version10.2.0.2.0Productionon02JAN200713:00:42 Copyright(c)1991,2005,Oracle.Allrightsreserved.
SQL>connect/assysdba Connected.
OracleEnterpriseManger: ArrancarelservidorwebdeOEM:
$emctlstartdbconsole
Accederahttp://host:1158/em
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 INSTALACINDEORACLE10g
17
PRACTICASTEMA1
1.1. Comprobar los requerimientos HW y SW para la instalacin de Oracle10gsobreLinux. 1.2.Comprobarlastareasdepreinstalacin. 1.3.ComprobarcuntoocupaelswdeOracle10g. 1.4.Buscarelficherodelogdelainstalacinyecharleunvistazo. 1.5.Comprobartareasdepostinstalacinrelacionadasconlaseguridad delaBD. 1.6.ConsultaelSimuladordeInstalacindeOracle10g. 1.7.RevisaralertasdeseguridadenOTN. 1.8.RevisarelmanualdeinstalacindeOracle10gparaLinux.
INSTALACINDEORACLE10g
18
19
TEMA2. DISEOYCREACINDEUNABD
ContiendasdeE/S DiccionariodeDatos(tablespaceSYSTEM). UtilidadesOracle(tablespaceSYSAUXen10g,yantesTOOLS). Procesos(DBWR,LGWR,ARCH). Tiposdesegmentos(tablas,ndices,temp,rollback). Datosestticosydinmicos. Dimensionarmemoria:SGA(SharedPool,BufferCache,RedoLog). DimensionarCPU. DimensionarficherosdelaBD(RedoLog,System,Sysaux,Temp, Rollback). CreacindelaBDconCREATEDATABASEyOMF. DataBaseConfigurationAssistant(DBCA).
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
20
DISEODELABASEDEDATOS ContiendasenlaE/S
EsmuyimportantetenerencuentalasposiblescontiendasenlaE/S: Contienda entre el DD y los datos en s. En el tablespace SYSTEM slo deberesidirelDDyelsegmentoderollbackSYSTEM. Entre las utilidades del tablespace SYSAUX (>=10g) y las aplicaciones, o conelDD.PuedesernecesarioundiscoparaelSYSAUX. Contiendaentreprocesos:DBWR,LGWRyARCH.Discosdiferentespara redologonlineyarchivado;yelrestodelaBD. Contiendaentretiposdesegmentos:datos,ndices,rollback,temp.Separar segmentosdedatos,ndices,rollbackytemp. Contiendaentredatosestticosydinmicos.Identificarlosdatosestticos (tablaspequeas:pases,provincias,tiposdeva,letrasdelnif,sexos,etc). Seaccedernconmuchafrecuenciaysloenlectura.Sinosedetectana priori, se pueden identificar usando la auditora (p.e. las que no tengan insert/update/deleteduranteundarepresentativo,ovariosdas). Untablespaceparacada reafuncionalocadaaplicacin(gestineconmica, gestindepersonal,gestinacadmica,gestindeinvestigacin,etc).
DISEOYCREACINDEUNABD
Administraci ndeOracle10g(Parte2)
21
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
DISEODELABASEDEDATOS Organizacindelostablespaces
Utilizartablespaceslocales(>=8i)congestinautomticadesegmentos(>=9i). Separar los ndices de los datos: se puede mover un ndice con "alter index rebuildtablespacetsp_indices;". Separar el UNDO (segmentos de rollback si <9i). Desde 9i, mejor la gestin automtica de UNDO. Podemos tener un tablespace de UNDO aparte, ms grande,paralastransaccioneslargasdeprocesosnocturnos.Siseoptaporla manual,creartablespaceespecialderollbackparalastransaccionesgrandes. Separar los segmentos temporales en un tablespace temporal. Adems, crear tablespaces temporales adicionales para cada usuario que genere muchos segmentos temporales. Si las aplicaciones usan tablas temporales globales, tambindebenresidirenuntablespacetemporalindependiente.Desde10g,se puededefinirungrupodetablespacesparaeltablespacetemporalpordefecto delaBD. Separarlasvistasmaterializadasenuntablespaceindependiente. Separar las tablas temporales de trabajo, como pueden ser las usadas para cargarinformacindesdeficheros(nohacerlodirectamenteenlastablasalas quevadirigidafinalmentelainformacin). Enlastablasparticionadas,separarlasparticionesendiferentestablespaces,al menoslosdatosvigentesdeloshistricos.
DISEOYCREACINDEUNABD
Administraci ndeOracle10g(Parte2)
22
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
DIMENSIONARMEMORIAEN10G
LaRAMdebealbergarnoslolaSGAdenuestraBD,sinotodoslosprocesosde la misma (PGAs), ms aquellos procesos necesarios en nuestro sistema (que no sondelaBD).AscomoelncleodeOracle. La SGA la dimensionamos con SGA_TARGET (nuevo en 10g, activa ASMM si statistics_levelvaleALLoTYPICAL),fijandoelmximoconSGA_MAX_SIZE. http://cursos.atica.um.es/oradoc102/server.102/b14231/create.htm#sthref383 Desde9ipodemosusarunpoolcompartidoparalasPGAs,dimensionndolocon PGA_AGGREGATE_TARGET(mnimo10M). Memoria Oracle 10g = Ncleo Oracle + PGA_AGGREGATE_TARGET + SGA_MAX_SIZE. MemoriamximaparaOracle:80%delaRAM(RAM*0.8): Mnimode40Mparaelncleo: 20%paraPGA_AGGREGATE_TARGET:(RAM*0.8ncleo)*0.2 80%paraSGA_MAX_SIZE:(RAM*0.8ncleo)*0.8 Ejemplo:supongamosRAM=1024Myncleo=70M PGA_AGGREGATE_TARGET=(1024*0.870)*0.2=149M SGA_MAX_SIZE=(1024*0.870)*0.8=599M
Env$pga_target_advice,buscar1filaconESTD_OVERALLOC_COUNT=0.
DISEOYCREACINDEUNABD
Administraci ndeOracle10g(Parte2)
23
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
VERMEMORIAENLINUX
Lamemorialibre(ylausada)lapodemosverconfreem.
$freem totalusedfreesharedbufferscached Mem:404139924901522487 /+buffers/cache:1353 13532688 Swap:20473731673 $ipcsm Segmentosmemoriacompartida keyshmidpropietariopermsbytesnattchestado 0x6abd8a345537793oracle66010276044813 ...
Lossegmentosdememoriacompartida(SGAs)sevenconipcsm.
La memoria necesaria para el ejecutable de oracle, la podemos ver con el comandounixsize. Lamemoriaasociadaacadaservidordedicado(unoporsesin):
$size$ORACLE_HOME/bin/oracle textdatabssdechexfilename 7409796828830812130474507580470e53c/u01/app/oracle/product/10.2.0.1/bin/oracle
Administraci ndeOracle10g(Parte2)
24
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
DIMENSIONARLASGA SharedPoolyBufferCach
DB_CACHE_SIZE+[DB_KEEP_CACHE_SIZE+DB_RECYCLE_CACHE_SIZE+DB_nk_CACHE_SIZE] + SHARED_POOL_SIZE + [LARGE_POOL_SIZE + JAVA_POOL_SIZE + STREAMS_POOL_SIZE] + LOG_BUFFERS+1MB Nota: streams_pool_sizeslo >=10g. Puede haber hastacuatro DB_nk_CACHE_SIZE, con n= 2, 4,8, 16,32k(unodelostamaosdebloqueeselqueusaDB_CACHE_SIZE.)
EltamaoaproximadodelaSGA(SGA_TARGETsi>=10g)eselsiguiente:
En 10g se simplifica mucho: SGA_MAX_SIZE y SGA_TARGET. Si dejamos los demsacero(db_cache_size,shared_pool_size,large_pool_size,java_pool_size ystreams_pool_size),Oraclerepartesga_targetautomticamenteentreellos. Siqueremosfijarmanualmenteshared_pool_sizey/odb_cache_size(<=9i): MemoriarecomendadaparatodaslasSGAsdeunservidor: ParaservidoresconRAM<=1Gb:RAM*0.55 ParaservidoresconRAM>1Gb:RAM*(0.60a0.75) Memoriarecomendadaporinstancia:(RAM*0.55)/ninstancias. Sharedpool=memporinstancia*0.45 Buffercache=memporinstancia*0.45 Se puede ver el overhead necesario en shared pool para el arranque en V$SGAINFO(>=10g).En10geloverheadrestadeshared_pool_size(en9ino). Recomendacionesdeespacioparasharedpoolybuffercach(>=9i): V$SHARED_POOL_ADVICE V$DB_CACHE_ADVICE(parmetrodb_cache_advice=ON) Nota:STATISTICS_LEVELdebevalerALLoTYPICAL
DISEOYCREACINDEUNABD
Administraci ndeOracle10g(Parte2)
25
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
DIMENSIONARLASGA SharedPoolyLogBuffer
V$SHARED_POOL_ADVICE.VersiinteresaredimensionarSharedPool.
SELECT shared_pool_size_for_estimate "Size of Shared Pool in MB", shared_pool_size_factor"SizeFactor",estd_lc_time_saved"TimeSavedin sec"FROMv$shared_pool_advice; SizeofSharedPoolinMBSizeFactorTimeSavedinsec 24.5525 481525 721.5525 962526 selectcomponent,current_size,min_size,user_specified_sizefrom v$sga_dynamic_components; RPAD(COMPONENT,30)CURRENT_SIZEMIN_SIZEUSER_SPECIFIED_SIZE sharedpool50331648251658240 largepool419430400 selectrpad(component,28),oper_type,initial_size/1024/1024"INITIAL", FINAL_SIZE/1024/1024"FINAL",statusfromv$sga_resize_ops; RPAD(COMPONENT,28)OPER_TYPEINITIALFINALSTATUS DEFAULTbuffercacheSTATIC4440COMPLETE sharedpoolGROW4044COMPLETE
V$SGA_DYNAMIC_COMPONENTSyV$SGA_RESIZE_OPS.Vergestindinmica.
ElparmetrodelinitLOCK_SGA=trueevitaquesehagaswappingdelaSGA. LOG_BUFFERnonecesitamsdepocoscientosdeKb,inclusoenunsistema con mucha carga, 1MB posiblemente sea suficiente. Asignar ms de 3Mb es intilyaqueelLGWRescribecuandoelbuffersellena1/3o1Mb.
DISEOYCREACINDEUNABD
Administraci ndeOracle10g(Parte2)
26
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
DIMENSIONARLACPU
SipartimosdeunasolaCPU,podemosdetectarquellegaasulmitedeusosi:
PorcentajemximodeocupacindeCPU=90%. PorcentajemximodeprocesamientoOS/usuario=40/60%. Nota:podemosusarloscomandosLinuxtopysar.
$sar 18:20:00CPU%user%nice%system%iowait%idle 18:30:00all0,200,000,060,2099,54 18:40:00all0,160,000,170,1299,54 Media:all0,080,000,050,3399,54
SihayvariasCPUs,lacargadebeestarbalanceada.ParaunaBDmedianacon unacargarazonable,loidealseradisponeralmenosde2CPUs. Paraunainstanciaconservidoresdedicados(sinMTS),tendremosunproceso servidorporcadasesin,ademsdelosprocesosbackground.Porejemplo,para 100 usuarios simultneos tendremos un mnimo de 100 procesos nuevos en nuestro sistema. Probar con MTS si se degrada el uso de CPU por muchas sesionesconcurrentes(MTSesmejorsihaymuchasconexionesalaBD). Parmetrosquelimitanelnmerodeprocesosydesesiones:
PROCESSES.Nmeromximodeprocesosenlainstancia. SESSIONS.Pordefecto1.1*PROCESSES;sinembargosiusamosMTShabrque subirlo(conMTSsepuedeusarshared_server_sessionsparalimitaresassesiones).
Administraci ndeOracle10g(Parte2)
DISEOYCREACINDEUNABD
27
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
DIMENSIONARFICHEROS RedoLog
Redo=50a100M(cadafichero). EltamaoptimosepuedesacardelacolumnaOPTIMAL_LOGFILE_SIZE delavistaV$INSTANCE_RECOVERY. Al menos tres grupos y, si disponemos de discos, los multiplexaremos en dos discos(dosmiembrosporgrupo). Empezaremosconficherosde50100M,intentandoqueloslogswitchsucedan cada2030minutos. Siqueremosqueloscheckpointscoincidanconloslogswitch(ycomomximo cada30minutos),asignaremoslosparmetros:
log_checkpoint_interval=0 log_checkpoint_timeout=1800(30minutos,pondremos0siqueremosquecoincidan conellogswitch,independientementedeltiempotranscurrido). FAST_START_MTTR_TARGET=0(desactivafastrecoveryinstance). Nota:log_checkpoint_to_alert=truemuestracheckpointsenficheroalert.log.
Administraci ndeOracle10g(Parte2)
28
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
DIMENSIONARFICHEROS System,Sysaux,TempyRollback
SYSTEM>=260M.Activaremoselautoextendconnext=10M. SYSAUX.Estimartamaocon$ORACLE_HOME/rdbms/admin/utlsyxsz.sql,o: 500M,BDpequea(2cpu,10sesionesactivas,500objetos(tablas/ndices). 2GparaBDmediana(8cpu,20sesiones,5000objetos). 5GparaBDgrande(32cpu,100sesiones,50000objetos). TEMP>=100M.Tablespaceslocalesconuniformsize1M(simuchassesiones simultneas,256K).Conpga_aggregate_targetseignora*_area_size. Lossegmentostemporalesocupanespacioigualqueunatabla:paraordenar unatablade100M,portodassuscolumnas,necesitar100M. Operaciones que necesitan segmentos temporales: SELECT ORDER BY, GROUPBY,DISTINCT,UNION,INTERSECTorMINUS,nonindexedjoins, CREATE INDEX, CREATE/ENABLE PRIMARY/UNIQUE KEY CONSTRAINT,temporarytables,TemporaryLOBs,Statisticscollection. RBS>=100M.Usarmodoauto(nopermitesettransaction).Siusamosmodo manual,crearunRSporcada4sesiones,y20extensionesinicialescadauno. Optimaldebesersuficientepara90%detransacciones. V$UNDOSTAT.EstadsticasdeUNDOcada10minutos,incluyendobloques deundoylaconsultamslarga(ensegundos).
SELECTTO_CHAR(BEGIN_TIME,'DD/MM/YYYYHH24:MI')"TIME",UNDOTSN,UNDOBLKS, TXNCOUNT,MAXQUERYLENFROMV$UNDOSTAT; TIMEUNDOTSNUNDOBLKSTXNCOUNTMAXQUERYLEN 18/01/200710:40368163385166
DISEOYCREACINDEUNABD
Administraci ndeOracle10g(Parte2)
29
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
FICHERODEPARMETROS
Para arrancar la instancia, el servidor Oracle tiene que leer el fichero de parmetros de inicializacin (spfile o init), cuya ubicacin predeterminada es $ORACLE_HOME/dbs. Elficherodeparmetrosdeinicializacinpuedeserdedostipos: Init: se trata de un fichero de texto, editable, cuyo nombre sigue el patrn init$ORACLE_SID.ora. Spfile: es un fichero binario, no editable pero visualizable, cuyo nombre sigueelpatrnspfile$ORACLE_SID.ora. Secrea,apartirdeuninit,con:
CREATESPFILE[='nombre']FROMPFILE[='nombre'];
Nota1.Siseomitenlosnombres,tomalosvalorespordefecto. Nota2.LaBDnopodrabrirelnuevospfilehastaelsiguientearranque. Nota2.Sepuedecrearuninitapartirdeunspfile,invirtiendolasintaxis.
Losparmetrosdelspfilesemodificancon:
Administraci ndeOracle10g(Parte2)
DISEOYCREACINDEUNABD
30
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
EJEMPLODEINIT.ORA
SuponemosRAM=1Gb,unmximode50sesionessimultneas,checkpointscada30min,gestin automticadePGAs(RAM*0.80*0.20,restoSGA): db_name=CURSOxy #NombredelaBD. compatible=10.2.0 background_dump_dest=/u01/app/oracle/admin/CURSOxy/bdump core_dump_dest=/u01/app/oracle/admin/CURSOxy/cdump user_dump_dest=/u01/app/oracle/admin/CURSOxy/udump max_dump_file_size=10240#tamaomximoficherotrazade5M control_files=(/u02/oradata/CURSOxy/control1.ctl, /u03/oradata/CURSOxy/control2.ctl) undo_management=auto #GestinautomticadeRollback undo_tablespace=undo_rbs #Tablespacedeundo pga_aggregate_target=160M#EspaciomxtodaslasPGAs(fueradeSGA) sga_max_size=640M #TamaomximodelaSGA(RAM*0.8*0.8) sga_target=512M#GestinautomticadelrepartodelespaciodeSGA db_cache_size=0#Oracleasignareltamaoautomticamente shared_pool_size=0#Oracleasignareltamaoautomticamente large_pool_size=0 java_pool_size=0 log_buffer=3145728 #Tamao,enbytes,delacachderedo(3Mb) log_checkpoint_interval=0#desactivacheckpointinterval log_checkpoint_timeout=1800#checkpointcomomuchocada30minutos. processes=50 #Nmx.deprocesos(background+sesiones) remote_login_passwordfile=EXCLUSIVE nls_territory=spain nls_language=spanish
Administraci ndeOracle10g(Parte2) DISEOYCREACINDEUNABD
31
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
CREARLABASEDEDATOS
ParacrearunaBDnecesitamos:
ParaubicarlosficherosquecomponenlaBD:
ConectarnosalservidorOraclecomoSYSASSYSDBA,autenticndonoscontra elS.O.ousandounficherodeclaves. SuficientememoriaparaarrancarlainstanciayespacioendiscoparacrearlaBD. Guardaremos,almenos,doscopiasdelficherodecontrol,endiscosseparados. Multiplexaremoslosredologendiscosdiferentes. Separaremos los ficheros de datos que provoquen contencin en disco; por ejemplo:datos,ndices,tempyrollback.
La BD la podemos crear con el asistente grfico (en Linux dbca) o con el comandoCREATEDATABASE:
Crearemosunficheroinit.ora,ysiqueremos,unspfile.ora. ArrancaremoslasinstanciaconSTARTUPNOMOUNT. CrearemoslaBDconelcomandoCREATEDATABASE. Ejecutaremos los scripts catalog.sql, catproc.sql y catexp.sql que estn en $ORACLE_HOME/rdbms/admin.
Desde10gsepuedeborrarconDROPDATABASE;(slomontada).
DISEOYCREACINDEUNABD
Administraci ndeOracle10g(Parte2)
32
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
EJEMPLOCONCREATE DATABASE
connect/assysdba startupnomount
CREATEDATABASE"CURSOxy" maxdatafiles254 maxinstances1 maxlogfiles32 charactersetWE8ISO8859P15 DATAFILE'/u02/oradata/CURSOxy/system01.dbf'SIZE260M AUTOEXTENDONNEXT10M EXTENTMANAGEMENTLOCAL SYSAUXDATAFILE'/u02/oaradata/CURSOxy/sysaux01.dbf'size100M EXTENTMANAGEMENTLOCALSEGMENTSPACEMANAGEMENTAUTO UNDOTABLESPACEUNDO_RBS DATAFILE'/u03/oradata/CURSOxy/rbs01.dbf'SIZE10M DEFAULTTABLESPACEUSERS DATAFILE'/u02/oradata/CURSOxy/users01.dbf'SIZE10M DEFAULTTEMPORARYTABLESPACETEMP TEMPFILE'/u03/oradata/CURSOxy/temp01.dbf'SIZE10M EXTENTMANAGEMENTLOCALUNIFORMSIZE64K logfile'/u04/oradata/CURSOxy/redo01.log'SIZE10M, '/u04/oradata/CURSOxy/redo02.log'SIZE10M, '/u04/oradata/CURSOxy/redo03.log'SIZE10M;
rem***CREACIONDELASVISTASDELDD*** @$ORACLE_HOME/rdbms/admin/catalog.sql @$ORACLE_HOME/rdbms/admin/catproc.sql Administraci ndeOracle10g(Parte2)
DISEOYCREACINDEUNABD
33
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
ORACLEMANAGEDFILES(OMF)
OMF permite que Oracle se encargue de la creacin de los ficheros que componenlaBD,simplificandolaadministracindelamisma. OMFseactivamediantedosparmetrosdeinicializacin:
DB_CREATE_FILE_DEST.Defineeldirectoriodondeseubicarnlosficheros. DB_CREATE_ONLINE_LOG_DEST_N. Establece los directorios donde se guardarn(multiplexados)losficherosredolog;dondeNpuedevalerde1a5.
Nota.Sepuedenactivarambosparmetrososlounoellos.
EjemploparacrearunaBD,usandoOMF,separandolosficherosredologyde controldelresto:
Parmetrosdeinicializacin(indicandodoscopiasderedologycontrol):
DB_CREATE_FILE_DEST='/u02/oradata/CURSOxy' DB_CREATE_ONLINE_LOG_DEST_1='/u03/oradata/CURSOxy' DB_CREATE_ONLINE_LOG_DEST_2='/u04/oradata/CURSOxy'
CreacindelaBD:
CREATEDATABASEDEFAULTTABLESPACEUSERS DEFAULTTEMPORARYTABLESPACETEMP UNDOTABLESPACEUNDO_RBS;
Administraci ndeOracle10g(Parte2) DISEOYCREACINDEUNABD
34
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
DBCA(DataBaseConfiguration Assistant)
En Unix/Linux se ejecuta con dbca. Se trata de un asistente grfico que permite: CrearunaBD.Apartirdeplantillaspredefinidas,quecontienen: Slolaestructura.Sepuedencambiartodoslosparmetrosdelinit. Tambinconficheros:nosepuedecambiarnada. AadiropcionesaunaBDexistente(Java,Intermedia,Spatial,OLAP,etc). BorrarunaBD. GestionarplantillasdeBD:crearunaplantillaapartirdeotra,oapartirde slolaestructuradeunaBD,otambinincluyendolosdatosdelamisma.
Administraci ndeOracle10g(Parte2)
DISEOYCREACINDEUNABD
35
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
VISTASDELDD
V$DATABASE(Basededatos). V$INSTANCE(Instancia). V$SGAINFO(SGA).Nuevoen10gesV$SGAINFO. V$SGA_DYNAMIC_COMPONENTS(ZonasdinmicasdelaSGA). V$SGASTAT(SGAdetallada). V$SHARED_POOL_ADVICE(EstimacionesdetamaodelaSharedPool) V$BUFFER_POOL(Buffersenlacachdedatos) V$DB_CACHE_ADVICE(Estimacionesdb_cache_size) V$PGA_TARGET_ADVICE(Estimacionespga_aggregate_target) V$SQLAREA(SentenciasSQL). V$PROCESS(Procesos). V$BGPROCESS(Procesosbackground). V$DATAFILE(FicherosdedatosdelaBD). V$CONTROLFILE(FicherosdecontroldelaBD). V$LOGFILE(FicherosredologdelaBD).
DISEOYCREACINDEUNABD
36
PRACTICASTEMA2
2.1.DisearunaBDteniendoencuentalascontiendasdeE/Sylaorganizacin delostablespacesbsicos.Suponer4discos:/u01(SW)y/u02,/u03,/u04(BD). 2.2. Crear un init.ora, diseando requerimientos de memoria, suponiendo 4Gb de RAM y 21 instancias con 10 usuarios cada una. Se puede usar un mximo del64%delaRAMparalasSGAsdetodaslasbasesdedatos.Loscheckpoints sucederncuandoselleneelficheroredology,comomximo,cada30minutos. La gestin de rollback ser automtica. Tendremos dos copias del fichero de controlen/u02y/u03. 2.3. Crear la BD que hemos diseado anteriormente, y para la que tambin hemos creado un init.ora. Hacerlo manualmente con CREATE DATABASE. El nombredelaBDserALUxy.Antesdelanzarelcomandodecreacin,pontede acuerdoconuncompaeroparaquenolohagaisalavez. 2.4.CrearlamismaBDusandoOMF,ycambiandoelnombreporOMFxy. 2.5.ConsultarelSimuladordeDBCA.
DISEOYCREACINDEUNABD
37
TEMA3 ESTRUCTURASDEALMACENAMIENTO
38
Bloques,extensionesysegmentos. VariostamaosdebloqueenlamismaBD. Formatodelbloque. Generacindelespaciolibreenunbloque. Estructuradelafila. Extensionesysuasignacin. Segmentos. Gestinautomticadelespaciodelossegmentos. Comprimirlosdatosdeunsegmento. Mtodosdeaccesoadatos:ndicesBtreeyBitmap. RECYCLEBINydroptable. EnvodecorreoconUTL_MAIL. Encolary/osuspenderlaBD.
39
BLOQUES,EXTENSIONESY SEGMENTOS
Launidadmnimadeasignacindeespacioesel bloque de datos (mltiplo del bloque del S.O.: 2, 4, 8, 16 y 32Kb); de modo que un conjunto contiguodebloquesformanunaextensin.Ylas extensiones forman segmentos de una determinada estructura de datos (tablas, ndices, rollback,temporal,etc). Oracle asigna espacio a un segmento en unidades de una extensin. Todas las extensionesdeunmismosegmentoresidenenel mismotablespace. Oracle pide espacio en mltiplos del bloque de datos, cuyo tamao se indica con el parmetro db_block_size.
Administraci ndeOracle10g(Parte2)
ESTRUCTURASDEALMACENAMIENTO
40
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
DIFERENTESTAMAOSDE BLOQUEENLAMISMABD
Aunqueelparmetrodb_block_sizedefineeltamaodelbloqueestandardelaBD,se pueden usar otros tamaos (>=9i) indicndolo a nivel de tablespace, y definiendo la correspondientecachdedatosconelnuevotamaodebloque. LaDatabaseBufferCacheconstadetrescachsindependientes: DB_CACHE_SIZE. Dimensiona la cach por defecto, que siempre existe y cuyo tamaonopuedevalercero. DB_KEEP_CACHE_SIZE.Dimensionalacachdondeseguardarnlosbloquesde tablasqueseusanconmuchafrecuencia. DB_RECYCLE_CACHE_SIZE. Dimensiona la cach que almacena los bloques de lastablasqueseusanmuypoco. ElusodeunauotracachloindicaremosconelparmetroBUFFER_POOL,dela clausulaSTORAGEdelatabla(aniveldeparticinno):keep,recycleodefault. DB_nK_CACHE_SIZE(>=9i).Dimensionahasta4cachscontamaodebloqueno estandar,conn=2,4,8,16,32. Alcrearuntablespace,conlaclausulaBLOCKSIZE,sepuedeespecificarunatamaode bloquenoestandar.ParaellodebeestardefinidoelparmetroDB_CACHE_SIZEy,al menos,unDB_nK_CACHE_SIZE;deformaquencoincidaconelvalorqueacompaaa BLOCKSIZE. No se pueden indicar tamao de bloque no estandar para tablespaces temporales.
ESTRUCTURASDEALMACENAMIENTO
Administraci ndeOracle10g(Parte2)
41
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
FORMATODELBLOQUE
Cabecera: informacin general del bloque (direccin del bloque, tipo de segmento,etc).4bytes. Directoriodetabla:informacinsobrela tabla.4bytes. Directoriodefilas:informacinsobrelas filasqueactualmentecontieneelbloque (direcciones,etc).2bytesporfila. Overhead (es el conjunto de los tres anteriores). Como media, su tamao oscilaentre84y107bytes. Datos
Espacio libre: se usa para inserts y updates, y tambin para registrar las transacciones(transactionentries,unos23bytesporcadauna).
ESTRUCTURASDEALMACENAMIENTO
Administraci ndeOracle10g(Parte2)
42
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
GENERACIONDEESPACIOLIBRE ENUNBLOQUE
Oraclerecomiendaelusodelagestinautomticadelespaciolibre(>=9i). Sentencias que generan espacio libre en un bloque: delete y update. Dicho espacioquedardisponibleparalosinsertsposterioressi: Elespaciolibrenotieneporquestarcontiguo.Slosecompactarsialhacer uninsert/updatehaysuficienteespaciolibre,peronoestcontiguo. Row Chaining (y Migration). Si una nueva fila no cabe en un bloque, ser almacenada en una cadena de bloques (dos o ms). Si se trata de una fila queaumentadetamaoporunupdate,ynocabeenelbloque,sucontenido sermigradoaotrobloque,manteniendounpunteroenelbloqueoriginal. Se reservar, al menos, el espacio libre indicado por PCTFREE (%) para actualizaciones. Cuando el espacio libre baje a pctfree, no se permitirn ms inserciones(hastaqueelespacioocupadonobajedePCUSED). Nota:lostablespacescongestinautomticadesegmentos(>=9i)no necesitanPCTUSED.
ESTRUCTURASDEALMACENAMIENTO
SehacealcrearuntablespaceconSEGMENTSPACEMANAGEMENTAUTO.
Elinsertsucedeenlamismatransaccinqueliberaespacio. Sucedeenotratransaccindespusdelcommitdelaprimera.
Administraci ndeOracle10g(Parte2)
43
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
ESTRUCTURADELAFILA
Estructuradelafila: Cabecera:3bytes(deellosunbyteparancolumnas). Rowid:6bytes(1paraelfichero,4paraelbloquey1parafiladentrodel bloque). Cabeceradecolumna:1byte(o3bytessicolumna>250bytes). Columna:datos(sinull,noocupaespacio). Cabeceradecolumna. Columna... Longituddelascolumnas: char(n):nbytes. varchar2(n):hastanbytes. Date:8bytesdesde9i(antes7bytes) number(n,m):n/2(enteromayor),ms1byte.Porejemplo:number(9,2), 9/2=4.5,5+1=6.
Administraci ndeOracle10g(Parte2)
ESTRUCTURASDEALMACENAMIENTO
44
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
EXTENSIONESYSUASIGNACIN
Una extensin es una unidad lgica de almacenamiento compuesta por un conjuntodebloquescontiguos.Unaomsextensionescomponenunsegmento. Oracle recomienda usar tablespaces manejados localmente (>=8i), con extensiones de tamao uniforme (uniform size) o variable (autoallocate), donde yanosirvenlosparmetrosinitial,next,pctincrease,minextents,maxextentsdel defaultstorage:
UniformSize.Puedesindicareltamaodelaextensin(almenos5bloques)ousarel valor por defecto (1M). Los tablespaces temporales locales slo pueden usar este tipodeasignacindeextensiones. Autoallocate.PuedesdefinirlaextensininicialyOracledeterminaeltamao ptimo para las siguientes (tamao mnimo 64Kb). Es el defecto para tablespaces permanentes. Sieltablespacesecreacongestinautomticadesegmentosy db_block_size>=16K,eltamaomnimodelaextensinser1M.
Paraasignarunaextensinaunsegmento,enuntablespacelocal,Oraclebusca enelbitmapdelficheroelnmerorequeridodebloqueslibrescontiguos. Las extensiones vacas no se devuelven al tablespace hasta que se borra el objeto (drop table/cluster), a no ser que hagamos TRUNCATE ... DROP STORAGE;oALTERTABLE...DEALLOCATEUNUSED;.
ESTRUCTURASDEALMACENAMIENTO
Administraci ndeOracle10g(Parte2)
45
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
SEGMENTOS
Un segmento es un conjunto de extensiones que contienen todos los datos de una estructura lgica de almacenamiento especfica, dentro de un tablespace (segmentosdedatos,segmentosdendice,segmentostemporales,etc). El primer bloque de un segmento (Header) contiene un directorio de las extensionesquelointegran. Segmentodedatos:esunatablanormal,ounaparticindeunaparticionada,o unclusterdetablas. Segmentode ndices: ndicenoparticionado,oparticindeunoparticionado.No tienenqueestarenelmismotablespacequelastablascorrespondientes. Segmentos temporales: Oracle los usa para hacer ordenaciones, que no caben en memoria: create index, select ... order by, select distinct, select ... group by, select...union,select...intersect,select...minus.Tambinseusanparacrear tablastemporalesysusndices(sontablasquecontienendatossloduranteuna transaccin o una sesin). Se puede mejorar su rendimiento ajustando el parmetro sort_area_size. Sin MTS, usar pga_aggregate_target para todas las reasdesortdetodaslassesiones(todaslasPGAs).
ESTRUCTURASDEALMACENAMIENTO
Administraci ndeOracle10g(Parte2)
46
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
GESTIONAUTOMATICADEL ESPACIODELOSSEGMENTOS
Desde la versin 9i se incluye la posibilidad de gestionar el espacio de los segmentosautomticamente,siendomsfcil,conmejorutilizacindelespacio, ytambinmejorrendimientoenlasoperacionesconcurrentesdeinsercin. Cadasegmentocontieneunbitmapquedescribeelestadodeocupacindecada bloque,yqueseguardaenunconjuntoindependientedebloques. Sepuedeactivarsloparalostablespacespermanentesmanejadoslocalmente, exceptoelSYSTEM:
CREATETABLESPACETSP_CURSO DATAFILE'/u02/oradata/CURSO/tsp_curso01.dbf'SIZE10M EXTENTMANAGEMENTLOCALUNIFORMSIZE64K SEGMENTSPACEMANAGEMENTAUTO; SeignoranlasclausulasPCTUSED,FREELISTSyFREELISTSGROUPS.
Una vez creado un tablespace local con gestin automtica del espacio de los segmentos,notienevueltaatrs. Oraclerecomiendalagestinautomticaporqueobtienemayorrendimientoyes muchomsfcildemantener. YanohacefaltaPCTUSED.
ESTRUCTURASDEALMACENAMIENTO
Administraci ndeOracle10g(Parte2)
47
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
COMPRESIONDELOS SEGMENTOSDEDATOS
Podemos indicar la clausula COMPRESS al crear una tabla (por defecto ser NOCOMPRESS),paraqueOracleintentecomprimirlosdatos(exceptoparatipos LOB y tablas IOT). Esto es muy til en entornos con muy pocas actualizaciones (insert/update),comodatawarehouse. Sereduceelusodediscoymemoria(cachdedatos)yserecomiendaparalas operacionesdeslolectura. Losdatossecomprimen,encadabloque,eliminandolosvaloresrepetidosdeuna mismacolumna,queseguardanenunatabla.Elfactordecompresinsermayor en bloques con valores repetidos. Se pueden reorganizar las filas agrupando valores repetidos de una columna en el mismo bloque: create table as select orderby,ordenandoporcolumnasconbajacardinalidad. Al crear un tablespace, podemos indicar COMPRESS en la clausula DEFAULT; paraquepordefecto,secomprimanlosdatosenlastablasquecontenga.
Administraci ndeOracle10g(Parte2)
ESTRUCTURASDEALMACENAMIENTO
48
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
METODOSDEACCESOADATOS INDICESBTREEYBITMAP
Usaremos ndices Btree, en general, cuando vayamos a hacer consultas que accedenfrecuentementeanomsdel1015%delasfilasdelatabla. Comprobarsiunndiceseusa(>=9i): Vistasdondeverestadsticasdendices: dba_indexes:dbms_stats.gather_index_stats('owner','indice'); index_stats:analyzeindexi_nombrevalidatestructure; v$segment_statistics(statistics_level=typicaluall) Falsosmitossobredegradacindendices: Coneltiempoelarbolbtreepuedeperderelbalanceo.NUNCA. Conlosborradossevaperdiendoespacio.NO,elespaciosereutiliza. Silosnivelesdelrbolllegana'x',elndicesevuelveineficiente.NO. Engeneralnosernecesario,peropodemosreconstruirunndice: alterindexi_nombrerebuild; IndicesBitmap;muytilesparaaccesosenslolecturasobrecolumnasdebaja cardinalidad, en tablas muy grandes (aplicaciones DSS). Muy eficientes para predicados OR. No usarlos si se hacen updates con frecuencia (aplicaciones OLTP).Bloqueosaniveldesegmentodebitmap(nodefila). Las IOT son tablas almacenadas en un ndice Btree. Son tiles para tablas estaticas que se acceden con frecuencia por la clave primaria (casi todas sus columnasformapartedelaPK),yquenovanatenerningnotrondice.
ESTRUCTURASDEALMACENAMIENTO
createbitmapindexi_b_nombreont_tabla(cols)tablespacetsp_nombre;
Administraci ndeOracle10g(Parte2)
49
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
RECYCLEBINYDROPTABLE
RECYCLEBIN(>=10g).ContenedordondeOracleguardalastablas borradas(anoserqseborreconlaopcinPURGE). DBA_RECYCLEBIN.Vertodaslastablasborradas.En USER_RECYCLEBINoRECYCLEBIN,slolasmas.TbconSHOW RECYCLEBIN(desdesql*plus). Sepuededesactivarconparmetrodelinitrecyclebin=off(pordefecto on).TbconALTERSYSTEM|SESSION.... Recuperartablaborrada: FLASHBACKTABLEtablaBorradaTOBEFOREDROP; Borrardefinitivamente: PURGETABLEtabla;(tbPURGEINDEX)
SlovanaRECYCLEBINlosndicesdelastablasborradas(noconDROP INDEX)
Administraci ndeOracle10g(Parte2)
50
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
ENVIARCORREODESDEORACLE PaqueteUTL_MAIL
El paquete UTL_MAIL (>=10g) no se instala por defecto por razones de seguridad. InstalarUTL_MAILdesdeelSYS: SQL>@$ORACLE_HOME/rdbms/admin/utlmail.sql SQL>@$ORACLE_HOME/rdbms/admin/prvtmail.plb ParapoderusarUTL_MAILhayquedefinirelparmetroSMTP_OUT_SERVER, enelinit: smtp_out_server='miServidorDeCorreo.miDominio' UnavezarrancadalaBDconelnuevoparmetro,podremosenviarunmensaje conutl_mail.send: SQL>exec utl_mail.send('remitente@dominio','destinatario@um.es',nu ll,null,'PruebadesdeOracle10g','Lafechaactuales'|| to_char(sysdate,'dd/mm/yyyyhh24:mi:ss')) PL/SQLproceduresuccessfullycompleted.
ESTRUCTURASDEALMACENAMIENTO
Administraci ndeOracle10g(Parte2)
51
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
ENCOLARYSUSPENDERLABD QuiesceySuspend
Encolar la BD (>=9i). Util si el DBA necesita que no haya transacciones ni consultasconcurrentesalasuya.Esperaaqueterminentransacciones/consultas (se pueden ver en V$BLOCKING_QUIESCE) e impide nuevas (excepto de SYS/SYSTEM).SlodesdeSYS/SYSTEM.V$INSTANCE.ACTIVE_STATE: ALTERSYSTEMQUIESCERESTRICTED; ALTERSYSTEMUNQUIESCE; Suspender la BD (>=9i). Util para copias de seguridad en caliente. Suspende E/S a ficheros de datos y control (los tablespaces deben estar en modo hot backup con ALTER TABLESPACE BEGIN BACKUP). Slo SYS/SYSTEM. V$INSTANCE.DATABASE_STATUS. Ojo !!!, no cerrar la sesin que hace el SUSPENDpueseslanicaquepuedehacerRESUME:
ALTERTABLESPACEnomtspBEGINBACKUP; ... ALTERSYSTEMSUSPEND; //CopiamosficherosdelaBD(necesitarrecuperarla instancia,puesnosehacecheckpoint). ALTERSYSTEMRESUME; ALTERTABLESPACEnomtspENDBACKUP; ...
Administraci ndeOracle10g(Parte2) ESTRUCTURASDEALMACENAMIENTO
52
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
VISTASDELDD
DBA_TABLESPACES(TablespacesdelaBD). DBA_SEGMENTS(Segmentosquehayenlostablespaces). DBA_EXTENTS(Extensionesquecomponenlossegmentos). DBA_FREE_SPACE(Extensioneslibresencadatablespace). DBA_INDEXES(IndicescreadossobretablasdelaBD,conestadsticas). INDEX_STATS(estadsticasdendices) V$SEGMENT_STISTICS(estadsticasdesegmentos) DBA_RECYCLEBIN(objetosborradosconDROP,sinindicarPURGE) V$INSTANCE(Datosdelainstancia,incluyendosiestencoladay/o suspendida) SELECTDBMS_METADATA.GET_DDL('TABLE','T1')FROMDUAL;(muestrala sentenciaDDLparacrearlatablaT1). SELECTDBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT', USUARIO');(muestralassentenciasGRANTqotorganalusuariolosprivilegios quetiene.AdemsdeOBJECT_GRANT,sepuedeindicarSYSTEM_GRANTy ROLE_GRANT).
ESTRUCTURASDEALMACENAMIENTO
Administraci ndeOracle10g(Parte2)
53
JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
PRACTICASTEMA3
3.1.ComprobareltamaodelbloquedelaBD.Cuntascachsdedatos haydefinidas?. Definirla cachkeepcon1M.Definirtambin una cach parabloquesde4Kb,con1M. 3.2. Crear un tablespace SEGAUTO con gestin automtica de segmentos. 3.3.CrearunatablaTABLA01eneltablespaceanterior,conunacolumna VARCHAR2(1000). Insertar tres filas de forma que ocupe varias extensiones. Borrar todas las filas con delete y comprobar las extensiones de la tabla. Hacer truncate table y comprobar de nuevo el espacioocupadoporlatabla. 3.4.CrearunatablaTABLA02conunasolacolumnavarchar2(100);yotra llamadaTABLA02COMPRIigualquelaanterior,peroconcompresinde datos. Insertar 1000 filas en TABLA02 y, luego, esas mismas 1000 en TABLA02COMPRI.Cuntosbloquesnecesitacadatablaparaalmacenar lasmismasfilas?
ESTRUCTURASDEALMACENAMIENTO
54
PRACTICASTEMA3
3.5. Crear tablespace TSP4K con tamao de bloque de 4Kb. Crear una tablaTABLA03,igualqueTABLA01,ycomprobarcuantosbloquesocupan lasdosycompararlosdatos. 3.6. Comprobar los parmetros pga_aggregate_target, workarea_size_policy y sort_area_size. Se puede poner pga_aggregate_target=0?cmodesactivarpga_aggregate_target? 3.7. Crear una TABLA04 en el tablespace SEGAUTO, con cuatro columnas:c1char(2),c2varchar2(10),c3dateyc4number(10,2).Estimar eltamaomediodelafila,yelnmeromediodefilasporbloque.insertar 100 filas en la tabla , calcular las estadsticas y comprobar los datos calculados (nmero de filas, nmero de bloques y longitud media de la fila). 3.8. Instalar el paquete UTL_MAIL y configurar el parmetro del init smtp_out_server.Hacerunapruebadeenvodecorreoconutl_mail.send.
ESTRUCTURASDEALMACENAMIENTO
55
56
57
NUEVAINFRAESTRUCTURA
Nueva infraestructura = AWR + Time Model + ASH (El parmetro STATISTICS_LEVELdebevalerTYPICALuALL). AutomaticWorkloadRepository(AWR).Vistasv$+volcadoadisco,pordefecto cada60minymx7das(procesosMMON,MMNL).MejorqSTATSPACK. EXECUTEdbms_workload_repository.create_snapshot(); ActiveSessionHistory(ASH).Recopilamuestrascadasegundodelassesiones activas de V$SESSION: V$ACTIVE_SESSION_HISTORY, DBA_HIST_ACTIVE_SESS_HISTORY. Nuevo Time Model: estadsticas y mtricas relativas al tiempo consumido por lassesionesactivasenllamadasalaBD(consultas/actualizaciones). TimeModel(DBtime,DBCPU,etc):V$SYS_TIME_MODEL, V$SESS_TIME_MODEL. WaitClasses:V$SYSTEM_WAIT_CLASS,V$SESSION_WAIT_CLASS. Metrics(cada60seg):V$SYSMETRIC,V$SESSMETRIC,V$FILEMETRIC, V$EVENTMETRIC,V$WAITCLASSMETRIC,V$METRICNAME. OSstatistics.V$OSSTAT. AutomaticDatabaseDiagnosticMonitor(ADDM).Enbasealosdatosrecopilados por AWR y ASH, identifica problemas y sus posibles causas, proporcionando recomendacioneseindicandolosbeneficiosqseobtendrn. $ORACLE_HOME/rdbms/admin/addmrpt.sql
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
58
AUTOMATICWORKLOAD REPOSITORY(AWR)
Snapshots.ConfigenDBA_HIST_WR_CONTROL.Ejdecambioaintervalode30dascada 30min(expresadoenminutosysiintervalo=0nosecalculanmssnapshots): DBMS_WORKLOAD_REPOSITORY.modify_snapshot_settings(43200,30); DBMS_WORKLOAD_REPOSITORY.drop_snapshot_range(22,32);Borrarango Baselines.Parejadesnapshots(qyanoseborrarn). DBMS_WORKLOAD_REPOSITORY.create_baseline(210,220,'batchbaseline'); Snapshotsinicialyfinal,ynombreparaelbaseline DBMS_WORKLOAD_REPOSITORY.drop_baseline('batchbaseline','FALSE);Si TRUE,borralossnaphostsasociados InformesAWRen$ORACLE_HOME/rdbms/admin(consalidaenHTMLoTEXTO): awrrpt.sql,pedirformatosalida(textohtml),lossnapshotsinicialyfinal,yelnombre delficherodelinforme.Existeawrrpti.sqlqpermiteseleccionarunainstancia. awrsqrpt.sql,muestraestadsticasdeunasentenciaSQLparaunrangodesnapshots. awrddrpt.sql,comparaatributosdetalladosderendimientoyvaloresdeconfiguracin entredosperodosdetiempo. InformeASH(V$ACTIVE_SESSION_HISTORY): $ORACLE_HOME/rdbms/admin/ashrpt.sql. OEM.IncluyelastareasdeladministracindelAWR.Accesodesdeenlace "Administracin",seguidode"RepositoriodeCargadeTrabajoAutomtica"bajo"Gestin deEstadsticas".PermitiendomodificarlaconfiguracindeAWRygestionarlossnapshots.
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
59
VISTASAWR
Sepuedeforzarlacreacindeunsnapshot,manualmente: EXECUTEDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(); VistasAWR: V$ACTIVE_SESSION_HISTORY.Muestrasdesesionesactivasrecopiladascada segundo(ASH). V$METRIC.Mtricasrecopiladas. V$METRICNAME.Tiposdemtricasyagrupacionesdelasmismas. V$METRIC_HISTORY.Histricodemtricasrecopiladas. V$METRICGROUP.Gruposdemtricas. DBA_HIST_ACTIVE_SESS_HISTORY.HistricodeASH. DBA_HIST_BASELINE.Baselines. DBA_HIST_DATABASE_INSTANCE.ArranquesdelaBD. DBA_HIST_SNAPSHOT.Snapshotsrecopiladas. DBA_HIST_SQL_PLAN.PlanesdeejecucindesentenciasSQL. DBA_HIST_WR_CONTROL.ConfiguracindelAWR.
MsinformacinsobreAWR: http://cursos.atica.um.es/oradoc102/server.102/b14211/autostat.htm#i27008
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
60
AUTOMATICDATABASE DIAGNOSTICMONITOR(ADDM)
Seactivapordefecto(statistics_level=TYPICALuALL;sedesactivaconBASIC). Informes.EntredossnapshotsdelAWR.Darecomendacionesparareducirlaestadstica DBtime(V$SYS_TIME_MODEL)otiempototalacumuladoporlaBDparaatenderlas consultas/actualizacionesdelassesionesactivas( http://download.oracle.com/docs/cd/B19306_01/server.102/b28051/tdppt_method.htm#CIHCDGCI). $ORACLE_HOME/rdbms/admin/addmrpt.sql.Tbusandoelpaquete DBMS_ADVISOR. Anlisisderesultados.Elinformeestructuralosproblemasderendimientoencontradosen FINDINGS,indicandoelporcentajedeimpacto;yparacadaunonosdarecomendaciones, indicandoquhacer(ACTION)yelporqu(RATIONALE). ParaelanlisisdeE/S,pordefecto,setomaunvalorde10000microsegundosparalalectura deunbloquedelaBD.SicalculamoselvalorrealparanuestraBD,podemoscambiarlocon: EXECUTEDBMS_ADVISOR.SET_DEFAULT_TASK_PARAMETER( 'ADDM','DBIO_EXPECTED',8000); VistasdelDD: DBA_ADVISOR_TASKS:ejecucionesdeADDM(tareas)consuidentificacin. DBA_ADVISOR_LOG:logdetareasADDM(pareceestarincluidoenelanterior). DBA_ADVISOR_RECOMMENDATIONS.Recomendacionesresultantesdelanlisis. OrdenarporRANK(importancia)yverBENEFIT. DBA_ADVISOR_FINDINGS.Problemasencontradosenelanlisis. MsinformacinsobreADDM: http://cursos.atica.um.es/oradoc102/server.102/b14211/diagnsis.htm#sthref433
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
61
EJECUTARADDMCON DBMS_ADVISOR
CREATEORREPLACEFUNCTIONrun_addm(start_timeINDATE,end_timeINDATE) RETURNVARCHAR2 IS begin_snapNUMBER; end_snapNUMBER; tidNUMBER;TaskID tnameVARCHAR2(30);TaskName tdescVARCHAR2(256);TaskDescription BEGIN Buscalosidsdelossnapshotscorrespondientesalrangodefechas. SELECTmax(snap_id)INTObegin_snapFROMDBA_HIST_SNAPSHOT WHEREtrunc(end_interval_time,'MI')<=start_time; SELECTmin(snap_id)INTOend_snapFROMDBA_HIST_SNAPSHOT WHEREend_interval_time>=end_time; Nombredetarea=NULLygeneradescripcionunicaparalatarea. tname:=''; tdesc:='run_addm('||begin_snap||','||end_snap||')'; Crealatareaylaejecuta. DBMS_ADVISOR.CREATE_TASK('ADDM',tid,tname,tdesc); DBMS_ADVISOR.SET_TASK_PARAMETER(tname,'START_SNAPSHOT',begin_snap); DBMS_ADVISOR.SET_TASK_PARAMETER(tname,'END_SNAPSHOT',end_snap); DBMS_ADVISOR.EXECUTE_TASK(tname); RETURNtname; END;
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
62
OBTENERINFORMEADDMCON DBMS_ADVISOR
ConfiguravariablesycolumnasSQL*Plusnecesariasparaelinforme. SETPAGESIZE0LONG1000000LONGCHUNKSIZE1000; COLUMNget_clobFORMATa80; Ejecutarun_addm()conparmetros7pmy9pmdeldia20deOctubre. VARIABLEtask_nameVARCHAR2(30); BEGIN :task_name:=run_addm(TO_DATE('19:00:0020/10','HH24:MI:SSDD/MM'), TO_DATE('21:00:0020/10','HH24:MI:SSDD/MM')); END; / EjecutaGET_TASK_REPORTparaobtenereltextodelinforme. SELECTDBMS_ADVISOR.GET_TASK_REPORT(:task_name) FROMDBA_ADVISOR_TASKSt WHEREt.task_name=:task_name ANDt.owner=SYS_CONTEXT('userenv','session_user'); Nota:lavariableLONGdeSQL*Plusdebeasignarseaunvalorsuficiente paramostrarelinformecompletodeADDM,yaquelafuncin DBMS_ADVISOR.GET_TASK_REPORTdevuelveunCLOB.
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
63
SQLTUNINGADVISOR
AsesordeAjustesSQL http://cursos.atica.um.es/oradoc102/server.102/b14211/sql_tune.htm Verificalavalidezdelasestadsticasysiesnecesariogeneraestadsticas auxiliares. Determinasiesnecesariocrearestructurasdeacceso:ndicesy/ovistas materializadas. OEM:EnlacesRelacionados(abajo)>CentraldeAsesores>Asesorde AjustesSQL(bajoAsesores). PaqueteDBMS_SQLTUNE( http://cursos.atica.um.es/oradoc102/appdev.102/b14258/d_sqltun.htm#i1010615). CreartareadeajustedeSQL(DBMS_SQLTUNE.CREATE_TUNING_TASK) EjecutartareadeajustedeSQL(DBSM_SQLTUNE.EXECUTE_TUNING_TASK) Generarinformecorrespondientealatarea (DBMS_SQLTUNE.REPORT_TUNING_TASK). Generarscriptconlasrecomendacionesdelinforme (DBMS_SQLTUNE.SCRIPT_TUNING_TASK). Vistasrelacionadas:
DBA_SQLTUNE_STATISTICS,DBA_SQLTUNE_BINDS,DBA_SQLTUNE_PLANS. V$SQL,V$SQLAREA,V$SQLSTATS,V$SQL_BINDS.
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
64
SQLTUNNINGADVISOR DBMS_SQLTUNE
SeleccionarsentenciasSQLqyasehanejecutado:
Sentenciassqlconmsde500buffergets. SELECTsql_id,sql_text FROMtable(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('buffer_gets>500')) ORDERBYsql_id; SentenciassqldemiUsuarioconmsde500buffergets. SELECTsql_id,sql_text FROMtable(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('buffer_gets>500and parsing_schema_name=''miUsuario'''))ORDERBYsql_id; Sentenciassqlquetardaronmsde5segundos SELECTsql_id,sql_text FROMtable(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('elapsed_time>5000000')) ORDERBYsql_id; Datosdeunasentenciaconcreta. SELECT* FROMtable(DBMS_SQLTUNE.SELECT_CURSOR_CACHE('sql_id= ''4rm4183czbs7j'''));
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
65
SQLTUNNINGADVISOR DBMS_SQLTUNE
DiferentesformasdecreartareasdeajusteSQL.
variablestmt_taskVARCHAR2(64); Coneltextodelasentencia. EXEC:stmt_task:=DBMS_SQLTUNE.CREATE_TUNING_TASK( sql_text=>'selectquantity_soldfromsaless,timestwhere s.time_id=t.time_idands.time_id=TO_DATE(''29/01/07'')'); Conelidentificador(Sql_idencursorcache) EXEC:stmt_task:=DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id=> 'ay1m3ssvtrh24'); Limitandoeltiempodeajustea10minutos EXEC:stmt_task:=DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_id=> 'ay1m3ssvtrh24',time_limit=>600); IndicandounintervalodesnapshotsdelAWR EXEC:stmt_task:=DBMS_SQLTUNE.CREATE_TUNING_TASK(begin_snap=>1, end_snap=>2,sql_id=>'ay1m3ssvtrh24');
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
66
SQLTUNNINGADVISOR DBMS_SQLTUNE
Ejecutolatareadeajuste. EXECDBMS_SQLTUNE.EXECUTE_TUNING_TASK(:stmt_task); Compruebosilatareahaterminado. SELECTstatusFROMUSER_ADVISOR_TASKSWHEREtask_name=:stmt_task; Generoelinforme. SETLONG1000000LONGCHUNKSIZE100000LINESIZE100PAGESIZE10000 SELECTDBMS_SQLTUNE.REPORT_TUNING_TASK(:stmt_task)FROMDUAL; Generoelscriptparaaplicarlascorreccionessugeridasporel informeanterior. SELECTDBMS_SQLTUNE.SCRIPT_TUNING_TASK(:stmt_task)FROMDUAL; Nota:Desdesqlplusesnecesariohacersetlong1000000(puedeqcon menosseasuficiente)parapoderverelclobcompletodevueltopor dbms_sqltune.report_tuning_taskydbms_sqltune.script_tuning_task.
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
67
SEGMENTADVISOR SegmentSHRINK
Estaoperacincompactaelcontenidodeunsegmentoydevuelveextensioneslibres.
Parapoderreorganizarlasfilasdeunatablahayqpermitirq puedancambiarlosrowids ALTERTABLEmitablaENABLEROWMOVEMENT; Reorganizalasfilasdeunatablaytodossussegmentos(p.e.LOBS) ALTERTABLEmitablaSHRINKSPACECASCADE; ReorganizaslounLOB ALTERTABLEmitablaMODIFYLOB(milob)(SHRINKSPACE); Reorganizaunasolaparticindeunatablaparticionada ALTERTABLEmitablapartMODIFYPARTITIONmipart1SHRINKSPACE; ReorganizaunIOTyelsegmentodeoverflow ALTERTABLEmitablaiotSHRINKSPACECASCADE; ReorganizasloelsegmentodeoverflowdeunIOT ALTERTABLEmitablaiotOVERFLOWSHRINKSPACE; Liberalasextensionesqueestnvacas ALTERTABLEmitablaDEALLOCATEUNUSEDKEEPinteger; ALTERINDEXmiindiceDEALLOCATEUNUSEDKEEPinteger; ALTERCLUSTERmiclusterDEALLOCATEUNUSEDKEEPinteger;
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
68
SEGMENTADVISOR Ejecucinmanual
ParaejecutarlohacenfaltalosprivilegiosADVISORyCREATEJOBoCREATEANY JOB.DesdeOEM:Enlacesrelacionados(abajo)>CentraldeAsesores> Asesordesegmentos(bajoAsesores).Manualmente:
variableidnumber; declare namevarchar2(100); descrvarchar2(500); obj_idnumber; begin name:='miTablaSegAdv'; descr:='EjemploconSegmentAdvisor'; dbms_advisor.create_task(advisor_name=>'SegmentAdvisor',task_id =>:id,task_name=>name,task_desc=>descr); dbms_advisor.create_object(task_name=>name,object_type=> 'TABLE',attr1=>'miUsuario',attr2=>'miTabla',attr3=>NULL, attr4=>NULL,attr5=>NULL,object_id=>obj_id); dbms_advisor.set_task_parameter(name,'recommend_all','TRUE'); dbms_advisor.set_task_parameter(name,'verbose','TRUE'); dbms_advisor.execute_task(name); end; / SELECTSTATUSFROMDBA_ADVISOR_TASKSWHERETASK_ID=:id;
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
69
SEGMENTADVISOR Verresultados
selectaf.task_name,ao.attr2segname,ao.attr3partition,ao.type, af.message,af.more_info fromdba_advisor_findingsaf,dba_advisor_objectsao whereao.task_id=af.task_idandao.object_id=af.object_idand af.task_id=:id; (Generalasiguientesalida) ... Thefreespaceintheobjectislessthan10MB. AllocatedSpace:3145728:UsedSpace:3000902:ReclaimableSpace:144826:
AUTOMATICSEGMENTADVISOR(ASA).Identificasegmentoscandidatosa shrink.NoanalizatodoslosobjetosdelaBD.ExaminalasestadsticasdelaBD ymuestrasdesegmentos,paraseleccionar:tablespacesqueseacercanalos nivelescrticosodealerta,segmentosconmsactiviidadysegmentosquehan crecidoms. IntervalodeejecucindeASA:MAINTENANCE_WINDOW_GROUP(LVunavez apartirdelas22hyhasta6h;ySunavezapartirdelas0hhasta0hdelL) VistasdelASA: DBA_AUTO_SEGADV_SUMMARY:ejecucionesdeASA. DBA_AUTO_SEGADV_CTL:objetosseleccionadosparaseranalizados.
Msinfo:http://cursos.atica.um.es/oradoc102/server.102/b14231/schema.htm#CHDHBHAB
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
70
UNDOADVISOR DBMS_UNDO_ADV
AlgunasfuncionesdelpaqueteDBMS_UNDO_ADV: FUNCTIONBEST_POSSIBLE_RETENTIONRETURNSNUMBERConundosizeactual FUNCTIONLONGEST_QUERYRETURNSNUMBERQueryqmashatardado,ens. FUNCTIONREQUIRED_RETENTIONRETURNSNUMBERParaqueryqmastard FUNCTIONREQUIRED_UNDO_SIZERETURNSNUMBERParaactualundo_retention ArgumentNameTypeIn/OutDefault? RETENTIONNUMBERIN FUNCTIONUNDO_HEALTHRETURNSNUMBER PROBLEMVARCHAR2OUT RECOMMENDATIONVARCHAR2OUT RATIONALEVARCHAR2OUT RETENTIONNUMBEROUT UTBSIZENUMBEROUT FUNCTIONUNDO_INFORETURNSBOOLEAN TABLE_SPACE_NAMEVARCHAR2OUT TABLE_SPACE_SIZENUMBEROUT AUTO_EXTENDBOOLEANOUT UNDO_RETENTIONNUMBEROUT RETENTION_GUARANTEEBOOLEANOUT Nota:lainfoobtenidasecalculacondatosdesdeltimoarranque. Muchasfuncionestienenversionesconparmetrosfechainiyfin.
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
71
PRACTICASTEMA4
4.1.Consultarlasprincipalesvistasdinmicasdela10grelacionadasconel AWR: V$OSSTAT, V$SYS_TIME_MODEL, V$SES_TIME_MODEL, V$SYSMETRIC, V$SESSMETRIC, V$FILEMETRIC, V$EVENTMETRIC, V$SYSTEM_WAIT_CLASS, V$SESSION_WAIT_CLASS, V$WAITCLASSMETRIC. 4.2.ProbarAWR. 4.3.ProbarASH. 4.4.ProbarADDM. 4.5.ProbarSQLTUNING 4.6.ProbarSEGMENTADVISOR. 4.7.ProbarUNDOADVISOR.
NUEVASFUNCIONALIDADESDE AJUSTEYMONITORIZACION
72
TEMA5 MONITORIZACINYAJUSTETRADICIONAL
73
TEMA5. MONITORIZACINYAJUSTETRADICIONAL.
Eventosdeespera. Vistasdinmicas:informacindelsistemaydelassesiones. AjustedelaSharedPool. Ajustedelabuffercache. Ajustedelosbuffersredolog. Ajustedelrollback. Ajustedeltablespacetemporal. Ajustedeloscheckpoints. AjustedelassentenciasSQL. AjustedelaCPU. UtilidadSTATSPACK.
74
EVENTOSDEESPERA
V$EVENT_NAME.Listadeposiblesesperas. V$SYSTEM_EVENT.EsperastotalesporeventodesdearranquedeBD. V$SESSION_EVENT.Lamismainformacinanterior,porsesin. V$SESSION_WAIT.Sesionesqueestnesperandoactualmente. Eventosmscomunes:
PararecibirvaloresenWAIT_TIMEponerTIMED_STATISTICS=TRUE. freebufferwaits:DBWRescribepocoamenudo(subirndecheckpoints). latchfree:contencinenlatches(verificarV$LATCH). bufferbusywaits:haycontencinE/S(ajustarE/Sodistribuirdatos). dbfilesequentialread:haycontencinE/S(ajustarE/Sodistribuirdatos) dbfilescatteredread:igualanterior,peromultibloque(ajustarE/Sodistribuirdatos). dbfileparallelwrite:checkpointsmuyespaciados(subirsunmero). undosegmenttxslot:faltansegmentosderollback(aadirms). undosegmentextension:demasiadasextensionesdinmicas(ampliacionesy reducciones)delossegmentosderollback(ajustartamao). Nota:lalistacompletadeeventosestenelmanualOracle10gDatabaseReference.
http://cursos.atica.um.es/oradoc102/server.102/b14237/waitevents.htm#i968375
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 AJUSTEYMONITORIZACINDELA INSTANCIA
75
VISTASDINAMICAS INFORMACIONDELSISTEMA
AWR(>=10g).Verdiapositivasanteriores,deestemismotema. Basededatos V$SYSTEM_EVENT:esperastotalesporevento. V$SYSSTAT:estadsticasbsicasdelainstancia. V$SGASTAT:estadodeusodelaSGA.VertbV$SGAINFO(>=10g). V$WAITSTAT:estadsticasdecontencin. V$PROCESS:procesosoracle. V$SESSION:sesionesencurso. V$SORT_SEGMENT:estadodeusodelossegmentostemporales. V$PGASTAT:estadsticasdeusodelaPGA. Memoria
V$BUFFER_POOL_STATISTICS:estadsticasdelacachdedatos. V$LIBRARYCACHE:RendimientodelaLibraryCach. V$DB_OBJECT_CACHE:ObjetosquehayenlaLibraryCach. V$SQLAREA:SentenciasSQLyestadsticasasociadas. V$ROWCACHE:RendimientodelaDictionaryCach.
AJUSTEYMONITORIZACINDELA INSTANCIA
76
VISTASDINAMICAS INFORMACIONDELSISTEMA
AJUSTEYMONITORIZACINDELA INSTANCIA
77
VISTASDINAMICAS INFORMACIONDESESIONES
Sesin(datosdelassesionesactualmenteencurso) V$SESSION:sesiones. V$SESSTAT:estadsticasdecadasesin. V$SESSION_EVENT:eventosdecadasesin. V$SESSION_WAIT:esperasdecadasesin. V$LOCK:bloqueosactualesypeticionesdebloqueo. V$ACCESS:objetosbloqueadosylassesionesquelosestnusando. V$TRANSACTION:transaccionesencurso. V$OPEN_CURSOR:cursoresabiertosycompilados. V$SORT_USAGE:segmentostemporalesenuso V$SESS_IO:estadsticasdeE/Sdecadasesin.
Nota:lalistacompletadevistasdinmicasestenelmanualOracle10gDatabaseReference. http://cursos.atica.um.es/oradoc102/server.102/b14237/toc.htm
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 AJUSTEYMONITORIZACINDELA INSTANCIA
78
AJUSTEDELASHAREDPOOL INTRODUCCION
OracleguardalassentenciasSQLylospaquetesenlaSharedpool,unacach quepresentalossiguientesproblemas:
Launidaddereservadeespacionoesconstante,variandodesdeunoscuantosbytes hastamuchosKb. Notodalamemoriapuedeserliberadacuandoelusuarioterminaconella;yaquese tratadeunacachquepretendemaximizarlacomparticin. Nodisponedeunazonaendiscoparapaginar.
Nota:loslatchessonmicrobloqueosnecesariosparaprotegerlasoperacionesenlaSGA (SharedPool,LibraryCache,RedoBuffer,etc).Sonpuntospotencialesdecontencin.
AJUSTEYMONITORIZACINDELA INSTANCIA
79
AJUSTEDELASHAREDPOOL SENTENCIASSQL
La ejecucin de una sentencia SQL tiene varias fases: anlisis sintctico y semntico(compilacin),yclculodelplandeejecucin: EnlalibrarycacheseguardanlassenteciasSQLyacompiladas. Enlasqlareaseguardanlosplanesdeejecucindecadaunadeellas. AlcompilarunasentenciaSQL,hayquedistinguirentrehardysoftparse: HardParse:lasentenciaSQLnoexisteenlaSharedPool(LibraryCache).Es costosoentrminosdeCPUylatches. Soft Parse: la sentencia SQL ya existe en la SharedPool y puede usar una versindelamisma. DossentenciasSQLsonigualessitienenelmismotexto(incluyendoespaciosen blancoymaysculas/minsculas);yadems:
Losnombresdeobjetosdebenapuntaralosmismoobjetosreales. Elmododeloptimizador(optimizergoal)debeserelmismo. Losnombres,tiposylongitudesdelasvariablesbinddebenserlosmismos. ElentornoNLS(idiomaypas)debeserelmismo.
AJUSTEYMONITORIZACINDELA INSTANCIA
80
AJUSTEDELASHAREDPOOL GENERALIDADES
QuesiemprehayaespaciolibreenlaSharedPool,puedesignificarquesobra;y quehayapocoonadanosuponeunproblemasielrendimientoesbueno:
SELECT*FROMV$SGASTATWHERENAME='freememory'ANDPOOL='sharedpool'; POOLNAMEBYTES sharedpoolfreememory693036
Enlalibrarycache,elpinhitratio>=95%(V$LIBRARYCACHE)ylomscercano a1(100%).Reloadsdebesercasi0. Enlarowcache(V$ROWCACHE)elratiogetmisses/gets<=15%. LasaplicacionesOLTPdebenusarbindvariables(noparaDSS). Usar DBMS_SHARED_POOL.KEEP (dbmspool.sql) para fijar paquetes muy usadosenlaSharedPool(comoSYS.STANDARD). Haciendoflushsepuedeeliminarlafragmentacin(ora4031):
altersystemflushshared_pool;
Nota: puede bajar rendimiento hasta que objetos vuelven a la cach. No usar cuando BD tiene muchacarga.Nodescargapaquetesfijados,nisentenciasyacompiladasdesesionesencurso.
Nota:enDSSesmejordarlemuchainformacinalCBOqcompartirelcdigo.
AJUSTEYMONITORIZACINDELA INSTANCIA
81
AJUSTEDELASHAREDPOOL LIBRARYCACHE
V$LIBRARYCACHE.EstadsticasdelaLibraryCach. GETS(peticiones)CadapeticindeejecutarunasentenciaSQL(estel SQLenmemoria?). PINS(ejecuciones)CadapeticindemetadatosdeunSQL(estelSQL yacompilado?,siloestseejecuta).PINHITRATIOdebesercasi1. RELOADS(recompilaciones)Cadapeticindemetadatos(PIN)quenolos encuentra en memoria pq los ha sacado el algoritmo LRU (ejecuciones que requierenrecompilarsentencia).Debesercasi0. LosNAMESPACEquesecorrespondenconsentenciasSQLyPL/SQLson:SQL AREA,TABLE/PROCEDURE,BODYyTRIGGER. Para hacer que RELOADS sea casi 0, podemos subir shared_pool_size, pero adems,paraaprovechardichoincremento,subiremostambinopen_cursors. Si RELOADS es casi 0 y siempre tenemos una cantidad significativa de la SharedPoollibre,bajaremosshared_pool_size.
AJUSTEYMONITORIZACINDELA INSTANCIA
82
AJUSTEDELASHAREDPOOL ROWCACHE
V$ROWCACHE.EstadsticasdelaRowCach(DiccionariodeDatos).
PARAMETER:tipodepeticin. GETS:peticionesalacach,deltipoencuestin. GETMISSES:peticionesfallidasquegeneranE/S. MODIFICATIONS:actualizacionesdelacach.
Debemosprocurarqueratios>=85%. Podemosverelratiogeneralcon:
AJUSTEYMONITORIZACINDELA INSTANCIA
83
AJUSTEDELASHAREDPOOL RESTODEVISTASDINAMICAS
EnV$SHARED_POOL_ADVICEpodemosversinosinteresaredimensionarla SharedPool(elparmetroSTATISTICS_LEVELdebevalerALLoTYPICAL,noBASIC).
selectSHARED_POOL_SIZE_FOR_ESTIMATESIZE_ESTIMATE, SHARED_POOL_SIZE_FACTORSIZE_FACTOR, ESTD_LC_TIME_SAVED_FACTORPARSE_SAVED_FACTOR fromv$shared_pool_advice; SIZE_ESTIMATESIZE_FACTORPARSE_SAVED_FACTOR 4.5.9806 811 1621.0194
V$SGASTAT.DetalledecadaunadelaspartesdelaSharedPool. V$SQLAREA.Estadsticassobretodosloscursorescompartidos,incluyendoel textoinicial(1000caracteres)decadasentencia.Elusodeestavistaconsume muchoslatches(V$SQLno). V$SQLTEXT.Textocompletodelassentencias,envariaslneas(filas). V$DB_OBJECT_CACHE. Objetos en cach, incluyendo paquetes, funciones, procedimientos,tablas,ndices,sinnimos,secuencias,vistas,triggers,etc.
AJUSTEYMONITORIZACINDELA INSTANCIA
84
AJUSTEDELASHAREDPOOL COMPARTIRCODIGOSQL
Nosfijaremoselobjetivocompilarunavezyejecutarmuchas. Detectarsentenciassimilaresqueusanliterales(V$SQLAREA):
Nota: los valores 5, 40 y 30 son ejemplo para detectar sentencias que se ejecutan poco (<5),cuyos40primeroscaracteressonigualesenmuchoscasos(>30).Luegoveramossi esposibleconvertirlasenunaoenunaspocas.
Desde 9i, con CURSOR_SHARING=SIMILAR (antes slo FORCE), Oracle determina qu literales puede sustituir por variables bind sin afectar el plan de ejecucin. Si afectase al plan de ejecucin no se hace el cambio (si se usa FORCEs). Cachprivadasesin(SharedPool):alcompilarunasentenciaprimerosebusca en ella. Empezar con SESSION_CACHED_CURSORS=50 (valor alto puede provocar ora4031, comprobar % de uso). Util con Oracle Forms cuando los formsseabrenycierranconfrecuencia.
AJUSTEYMONITORIZACINDELA INSTANCIA
85
AJUSTEDELASHAREDPOOL LATCHESDELALIBRARYCACHE
Si alguno de los latches est provocando la mayora de sleeps, entonces hay un problema.Hayquetenerencuentaqueestosdatosseacumulandesdeelarranque delaBD,yportantonomuestranproblemasintermitentes.
selectname,gets,misses,sleepsfromv$latch wherenamelike'library%';
NAMEGETSMISSESSLEEPS librarycache971557394290212272 librarycacheloadlock1170500 misses son fallos al intentar coger un latch, y sleeps son aquellos fallos que provocan que la sesin correspondientesepongaadormir(locualimplicaunaespera).
Paradetectarelprocesoencuestin(slosaldralgosilopillamosenelmomento):
selecta.name,pidfromv$latcha,V$latchholderb wherea.addr=b.laddranda.name='librarycache%';
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008 AJUSTEYMONITORIZACINDELA INSTANCIA
86
AJUSTEDELASHAREDPOOL ESPERASPORLATCHES
Consultando V$SESSION_WAIT durante un periodo de lentitud, se puede determinarsihayunproblemaconlatchesy,entalcaso,conqulatchconcreto. Sihaymsde34procesosesperando,puedehaberunproblema.
selectcount(*)number_of_waiters fromv$session_waitw,v$latchl wherew.wait_time=0andw.event='latchfree'and w.p2=l.latch#andl.namelike'library%';
Tambin es interesante mirar slo en v$session_wait para ver si hay alguna otra causadelentitud.
select*fromv$session_wait whereevent!='rdbmsipcmessage'and eventnotlike'%Net%'andsid>5;
AJUSTEYMONITORIZACINDELA INSTANCIA
87
AJUSTEDELABUFFERCACHE GENERALIDADES
Oracle guardacopias de losbloquesde datosen labuffercach(cachde datos).Puedehabercopiasdediferentespuntosdeltiempoytambinbloques dirty(modificadosperoquenosehanllevadoadisco). Cuando la cach se llena, Oracle mover parte de sus bloques a disco (usa algoritmo LRU sobre la lista, o listas, de bloques no dirty), de modo que si posteriormentesonaccedidostendrnquevolverarecuperarsedeldisco. Ellatchcachebufferslruchainserializaoperacionessobrela(s)lista(s)LRU. El proceso DBWR es el responsable de llevar los bloques dirty a disco. Cualquiersesinpuedeleerlosbloquesdelacach. Podemos calcular el ratio de eficiencia (hit ratio) de la cach de datos consultando V$SYSSTAT. Se recomienda que sea >80% para aplicaciones OLTP;peroestonoaseguraunbuenrendimiento(tbesmuyimportanteeluso dendicesselectivos). EnaplicacionesDSS(datawarehouse)sepuedentenerratiosmuchomenores.
AJUSTEYMONITORIZACINDELA INSTANCIA
88
AJUSTEDELABUFFERCACHE HITRATIO
ConsultandoV$SYSSTAT:
select100*(1(f1f2f3)/(r1+r2f2f3))HitRatio from(selectvaluef1fromv$sysstatwherename='physicalreads'), (selectvaluef2fromv$sysstatwherename='physicalreadsdirect'), (selectvaluef3fromv$sysstatwherename='physicalreadsdirect(lob)'), (selectvaluer1fromv$sysstatwherename='consistentgets'), (selectvaluer2fromv$sysstatwherename='dbblockgets');
(keep,
recycle,
etc),
partir
de
en
AJUSTEYMONITORIZACINDELA INSTANCIA
89
AJUSTEDELABUFFERCACHE OBJETIVOS
Hayqueevitarlosiguiente:
Bsicamente las lecturas innecesarias, pues llevan bloques a la cach y, por tanto, provocanlasalidadeotros(queluegotendrnqvolveraleersededisco).Cuidadocon losndicespocoonadaselectivosylosfullscandetablas. Contencinenellatch'cachebufferslruchain'(V$LATCH). Mucho tiempo empleado en la espera "write complete waits" (V$BUFFER_POOL_STATISTICS). Mucho tiempo empleado en la espera "free buffer waits" (V$BUFFER_POOL_STATISTICS).
FactoresquepuedemejorarelrendimientodelDBWR: Atributosdelosdiscosfsicos(stripesize,velocidad,etc). RawdevicesvsFileSystems. Distribuirlasescriturassobremsdiscos/ficheros. Usar E/S asncrona cuando est disponible. Adems, si es necesario arrancarvariosprocesosDBWRconDB_WRITER_PROCESSES(almenos unoparacada8cpusogrupodecpus). SinohayE/Sasncrona,paralelizarE/SdelDBWRconDBWR_IO_SLAVES. Usarlasdiferentescachs(keep,recycle,etc).
AJUSTEYMONITORIZACINDELA INSTANCIA
90
AJUSTEDELREDOLOGBUFFER GENERALIDADES
LaCachdeRedo(RedoLogBuffer)esunbuffercircularenlaSGA,queguarda informacin (redo entries) sobre todos los cambios hechos en la BD, que se utilizar slo para recuperar la BD, si es necesario. Las redo entries van ocupandoespaciocontiguo,deformasecuencial,enlaCachdeRedo. ElLGWReselencargadodeescribirlasredoentriesdelacachederedo,enel fichero (o grupo) redo log activo. Una vez hecho sto, el proceso de usuario puedereutilizardichasentradas. Hay determinadas operaciones en las que resulta interesante desactivar el redo,yaquesepuedenreconstruirfcilmente;comosoncrearun ndiceocrear unatablaasselect.LaopcinausarenestoscasosesNOLOGGIN. DimensionarlaCachdeRedo(log_buffer)porencimade3M,nosirvedenada; yaqueelLGWRvuelcalacachadiscocuandostasellena1/3mximo1M. EltamaoptimosepuedesacardelacolumnaOPTIMAL_LOGFILE_SIZEdela vistaV$INSTANCE_RECOVERY.
AJUSTEYMONITORIZACINDELA INSTANCIA
91
AJUSTEDELREDOLOGBUFFER DETECTARPROBLEMAS
Contencinenlatches(V$LATCH)deredo.SielratiodeMISSES/GETSoelde IMMEDIATE_MISSES/(IMMEDIATE_GETS+IMMEDIATE_MISSES) > 1% es porquehaycontencin:
SELECTname,gets,misses,immediate_gets,immediate_misses FROMv$latch WHEREnamein('redoallocation','redocopy'); Sihaycontencinenredoallocation,reduciremosusoderedo(NOLOGIN)osubiremos el tamao de la Cach de Redo (log_buffer). Si CPUs>16 se puede subir LOG_PARALLELISM(de2a8). Siesenredocopy,yCPUs>1,sepuedesubir_log_simultaneous_copies(oculto).
Contencinenpeticionesdeespacioderedoendisco.Serefierealaestadstica redologspacerequests"delavistaV$SYSSTAT,quereflejaelndeesperasal escribirel redo a disco, pqse ha llenadoel fichero redolog. Ese valordebeser (casi) cero. Si, por el contrario, dicho n va incrementndose continuamente, habr que comprobar checkpoints y log_switchs. Se debe hacer q los checkpointscoincidanconloslogswitchs(cada1530minutosaprox.).
AJUSTEYMONITORIZACINDELA INSTANCIA
92
AJUSTEDELROLLBACK GENERALIDADES
Si usamos undo automtico (>=9i), podemos consultar V$UNDOSTAT: una fila cada10minutos.LacolumnaSSOLDERRCNTmuestraloserroresORA1555. En los segmentos de rollback (RS) se guardan las imgenes de los datos, anteriores a las actualizaciones, por si esnecesariodeshacer lastransacciones (TR) en cuestin; y para mantener la consistencia en lectura. Oracle va asignandolosRSmedianteroundrobin. CadaTRslopuedeusarunRSparaalmacenarsusregistrosdeundo. VariasTRpuedenescribirenlamismaextensin. Un RS se organiza en forma de anillo, de forma que la cabeza del RS nunca machacarunaextensinocupadaporlacoladelmismo. Las extensiones de un RS se usarn en orden. Si no puede usar la siguiente, reservarunanuevaylainsertarenelanillo(reduceelrendimiento). Son importantes tanto el tamao como la duracin de una TR. Una TR q slo modifica 1 byte durante largo tiempo, puede provocar q un RS se extienda si dichaextensinsenecesitamsadelante.
ParacadaRS,debemosasegurarnosdeqlacabezanoalcancealacolamuyrpido,pues harqelRSseextienda.
AJUSTEYMONITORIZACINDELA INSTANCIA
93
AJUSTEDELROLLBACK OPTIMIZACION
El tamao de los RS depende directamente de la actividad de las TR. Nos debemosfijarenlaactividadnormaldelaBDparaajustar. Calcular un segmento de rollback por cada 4 transacciones concurrentes, con extensionesdelmismotamao(unmnimode20porRS). Fijar optimal de modo q el 90% de las transacciones quepan en un RS sin extenderse. Una vez fijado optimal, dejar espacio libre en el tablespace para que,adems,sepuedaatenderalatransaccinmsgrande. ParaprevenirORA1555Snapshottooold(loprovocanlasgrandesconsultas), cuantosmsRSmejor(ynoslomsgrandes)ydelmismotamao,yquelas transacciones sean lo ms cortas posibles. Si no hay updates a la vez que grandesselects,nohayora1555. ComprobarlacontencinenRSconsultandoV$WAITSTAT. SELECTCLASS,COUNTFROMV$WAITSTAT WHERECLASSlike'%undo%'; Sihayenundoheader,esqnohaybastantesRS(crearms).
AJUSTEYMONITORIZACINDELA INSTANCIA
94
AJUSTEDESEGMENTOSDESORT GENERALIDADES
Cuando ocurre una ordenacin, Oracle reserva tantas extensiones como necesite.Finalizadalaordenacin,lasextensionessemarcancomolibres,pero noseliberan. Unmismosegmentodesortpuedesercompartidoporvariasordenaciones. La primera ordenacin crea el segmento (si no exista) y las dems aadirn extensionessilonecesitan. SeutilizaunazonadelaSGA,fueradelaSharedPool,llamadaSortExtentPool; sincronizada usando el latch sort extent pool (V$LATCH). Si tiene contencin, subireltamaodelaextensinpordefectodeltablespace.
AJUSTEYMONITORIZACINDELA INSTANCIA
95
AJUSTEDESEGMENTOSDESORT OPTIMIZACION
Sihaycontencinenellatchsortextentpool(V$LATCH),subiremoseltamao delaextensinpordefectodeltablespace. Si adems, tambin se producen esperas pq hay muchas ordenaciones concurrentes, se debe incrementar el parmetro SORT_AREA_SIZE, de forma queunamayorcantidaddeordenacionessehaganenmemoria. EltamaodelaextensindebeserigualaSORT_AREA_SIZE(omltiplo). Desde Oracle9i, usandoel parmetro PGA_AGGREGATE_TARGET,me olvido de sort_area_size (sesiones con servidores dedicados). PGA_AGGREGATE_TARGETindicaeltamaomximoquesumarnlasPGAs (mnimo10M). Podemosmonitorizarlossegmentosdesortcon:
V$SORT_SEGMENTmuestralossegmentostemporales.Silascolumnas ADDED_EXTENTSyFREED_EXTENTSmuestranmuchaactividad,aadiremosms espacioaltablespace.SiMAX_SORT_SIZEindicaordenacionesdegrantamao,es posibleqnecesitemosuntablespacededicadoparaellas(sloparalasgrandes). V$SORT_USAGEmuestraelusoactualdelossegmentostemporales.
AJUSTEYMONITORIZACINDELA INSTANCIA
96
AJUSTEDELOSCHECKPOINTS
Uncheckpointeseleventoquesincronizalosbloquesdedatosenmemoriacon losficherosdedatosendisco(losescribeelDBWR). Indicacionesdeajuste: ElprocesoCKPTpuedemejorarsignificativamenteelrendimiento. Asignando el parmetro LOG_CHECKPOINTS_TO_ALERT a TRUE podremos ver en el fichero alert.log los tiempos de comienzo y fin de los checkpoints. Si el valor de LOG_CHECKPOINT_INTERVAL es mayor que el tamao del ficheroredolog,loscheckpointsocurrirncuandoOraclehagaunlogswitch. Loidealesqueloscheckpointsslosucedancuandosehacelogswitch:
log_checkpoint_interval=0 log_checkpoint_timeout=0. FAST_START_MTTR_TARGET=0(desactivafastrecoveryinstance).
AJUSTEYMONITORIZACINDELA INSTANCIA
97
AJUSTEDELASCONSULTASSQL
SiobservamosquenuestrasconsultasSQLvanlentas,debemoscomprobar:
ElvalordeOPTIMIZER_MODE.Ej:siCHOOSE,probarRULE. Estnlosndicesdelastablasafectadasenestadovalid? HayalgunaotraconsultaSQLpesadaenejecucin?
ALTERSYSTEMSETOPTIMIZER_MODE=RULE|FIRST_ROWS|ALL_ROWS|CHOOSE; SELECT*FROMDBA_OBJECTSWHEREOBJECT_TYPE='INDEX'ANDSTATUS!='VALID';
Si,adems,estamosusandoeloptimizadorporcostes(CBO):
ParaelajustedesentenciasSQLutilizaremoslassiguientesherramientas:
AUTOTRACEdeSql*Plus: TKPROFsobreunficherodetraza:
98
AJUSTEDELACPU
AJUSTEYMONITORIZACINDELA INSTANCIA
99
UTILIDADSTATSPACK
Desde10g,conlaintroduccindelAWRnoesnecesariousarSTATSPACK. STATSPACK es una utilidad para recoger estadsticas que permiten detectar problemas de rendimiento. Adems, mejora la utilidad que haba anteriormente, UTLBSTAT/UTLESTAT. Se trata de un conjunto de scripts SQL y PL/SQL. El script de instalacin de la herramientacreaunusuario,PERFSTAT.Losdatosrecopiladosporstatspackse guardarnentablas. La documentacin de la herramienta estn en $ORACLE_HOME/rdbms/admin/spdoc.txt. STATSPACKtrabajaconelconceptosnapshotparaidentificarunacoleccinde datos recopilados en un momento del tiempo, a los que asocia un identificador nico, snap_id. Es necesario recopilar datos en forma de snapshots antes de poderobteneruninformederendimiento.
AJUSTEYMONITORIZACINDELA INSTANCIA
100
INSTALARSTATSPACK
Necesita un tablespace con al menos 100Mb, a ser posible manejado localmente. La instalacin crea un usuario PERFSTAT que ser el propietario de todos los objetosyelcdigopl/sqlquesecree.Debemosasegurarnosqueeltablespace por defecto de este usuario es el que hemos creado, y tener cuidado con su tablespacetemporalpordefecto(noseramalaideaasignarleunoespecial). Para la instalacin debemos conectarnos a la BD como SYSDBA, y lanzar el script$ORACLE_HOME/rdbms/admin/spcreate.sql,quenospedirlaclavepara el nuevo usuario, as como el tablespace por defecto y el tablespace temporal. Este script, de forma automtica, llama a otros tres: spcusr.sql, spctab.sql, spcpkg.sql. Debemos comprobar si se producen errores en los ficheros spcusr.lis,spctab.lis,spcpkg.lis. Sihayerroresytenemosquerepetirlainstalacin,primerodesinstalaremoscon elscriptspdrop.sql.
AJUSTEYMONITORIZACINDELA INSTANCIA
101
RECOGIENDODATOSCON STATSPACK
La forma ms sencilla de crear un snapshot es conectando como usuario PERFSTATyejecutandoelprocedimientoSTATSPACK.SNAP.Previamentees conveniente activar el parmetro time_statistics (TRUE). Este primer snapshot nosservirdebasecomparativaparalosprximossnapshotsquetomemos. Al crear un snapshot, con STATSPACK.SNAP, se pueden indicar parmetros para,porejemplo,indicarelniveldedetalledelasestadsticas(i_snap_level),e incluso una sesin sobre la que recabar estadsticas adicionales (i_session_id). Paraestablecerunsnapshotinicial(baseline)serecomiendai_snap_level=10. Podemos borrar un rango de snapshots con sppurge.sql. Si queremos borrar todoslossnapshots,podemoshacerloconsptrunc.sql(ojo!,queloborrartodo, puedeserinteresantehacerunexportpreviodelusuarioPERFSTAT).
AJUSTEYMONITORIZACINDELA INSTANCIA
102
OBTENIENDOINFORMESCON STATSPACK
Podemos obtener un informe sobre el rendimiento general de la instancia con spreport.sql(desdeelusuarioPERFSTAT).Nospedirelintervalodesnapshots (inicialyfinal)yelnombredelficherodesalida. Si localizamos una sentencia SQL por su hash_value (V$SQLAREA.HASH_VALUE), podemos generar un informe sobre ella con el scriptsprepsql.sql;quenospedirelintervalodesnapshotsyelhash_valuedela sentencia.
AJUSTEYMONITORIZACINDELA INSTANCIA
103
RESUMENDESCRIPTS STATSPACK
Instalacin(comousuarioSYSDBA):
spcreate.sql>InstalaSTATSPACKejecutandoasuvezlosscripts:
spcusr.sql >CreaelusuarioPERFSTAT spctab.sql >Crealastablas spcpkg.sql>Creaelpaquetestatspack spdtab.sql>Borralastablas spdusr.sql>BorraelusuarioPERFSTAT
spdrop.sql>DesinstalaSTATSPACKejecutandoasuvezlosscripts:
Informes(comousuarioPERFSTAT):
Mantenimiento(comousuarioPERFSTAT):
AJUSTEYMONITORIZACINDELA INSTANCIA
VISTASDELDD
V$SYSSTAT:estadsticasgeneralesdelsistema. V$SGASTAT:estadodeusodelasdiferentespartesdelaSGA. V$SYSTEM_EVENT:estadsticasdeeventosdeesperaaniveldesistema. V$SESSION_WAIT:sesionesqueestnenesperaactualmente. V$SESSION_EVENT:estadsticasdeeventosdeesperaporsesin. V$SESSTAT:estadsticasgeneralesporsesin. V$LIBRARYCACHE:ratiosdelaLibraryCach(SentenciasSQLyPL/SQL). V$ROWCACHE:ratiosdelaRowCach(DiccionariodeDatos). V$PGASTAT:estadodelaPGA. V$BUFFER_POOL_STATISTICS:estadsticasdelacachdedatos. V$DB_OBJECT_CACHE:objetosquehayenlaLibraryCach. V$LATCH:latches. V$ROLLSTAT:estadsticasdeusodelossegmentosderollback. V$UNDOSTAT:estadsticasdeusodelossegmentosderollback. V$FILESTAT:estadsticasdeE/Saniveldefichero. V$SESS_IO:estadsticasdeE/Saniveldesesin. V$SORT_SEGMENT:estadsticasdeusodelossegmentostemporales. V$SORT_USAGE:reasdesortactualmenteenuso. ObtenerIP:SelectSYS_CONTEXT('USERENV','IP_ADDRESS')FROMDUAL;
AJUSTEYMONITORIZACINDELA INSTANCIA
105
PRACTICASTEMA5
5.1.Revisareventosdelsistemaycomprobarlosmssignificativos.Comprobar eventolatchfreeporsesiones.Comprobarsesionesesperandoporelevento dbfilesequentialread.CompruebaelparmetroTIMED_STATISTICS. 5.2. Revisa las estadsticas del sistema ms significativas. Comprueba el tamaomediodelaPGAdecadasesin.Revisalaslecturaslgicasyfsicasy calculaelratiodeE/S.CompararelusodeCPUparaSQLdelsistema(acceso alDD)sobreeltotal. 5.3. Ver el eatado de ocupacin de las partes ms significativas de la Shared Pool. 5.4.ComprobarlacontencinenlatchesdelaSharedPoolyLibraryCache. 5.5.ComprobarelpinhitratiodelaLibraryCach,asicomolosreloads.Verificar elespaciolibredelaSharedPool,yelvalordeopen_cursors. 5.6.VerelratiodelaRowCache. 5.7.ComprobarsielsistemarecomiendaampliarlaSharedPool.
AJUSTEYMONITORIZACINDELA INSTANCIA
106
PRACTICASTEMA5
5.8. Detectar sentencias similares que usan literales. Verificar el parmetros cursor_sharingysession_cached_cursors.Asignarcursor_sharing=similar. 5.9.InstalarelpaqueteDBMS_SHARED_POOL.Comprobarpaquetesquese puedenfijarenlaSharedPoolyhacerlo. 5.10. Comprobar sentencias que ocupan mucha memoria (>=10% de SharedPool). 5.11. Calcular el ratio de eficiencia de la Cach de Datos. Comprobar el parmetro db_cache_advice. Consultar si Oracle recomienda incrementar la Cach de Datos. Comprobar si hay contencin en el latch cache buffers lru chain.Versihayesperasdeltipowritecompletewaitsofreebufferwaits.
AJUSTEYMONITORIZACINDELA INSTANCIA
107
PRACTICASTEMA5
AJUSTEYMONITORIZACINDELA INSTANCIA
108
APENDICEA. RecursosOracleenInternet.
www.orafaq.org(UndergroundOracleFAQs) otn.oracle.com(OracleTecnologyNetwork) otn.oracle.com/oramag(OracleMagazine) www.oracle.com(WebdeOracle) metalink.oracle.com(SoporteTcnicoOracle) asktom.oracle.com(GurdeOracle)
PortaloficialdeOracle. Soportetcnicoparausuariosconcontratodemantenimiento. ArtculosypreguntasaunodelosgursdeOracle ArtculosmuyinteresantessobreOracle10g(incluidainstalacin) ArtculosmuybuenossobreinstalacindeOraclesobreLinux RevistaelectrnicamensualespecializadaenOracle ParamejorarelrendimientodeOraclesobreUnix
109
www.oraclebase.com(WebdeTimHall)
APENDICEB. ArquitecturaOracle
ServidorOracle
Instancia ProcesosBackground DBWR LGWR SMON PMON CKPT Opcionales:RECO,ARCH,Dispatchers, Servers,etc. Nuevos10g:MMAN,MMON,MMNL, PSP0. SystemGlobalArea(SGA) SharedPool LibraryCache DictionaryCache DatabaseBufferCache RedoLogBuffer JavaPoolyLargePool.
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
110
APENDICEB. ArquitecturaOracle
111
APENDICEC. EstructuraFsica/LgicadelaBD
EstructuralgicadelaBD
Tablespaces Segmentos Extensiones BloquesOracle
EstructurafsicadelaBD
Ficherosdedatos BloquesdelSO
112
APENDICEC. EstructuraFsica/LgicadelaBD
113
APENDICED. ConexinalaBDyconsulta
1. El proceso de usuario enva la sentenciaSQLalprocesoservidor. 2. El proceso servidor busca la sentenciaSQLenlaSharedPool.Si no la encuentra, la compila y la guardaenlaSharedPool. 3. El proceso servidor accede a los datos en la Database Buffer Cache. Si no los encuentra, accede directamentealosficherosdedatos, llevando los datos a la Database BufferCache. 4. El proceso servidor devuelve los datos al proceso de usuario q inici laconexin.
3 1 4 2 4
1 3
114
APENDICEE. Actualizacindedatos
Enprimerlugarserepitenlasfases1(envode lasentencia),2(compilacin)y3(accesoa losdatos)vistasenelprocesodeconsulta. 4. Se guarda una copia del dato (antes del cambio)enunsegmentodeRollback(porsi sedeshacelatransaccin). 5. Se modifican los bloques de datos en la Database Buffer Cach. El DBWR (de forma asncrona) los llevara a los ficheros dedatoscuandosucedauncheckpoint. 6. Se guardanenlacachdeRedo las"redo entries"(vectordecambiosdecadabloque modificado) necesarias para registrar el cambioqsevaahacer(elLGWRvuelcael buffer al fichero redo log activo, cuando se hacecommitocada3segundos). 7. El proceso servidor devuelve el nmero de filasactualizadasalprocesodeusuario.
4 3 1 7 2 7
1 5 3
115
APENDICEF. NovedadesOracle9i
undotablespaceygestinautomticadeundo databasedefaulttemporarytablespace droptablespaceINCLUDINGCONTENTSANDDATAFILES; SGAdinmica:sga_max_size,db_cache_size db_nk_cache_size(cachscontamaodebloquenoestndard) desaparececonnectinternal,ahoraesconnect/assysdba spfile (fichero de parmetros binario, mantenido con alter system set...) OMF tablespaces con gestin automtica de segmentos (create tablespace...segmentspacemanagementauto;) compresindelossegmentosdedatos(createtable...compress;)
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
116
APENDICEG. NovedadesOracle10g
TablespaceSYSAUX(permitedejarenelSYSTEMsloelDD) altertablespacenombre1RENAMETOnombre2; createBIGFILEtablespacetsbig1...size50G;(hasta8Eb) SGA_TARGET(ASMM:gestinautomticadeltamaodelaspartesdelaSGA) altertablet1SHRINKSPACECASCADE;(antesaltertablet1enablerowmovement;) "create temporary tablespace ts1 ... TABLESPACE GROUP g1;" y "alter tablespace t2 TABLESPACEGROUPg1;. DataPump(exp/imptodavaexisten):expdp/impdpmuyeficienteparagrandescantidades dedatos Flashback Database (db_recovery_file_dest, db_recovery_file_dest_size, db_flashback_retention_size).Muy tilparaauditora:ALTERDATABASEFLASHBACKon; ALTER TABLESPACE nombre FLASHBACK ON; FLASHBACK TABLE nombre TO SCN numero;FLASHBACKTABLEnombreTOTIMESTAMP'2006030312:05:00';; DROPDATABASE;(slomontada) ALTERDATABASEDEFAULTTABLESPACEnombre; ALTERSYSTEMFLUSHBUFFER_CACHE; AutomaticStorageManagement(ASM). ALTERSYSTEMQUIESCERESTRICTED|UNQUIESCE(tbSUSPENDyRESUME). DROPTABLEnombrePURGE;(DBA_RECYCLEBIN,recyclebin=on,SHOWRECYCLEBIN, FLASHBACK TABLE nombreTablaBorrada TO BEFORE DROP; PURGE TABLE NombreTabla;) ADDM. DBA_OUTSTANDING_ALERTS, DBA_ALERT_HISTORY, V$ALERT_TYPES. Script$ORACLE_HOME/rdbms/admin/addmrpt.sql.
117
APENDICEH. SOPORTEDEGLOBALIZACIN
Conjuntodecaracteresparalabasededatos. Lenguajeyterritorio.VariabledeentornoNLS_LANG. ParmetrosNLS.NLS_SESSION_PARAMETERS. NLS_TERRITORY NLS_LANGUAGE NLS_DATE_LANGUAGE
118
APENDICEH. NLS_SESSION_PARAMETERS
ParaconsultarlasvariablesNLSasociadasaunasesin: SQL>select*fromnls_session_parameters; PARAMETERVALUE NLS_LANGUAGEAMERICAN NLS_TERRITORYAMERICA NLS_CURRENCY$ NLS_ISO_CURRENCYAMERICA NLS_NUMERIC_CHARACTERSP., NLS_CALENDARGREGORIAN NLS_DATE_FORMATDDMONRR NLS_DATE_LANGUAGEAMERICAN NLS_SORTBINARY NLS_TIME_FORMATHH.MI.SSXFFAM NLS_TIMESTAMP_FORMATDDMONRRHH.MI.SSXFFAM NLS_TIME_TZ_FORMATHH.MI.SSXFFAMTZH:TZM NLS_TIMESTAMP_TZ_FORMATDDMONRRHH.MI.SSXFFAMTZH:TZM NLS_DUAL_CURRENCY$ NLS_COMPBINARY SepuedencambiarconALTERSESSIONSETvariable=valor;
Administraci ndeOracle10g(Parte2) JuanLuisSerradillaAmarillayFranciscoFern ndezMartnez20042008
119
APENDICEH. NLS_TERRITORYYNLS_LANGUAGE
Elpas(NLS_TERRITORY)llevaasociadounformatodefecha,yellenguaje (NLS_LANGUAGE)serefierealidiomaenquenosrespondeOracle. SQL>SELECTSYSDATEFROMDUAL; SYSDATE 30MAR05 SQL>ALTERSESSIONSETNLS_TERRITORY=SPAIN; Sessionaltered. SQL>SELECTSYSDATEFROMDUAL; SYSDATE 30/03/05 SQL>ALTERSESSIONSETNLS_LANGUAGE=SPANISH; Sesionmodificada.
120
APENDICEH. NLS_DATE_LANGUAGE
PodemosmodificarelidiomadelafechaconNLS_DATE_LANGUAGE: SQL>SELECTTO_CHAR(SYSDATE, 'DD/MON/YYYY','NLS_DATE_LANGUAGE=SPANISH')FROMDUAL; TO_CHAR(SYS 20/DIC/2004 SQL>SELECT TO_CHAR(SYSDATE,'DD/MON/YYYY','NLS_DATE_LANGUAGE=AMERICAN')FROM DUAL; TO_CHAR(SYS 20/DEC/2004
121