Oracle: parámetros de configuración BDSI – Rafael Caballero – Facultad de Informática - UCM Estructura físicas/lógicas La estructura lógica de mayor nivel en Oracle es el Tablespace Un Tablespace puede ocupar varios ficheros físicos y un fichero físico puede contener varios tablespaces Al crear tables, índices, etc. éstos se asocian a un tablespace bl Bloques, extensiones y segmentos Bloque --> Conjunto de bytes consecutivos en disco (por (p ejemplo 2Kb) Extensión --> Conjunto de bloques consecutivos para un mismo propósito Segmento --> Conjunto de extensiones, no necesariamente consecutivas en un mismo consecutivas, tablespace y para un mismo ppropósito p (por ejemplo (p j p contener una tabla, o un índice). Bloques El tamaño parám. DB_BLOCK_SIZE Múltiplo del tamaño de bloque del sistema operativo Cabecera de bloque (overhead): H d di Header: dirección ió fí física, i tipo i de d bloque bl (tabla, ( bl índice…) í di ) Table directory: Datos de la tabla/objeto dueño del bloque Row directory: Datos de la fila/filas en este bloque (Total variable, entre 84 y 107 bytes) Espacio libre Para posible crecimiento de valores de atributos varchar2 Para almacenar datos de transacciones Gestión del espacio liberado Por defecto de forma automática, aunque es configurable por el usuario D l y update Delete d pueden d incrementar i ell espacio i libre lib en un bloque El espacio p libre creado por p delete y update p puede p ser utilizado: Por un insert/update que forme parte de la misma transacción Por un insert/update de otra transacción /(incluso otra sesión), sesión) pero sólo después de que la transacción que liberó el espacio haya terminado. El espacio libre dentro de un bloque puede estar fragmentado. Oracle desfragmentará agrupando espacio libre cuando sea conveniente Filas en cadena y migraciones Cuando el tamaño de una fila es mayor que el tamaño de bloque, bloque Oracle crea una cadena de bloques para almacenar la fila. T bié puede También d darse d ell caso: Un bloque contiene varias filas Una de estas filas crece por un update, y ya no hay sitio en el bloque, pero la fila cabría en un bloque nuevo bl La fila se copia (migra) a un nuevo bloque Gestión manual del espacio libre Se hace con dos parámetros, pctfree y pctused Se especifican p al crear un objeto: j Tabla: pctfree y pctused Indice: sólo pctfree Se pueden S d especificar ifi en ell momento t de d la l creación, ió pero también se pueden modificar posteriormente: Alter table nombre_de_tabla nombre de tabla pctfree nuevo_pct_free; nuevo pct free; Alter table nombre_de_tabla pctused nuevo_pct_used; Alter index nombre_de_indice p pctfree nuevo_p pct_free;; Pctfree Indica el tanto por ciento de bloque que debe dejarse libre para posibles updates pdates pctfree Oracle mantiene una lista de bloques libres en una extensión. Un bloque pertenece a esta lista desde que se crea hasta que se alcanza la ocupación de blocksize * (1-(ptcfree/100)) P tf demasiado Pctfree d i d pequeño ñ –> > pérdida é did de d eficiencia fi i i muchas filas en cadena Muchas migraciones g Es tarea del DBA intentar mantener el número de migraciones i i y filas fil en cadena d tan pequeño ñ como sea posible ibl (jugar con tamaño de bloque, pctfree, tamaño medio inicial de p ppara filas)) filas,, crecimiento esperado pctused Es el máximo espacio que debe tener ocupado un n bloque bloq e para admitir nuevas n e as filas Pctused y pctfree unidos Creación de extents Al crear una tabla, Oracle le asigna un segmento, y al segmento le corresponde automáticamente un extent inicial, i i i l contiendo i d un cierto i número de d bloques bl (parámetro initial extent ) Cuando el extent inicial se llena, llena se utiliza un extent incremental para el segmento y así sucesivamente Cuando se crea la tabla existe un sección storage que fija estos valores. El tamño de las extensiones sucesivas ppuede ser bien UNIFORM o AUTOALLOCATE (variable, controlado por el sistema ) Gestion de extents Para crear uno se busca un número de bloques consecutivos en cada fichero de datos asociado al tablespace Los extents de un segmento g sólo se liberan cuando se elimina el objeto (drop table…) Excepciones: p Sentencia truncate por el usuario ALTER TABLE table_name _ DEALLOCATE UNUSED; Oracle en ciertas situaciones puede hacerlo si la configuración lo permite