Para la gestión del almacenamiento de una base de datos
existen 4 conceptos bien definidos que deben ser conocidos para poder
comprender la forma en la que se almacenan los datos. Vamos a ver la diferencia
entre bloque, extensión, segmento y espacio de tablas.
3.1 Estructuras lógicas de almacenamiento
Para la gestión del almacenamiento de una base de datos
existen 4 conceptos bien definidos que deben ser conocidos para poder
comprender la forma en la que se almacenan los datos. Vamos a ver la diferencia
entre bloque, extensión, segmento y espacio de tablas.
Bloques: Se tratan de la unidad más pequeña. Generalmente
debe múltiple del tamaño de bloque del sistema operativo, ya que es la unidad
mínima que va a pedir Oracle al sistema operativo. Si no fuera múltiple del
bloque del sistema se añadiría un trabajo extra ya que el sistema debería
obtener más datos de los estrictamente necesarios. Se especifica mediante
DB_BLOCK_SIZE
Extensiones: Se forma con uno o más bloques. Cuando se
aumenta tamaño de un objeto se usa una extensión para incrementar el espacio.
Segmentos: Grupo de extensiones que forman un objeto de la
base de datos, como por ejemplo una tabla o un índice.
Espacio de tablas:Formado por uno o más datafiles, cada
datafile solo puede pertenecer a un determinado tablespace
En general, el almacenamiento de los objetos de la base de
datos (tablas e índices fundamentalmente) no se realiza sobre el archivo o
archivos físicos de la base de datos, sino que se hace a través de estructuras
lógicas de almacenamiento que tienen por debajo a esos archivos físicos, y que
independizan por tanto las sentencias de creación de objetos de las estructuras
físicas de almacenamiento. Esto es útil porque permite que a esos
"espacios de objetos " les sean asociados nuevos dispositivos físicos
(es decir, más espacio en disco) de forma dinámica cuando la base de datos
crece de tamaño más de lo previsto. Posibilita además otra serie de operaciones
como las siguientes:
Ø Asignar cuotas específicas de espacio a usuarios de
la base de datos.
Ø Controlar la disponibilidad de los datos de la base
de datos, poniendo fuera de uso alguno de esos espacios de tablas
individualmente.
Ø Realizar copias de seguridad o recuperaciones
parciales de la base de datos.
Ø Reservar espacio para almacenamiento de datos de
forma cooperativa entre distintos dispositivos.
El administrador de la base de datos puede crear o borrar
nuevos espacios lógicos de objetos, añadir o eliminar ficheros físicos de
soporte, utilizados como espacio temporal de trabajo, definir parámetros de
almacenamiento para objetos destinados a ese espacio de datos, todos los
gestores relacionales que venimos introduciendo como ejemplos siguen esta
filosofía. En el caso de Oracle, sobre los ficheros físicos de datos
(datafiles) se definen los tablespaces. Por lo tanto, una base de datos Oracle
se compone lógicamente de tablcspaccs, y físicamente de datafilcs. Su creación
es sencilla, con la sentencia GREAT'', TABLESPACE: CREATE TABLESPACE usuarios
DATAFILE `datal.ora' SIZE 50M
También es sencillo ampliar el espacio destinado a un
tablespace utilizando el comando ALTER TABLESPACE:
ALTER TABLESPACE usuarios ADD DATAFILE 'data2.ora' SIZE 25M
Para hacer más grande una base de datos, las opciones
disponibles son tres:
Cada base de datos contiene un tablespace llamado SYSTEM que
es creado automáticamente al crear la base de datos. Contiene las tablas del
diccionario de datos para la base de datos en cuestión. Es recomendable no
cargar datos de usuario en SYSTEM, para dejarlos como espacio de objetos del
sistema. Si además los datos de usuario están en tablespaces sitos en otros
dispositivos, el rendimiento mejorará porque las tablas del diccionario de
datos se acceden frecuentemente y por lo tanto son un cuello de botella
potencial desde el punto de vista del acceso a disco. A la hora de estimar el
espacio necesario para cl tablespace sys-nsm hay que tener en cuenta que las
unidades de programación PL-SQL (entorno de programación SQL proporcionado por
Oracle) almacenadas en la base de datos (procedimientos, paquetes, disparos y
funciones) almacenan sus datos en SYSTEM.
De acuerdo con lo comentado anteriormente, tablas e índices
se ubicarán en el tablespaee indicado en el momento de su creación con la
correspondiente sentencia CREATE. Si no se dice nada, se situarán en el
tablespace por defecto asociado al usuario creador.
3.1.1. Definición de espacio de almacenamiento
Las bases de datos suelen ser creadas para almacenar grandes
cantidades de datos de forma permanente. Por lo general, los datos almacenados
en éstas suelen ser consultados y actualizados constantemente.
La mayoría de las bases de datos se almacenan en las
llamadas memorias secundarias, especialmente discos duros, aunque, en
principio, pueden emplearse también discos ópticos, memorias flash, etc.
Las razones por las cuales las bases de datos se almacenan
en memorias secundarias son:
En cuanto al respaldo de las bases de datos (ver backup),
suelen emplearse tanto discos duros, como cintas magnéticas, discos ópticos o
similares.
Las técnicas empleadas para almacenar bases de datos son
sumamente importantes para la velocidad de acceso y recuperación de datos. Las
técnicas dependen del tipo de almacenamiento, el uso que se le da o se le dará
a la base de datos, la estructura de la misma, el SGBD empleado, etc.
Esta dependencia no significa necesariamente que haya que
cambiar la estructura de la base de datos si se cambian las técnicas empleadas.
Las técnicas de almacenamiento son independientes de la base de datos, pero, de
todas maneras, las mejores técnicas muchas veces pueden determinarse viendo la
estructura de la base de datos, entre otras características.
Los encargados de elegir estas técnicas son los diseñadores
y administradores de bases de datos, y dependen también de las capacidades del
SGBD. En general, el SGBD ofrece diferentes opciones y técnicas para organizar
los datos.
La idea es que los encargados de la base de datos encuentren
las técnicas idóneas, o sea, aquellas que permitan la mayor velocidad posible
de acceso a los datos. Una mala decisión en esta área puede resultar en una
menor velocidad de acceso a la base de datos, o en un uso excesivo del espacio
de almacenamiento, o incluso, puede aumentar la velocidad de consulta de una
base de datos, pero disminuir la velocidad de actualización de la misma.
3.1.2. Definición y creación del espacio asignado para
cada base de datos
Las bases de datos se almacenan en ficheros o archivos.
Existen diferentes formas de organizaciones primarias de archivos que
determinan la forma en que los registros de un archivo se colocan físicamente
en el disco y, por lo tanto, cómo se accede a éstos.
Las distintas formas de organizaciones primarias de archivos
son:
Existe una segunda forma de acceder a los datos llamada
organización secundaria o estructura de acceso auxiliar. Estas permiten que los
accesos a los registros de un archivo basado en campos alternativos, sean más
eficientes que los que han sido utilizados para la organización primaria de
archivos.
El DBMS asigna espacio de almacenamiento a las bases de
datos cuando los usuarios introducen create database o alter database. El
primero de los comandos puede especificar uno o más dispositivos de base de
datos, junto con la cantidad de espacio en cada uno de ellos que será asignado
a la nueva base de datos.
Si se utiliza la palabra clave default o se omite
completamente la cláusula on , el DBMS pone la base de datos en uno o más de
los dispositivos predeterminados de base de datos especificados en
master..sysdevices
Para especificar un tamaño (en este ejemplo, 4MB) para una
base de datos que se va a almacenar en una ubicación predeterminada, utilice on
default = size de esta forma:
create database newpubs on default = 4
Para situar la base de datos en dispositivos específicos, dé
el nombre del dispositivo o dispositivos en que desea almacenarla. Como la
sintaxis indica, puede solicitar que se almacene en más de un dispositivo de
base de datos, con una cantidad de espacio diferente en cada uno. Todos los
dispositivos mencionados en create database deben estar enumerados en
sysdevices . En otras palabras, deben haberse inicializado con disk init .
La instrucción siguiente crea la base de datos newdb y
asigna 3MB en mydata y 2MB en newdata . Como en el ejemplo anterior, la base de
datos y el diario de transacciones no se separan:
create database newdb on mydata = 3, newdata = 2
Warning! A menos que cree una base de datos pequeña o que no
sea crucial, sitúe siempre el diario en un dispositivo de base de datos aparte.
Si la cantidad de espacio solicitada a un dispositivo
específico de base de datos no está disponible, el DBMS crea la base de datos
con tanto espacio como sea posible en cada dispositivo y muestra un mensaje
informando el espacio asignado en cada uno. (Esto no se considera un error.) Si
hay menos espacio del mínimo necesario para una base de datos en el dispositivo
especificado (o en el predeterminado, si no se especifica un nombre), el
comando create database falla.
3.1.4 Particiones
Una partición es una división de una base de datos lógica o
sus elementos constituyentes en partes independientes. La partición de bases de
datos se hace normalmente por razones de mantenimiento, rendimiento o manejo.
Una aplicación popular y favorable es en un Sistema de
Administración de Base de Datos Distribuida. Cada partición puede ser extendida
hasta múltiples nodos, y los usuarios en el nodo pueden hacer transacciones
locales en la partición. Esto aumenta el rendimiento en sitios que tienen
transacciones regularmente involucrando ciertas vistas de datos, y manteniendo
la disponibilidad y la seguridad.
Esta partición puede hacerse creando bases de datos más
pequeñas separadas (cada una con sus propias tablas, índices, y registros de
transacciones) o dividiendo elementos seleccionados, por ejemplo, solo una
tabla.
Partición horizontal consiste en poner
diferentes filas en diferentes tablas. Por ejemplo, clientes con códigos
postales menores que 50000 están almacenados en la tabla ClientesEste, mientras
que los clientes con códigos postales mayores o iguales a 50000 están
almacenados en la tabla ClientesOeste. Las dos tablas de partición son entonces
ClientesEste y ClientesOeste, mientras que una vista con una unión podría ser
creada con las dos tablas para poder dar una vista completa de todos los
clientes.
Partición vertical consiste en crear miles de
tablas con miles de columnas y crear tablas para poner las columnas restantes.
Se puede particionar una tabla de 5 maneras diferentes:
Por rango: para construir nuestras particiones
especificamos rangos de valores. Por ejemplo, podríamos segmentar los datos en
12 particiones: una para los contratos de 1950 a 1960, otra para los años 60,
los 70, 80, 90, la década del 2000 y la década actual
ALTER TABLE contratos
PARTITION BY RANGE(YEAR(fechaInicio)) (
PARTITION partDecada50 VALUES
LESS THAN (1960),
PARTITION partDecada60 VALUES
LESS THAN (1970),
PARTITION partDecada70 VALUES
LESS THAN (1980),
PARTITION partDecada80 VALUES
LESS THAN (1990),
PARTITION partDecada90 VALUES
LESS THAN (2000),
PARTITION partDecada00 VALUES
LESS THAN (2010),
PARTITION partDecada10 VALUES
LESS THAN MAXVALUE
);
Por listas: para construir nuestras particiones
especificamos listas de valores concretos.
ALTER TABLE contratos
PARTITION BY LIST(YEAR(fechaInicio)) (
PARTITION partDecada50 VALUES IN (1950, 1951, 1952, 1953,
1954, 1955, 1956, 1957, 1958, 1959),
PARTITION partDecada60 VALUES IN (1960, 1961, 1962, 1963,
1964, 1965, 1966, 1967, 1968, 1969),
PARTITION partDecada70 VALUES IN (1970, 1971, 1972, 1973,
1974, 1975, 1976, 1977, 1978, 1979),
PARTITION partDecada80 VALUES IN (1980, 1981, 1982, 1983,
1984, 1985, 1986, 1987, 1988, 1989),
PARTITION partDecada90 VALUES IN (1990, 1991, 1992, 1993,
1994, 1995, 1996, 1997, 1998, 1999),
PARTITION partDecada00 VALUES IN (2000, 2001, 2002, 2003,
2004, 2005, 2006,
2007, 2008, 2009),
PARTITION partDecada10 VALUES IN (2010, 2011, 2012, 2013,
2014, 2015, 2016,
2017, 2018, 2019)
);
Por hash: MySQL se encarga de distribuir las tuplas
automáticamente usando una operación de módulo. Sólo hay que pasarle una
columna o expresión que resulte en un entero (el hash) y el número de
particiones que queramos crear.
ALTER TABLE contratos
PARTITION BY HASH(YEAR(fechaInicio))
PARTITIONS 7;
Por clave: similar a la partición por hash, pero en
este caso no necesitamos pasarle un entero; MySQL utilizará su propia función
de hash para generarlo. Si no se indica ninguna columna a partir de la que
generar el hash, se utiliza la clave primaria por defecto.
ALTER TABLE contratos
PARTITION BY KEY()
PARTITIONS 7;
Compuesta: podemos combinar los distintos métodos de
particionado y crear particiones de particiones
Por último, un pequeño ejemplo de cómo afectaría el
particionado a una consulta sencilla como obtener el número total de tuplas que
cumplen una condición. Estas son las estadísticas de la consulta sin
particionado (ni índices)
EXPLAIN SELECT COUNT(*)
FROM contratos
WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'
select_type
|
table
|
type
|
key
|
rows
|
Extra
|
SIMPLE
|
contratos
|
ALL
|
239796
|
Using where
|
Y este el resultado de añadir las particiones (nótese la
palabra clave PARTITIONS para que nos muestre también la información relativa a
las particiones)
EXPLAIN PARTITIONS SELECT COUNT(*)
FROM contratos
WHERE fechaInicio BETWEEN '1950-01-01' AND '1955-12-31'
select_type
|
table
|
partitions
|
type
|
key
|
rows
|
Extra
|
SIMPLE
|
contratos
|
partDecada50
|
ALL
|
8640
|
Using where
|
El número de tuplas que MySQL tiene que comprobar se ve
disminuido en 2 órdenes de magnitud.
3.1.5 Espacios privados
Un «espacio privado» permite que los administradores y
redactores gestionen el conjunto de datos del sitio. Algunas bases de datos
tienen estos espacios privados llamados comúnmente paneles de control, que son
formularios que aparecen al abrir la base de datos.
Los paneles de control sirven de "puerta
principal" o "recibidor" de una base de datos en el sentido de
que dirigen a las personas hacia determinadas tareas, como introducir o buscar
datos. Sirven también para mantener alejados a los usuarios de las tablas que
contienen los datos en tiempo real.
Cuando reciba una base de datos, debe adentrarse más allá
del panel de control para averiguar cómo están estructurados los datos, pero
merece la pena echar un vistazo inicial al panel de control. Le puede ofrecer
algún indicio sobre las tareas que el diseñador de la base de datos consideró
que realizarían los usuarios habitualmente con los datos.
Puede hacer clic en los vínculos del panel de control para
ver qué objetos, como formularios e informes, abren.
3.1.6 Espacios para objetos
Espacios Para Objetos
Los DBMS se basan en archivos para almacenar datos, y estos
archivos, o conjuntos de datos, residen en medios de almacenamiento, o
dispositivos. Una buena parte del trabajo del DBA implicará la planificación
para el almacenamiento real de la base de datos.
Algunas tecnologías de almacenamiento son más adecuadas que
otras. Sin embargo, la naturaleza mecánica de la unidad de disco los hace más
vulnerables al fracaso de los componentes de otro equipo. Además, las formas en
que las unidades de disco son utilizados por las bases de datos pueden hacer
que la gestión del almacenamiento impredecibles, como la barra lateral
"Modern DBMS de uso de disco“ Puede usarse RAID para mejorar la seguridad
de los datos.
Para aplicaciones de misión crítica la integridad de los
datos puede ser más importante que la disponibilidad de datos. Si el soporte es
poco fiable y un fallo de las causas de corrupción de datos, los datos perdidos
puede ser más de un problema que el tiempo de inactividad. Es imperativo, por
tanto, que las soluciones de almacenamiento de base de datos para protegerlos a
toda costa. La recuperación de datos desde medios de almacenamiento lleva mucho
más tiempo en completarse que la recuperación de datos desde la memoria caché o
la memoria.
El rendimiento de la base de datos depende de la entrada y
salida a disco. La cantidad de datos almacenados es mayor que nunca antes, y
los datos se almacenados por más tiempo.
Algunos DBMS permiten al tamaño de los archivos temporales
de expandirse y contraerse de forma automática. Dependiendo del tipo y la
naturaleza de las operaciones de base de datos en proceso, esta fluctuación
puede provocar picos de uso del disco
El crecimiento de la capacidad de almacenamiento aumenta aún
más la complejidad de la gestión de datos y bases de datos. Muchas
organizaciones están implementando nuevas tecnologías de almacenamiento, tales
como almacenamiento en red (NAS) y redes de área de almacenamiento (SAN), para
ayudar a controlar la cantidad cada vez mayor de almacenamiento necesario para
los usos modernos. La gestión del almacenamiento en el entorno dinámico de hoy
es una tarea difícil DBA.
Hay muchos problemas de almacenamiento que deben ser
resueltos antes de que un DBA pueda crear una base de datos. Uno de los temas
más importantes es la cantidad de espacio para permitir la base de datos.
El cálculo espacial debe tener en cuenta no sólo tablas,
índices, sino también, y dependiendo del DBMS, el registro de transacciones.
Cada una de estas entidades probablemente requerirá un archivo separado o
conjunto de datos, para el almacenamiento persistente.
3.2. Segmentos
Un segmento contiene un tipo específico de objetos de
la base de datos, como por ejemplo una tabla. Un segmento está compuesto de
extensiones que definen el tamaño disponible para el segmento. A medida que se
llenan las extensiones se van añadiendo nuevas extensiones, es aquel espacio
reservado por la base de datos, dentro de un datafile, para ser utilizado por
un solo objeto. Así una tabla (o cualquier otro objeto) está dentro de su
segmento, y nunca podrá salir de él, ya que si la tabla crece, el segmento
también crece con ella.
Físicamente todo objeto en base de datos no es más que un
segmento dentro de un datafile. Se puede decir que, un segmento es a un objeto
de base de datos, lo que un datafile a un tablespace; el segmento es la
representación física del objeto en base de datos (el objeto es solo una
definición lógica).
Los segmentos son los equivalentes físicos de los objetos
que almacenan datos. El uso efectivo de los segmentos requiere que el DBA
conozca los objetos, que utiliza una aplicación, cómo los datos son
introducidos en esos objetos y el modo en que serán recuperados.
Un segmento está constituido por secciones llamadas extensiones,
que son conjuntos contiguos de bloques. Una vez que una extensión existente en
un segmento no puede almacenar más datos, el segmento obtendrá del espacio de
tabla otra extensión. Este proceso de extensión continuará hasta que no quede
más espacio disponible en los ficheros del espacio de tablas, o hasta que se
alcance un número máximo de extensiones por segmento.
Existen 5 tipos de segmento:
Ø •De datos.
Ø •De índices.
Ø •De rollback.
Ø •Temporales.
Ø •De bootstrap.
3.3. Memoria Compartida.
La memoria compartida contiene todos los datos intervenidos,
como:
Ø Grupo de memorias intermedias
Ø Tabla de bloqueos
Ø Memoria intermedia del registro, que contiene las
entradas del registro que esperan a ser volcadas en el almacenamiento estable
Ø Planes de consulta en caché, que se pueden
reutilizar si se envía de nuevo la misma consulta
La exclusión mutua se puede implementar por medio de
funciones del sistema operativo llamadas semáforos. Implementaciones
alternativas, con menos sobrecargas, utilizan instrucciones atómicas especiales
soportadas por el hardware de la computadora; un tipo de instrucción atómica
comprueba una posición de la memoria y la establece a uno automáticamente. Los
mecanismos de exclusión mutua también se utilizan para implementar pestillos.
3.4. Instancias múltiples
Se llama instancia múltiple al hecho de poder ejecutar un
programa más de una vez al mismo tiempo. Hay programas que no admiten más que
una sola instancia, es decir que si ya se está ejecutando, por más que lo
cliquees de nuevo en el icono o en el menú no aparecerá un nuevo ejemplar del
programa. Con las bases de datos se complica un poco porque si un usuario
modifica un registro que otro usuario tiene también abierto, la modificación
que se haga en una instancia debe reflejarse de inmediato (actualizarse) en
cualquier otra instancia abierta de la misma base de datos.
Sin embargo, en las bases de datos se puede seleccionar la
opción en el diseño de la BD, y se reflejarán de inmediato las modificaciones
en todas las instancias abiertas
En programación, una instancia se produce con la creación de
un objeto perteneciente a una clase (se dice que se instancia la clase). El
objeto que se crea tiene los atributos, propiedades y métodos de la clase a la
que pertenece. Los objetos y sus características se usan en la construcción de
programas, ya sea como contenedores de datos o como partes funcionales del
programa. Los objetos también puede ser ocurrencia de las clases.