Arquitectura de La Base de Datos
Arquitectura de La Base de Datos
Arquitectura de La Base de Datos
Cathan Cook
arquitectura de SQL Server. Se especifican mejoras para el motor de la base de datos, ofreciendo
sugerencias de uso y punteros que permiten tener acceso a más información. Un conocimiento en
profundidad de los motores de SQL Server puede ayudar al administrador de la base de datos (ingeniero
del sistema de la base de datos) a sacar un mayor partido de SQL Server durante el diseño, creación o
mejora de los sistemas de bases de datos. Aunque este artículo está dirigido a los profesionales que
trabajan con bases de datos, el material puede resultar útil también desde un punto de vista educativo
Contenido
Introducción
Tablas e índices
Registro y recuperación
Mejoras administrativas
Conclusión
Introducción
En este artículo se describen las nuevas características del motor de almacenamiento de Microsoft® SQL
Server™ 2000 y se ofrecen sugerencias para su uso, así como información detallada sobre cómo funciona
el motor de almacenamiento. Una comprensión básica del funcionamiento interno del motor permitirá
En un mundo orientado a las aplicaciones de alta escalabilidad, las bases de datos se diseñan e
evolución a medida que cambian los requisitos de desarrollo y aumenta el uso de la producción. Los
Las distintas versiones de SQL Server 2000 admiten una amplia variedad de sistemas, con tamaños que
varían desde un diminuto sistema móvil para un Pocket PC hasta un sistema de soporte de decisiones o
Windows® 2000 Datacenter Server agrupados. Todos estos sistemas mantienen la flexibilidad, seguridad
y confiabilidad que exigen los sistemas empresariales de misiones importantes.
Se pueden distribuir aplicaciones de SQL Server 2000 para proyectos de distintas finalidades y tamaños,
Disponibilidad
La confiabilidad y concurrencia se mejoran con nuevos algoritmos para la interacción física de archivos.
Estos algoritmos eliminan la necesidad de ejecutar comandos de consola de base de datos (DBCC) como
parte del mantenimiento habitual. No obstante, DBCC sigue estando disponible y los nuevos comandos
Escalabilidad
El subsistema de almacenamiento, formado por archivos físicos de bases de datos y su diseño en disco,
admite la escala desde bases de datos muy pequeñas hasta bases de datos de gran tamaño. SQL Server
Fácil utilización
mantenimiento sencillo de los servidores y las aplicaciones remotas sin necesidad de que el DBA tenga
que visitar cada uno de los sitios. La configuración del servidor, administrada por un sofisticado
algoritmo, responde de forma dinámica a los patrones de uso del servidor. De este modo, se libera al
El servidor de bases de datos relacionales de SQL Server 2000 está formado por dos partes principales:
el motor relacional y el motor de almacenamiento. Los dos motores funcionan de forma independiente,
interactuando entre sí a través de los componentes de acceso a datos nativos como OLE DB. El motor
relacional proporciona una interfaz en el motor de almacenamiento, formado por los servicios que
interactuarán con las características y los componentes del almacenamiento de la base de datos
subyacente.
Ofrecer características que faciliten aún más el uso en la administración de los componentes de
almacenamiento
Administrar los búferes de datos y todas las E/S en los archivos físicos
Administrar los archivos y las páginas físicas utilizadas para almacenar datos
Recuperar desde errores graves del sistema
El motor de almacenamiento de SQL Server 2000 ofrece nuevas características que aportan simplicidad
conceptual y flexibilidad física, a la vez que reducen la necesidad de minuciosas planeaciones en relación
a la capacidad y ajustes del rendimiento. SQL Server 2000 reacciona en su propio entorno y se adapta
dinámicamente de forma rápida y precisa a los cambios en el uso de las bases de datos. Este avance en
Los administradores de bases de datos de SQL Server 2000 se pueden centrar en el diseño de un sistema
que responda al flujo y utilización de los datos en lugar de tener que dedicar tiempo a ajustar parámetros
individuales.
Las modificaciones realizadas en SQL Server 2000 se integran en las mejoras de la arquitectura
introducidas en SQL Server 7.0 para proporcionar una base para la mejora e innovación en curso. Uno de
los objetivos clave del equipo encargado del motor de almacenamiento era el de reducir la cantidad de
tiempo y esfuerzo empleados en los ajustes habituales del servidor. Debido a que la mayoría de los
valores de los parámetros de ajuste se pueden basar en el uso de las bases de datos, el motor se adapta
ahora dinámicamente a las situaciones del entorno de la base de datos de acuerdo a un algoritmo de
adaptación. Esta flexibilidad automática se ha implementado para los parámetros de ajuste que exigían
una experimentación y ajustes constantes en las versiones anteriores. Se pueden seguir ajustando las
características de forma manual, pero SQL Server 2000 libera al usuario en gran medida de esta labor.
Sólo un pequeño porcentaje de clientes de SQL Server puede necesitar un ajuste en los parámetros; este
tipo de ajuste sólo deberá realizarse con un meticuloso sistema de pruebas y bajo la supervisión de
SQL Server 2000 se ha visto enriquecido con características que permiten una interacción de datos más
eficaz y una mayor flexibilidad administrativa. En las siguientes secciones se ofrece información más
detallada sobre estas mejoras así como algunas sugerencias sobre la forma de utilizarlas.
En SQL Server 2000, el motor de almacenamiento se ha mejorado para proporcionar una mayor
escalabilidad y rendimiento a la hora de interactuar con los datos. Un conocimiento profundo de estas
mejoras puede ayudar a utilizar SQL Server de forma mucho más eficaz.
El intercambio de datos comienza con una consulta, originada desde una interfaz de usuario o una tarea
automática. La solicitud de datos pasa al motor relacional, que interactúa con el motor de
almacenamiento para obtener los datos y volver a pasarlos al usuario. Desde el punto de vista del
usuario, e incluso del administrador de la base de datos, no hay diferencia alguna en el funcionamiento
Los datos se trasladan entre el servidor y el usuario a través de una serie de transacciones. La aplicación,
o el usuario, inicia el trabajo y la base de datos lo pasa al procesador de consultas para su realización y,
a continuación, devuelve los resultados finales. El procesador de consultas realiza la tarea de aceptar,
Así, por ejemplo, cuando una sesión de usuario emite una instrucción SELECT, tienen lugar los siguientes
pasos:
Se han realizado algunas mejoras para aumentar el rendimiento de este proceso. En SQL Server 2000, el
motor relacional coloca de nuevo predicados de consulta necesarios en el motor de almacenamiento para
que se puedan aplicar con mayor antelación en el proceso, dando como resultado un intercambio más
eficaz entre el motor de almacenamiento y el relacional. De este modo se puede obtener un rendimiento
Otra mejora se encuentra en el modo en que el motor de almacenamiento controla la selección de los n
registros principales de un conjunto de resultados. En SQL Server 2000, un nuevo motor de los n
registros principales analiza la mejor ruta de operación para instrucciones como ésta:
En este ejemplo, si se debe buscar en toda la tabla, el motor analiza los datos y realiza únicamente un
seguimiento de los n valores principales en la memoria caché. Esto supone un aumento considerable en
el rendimiento para este tipo de instrucción SELECT, ya que sólo se ordenan los n valores principales en
Exploraciones compartidas
En SQL Server 2000 Enterprise Edition, dos o más consultas pueden compartir exploraciones de tablas en
curso, lo que permite mejorar el rendimiento en bases de datos de SQL Server 2000 de gran tamaño. Por
ejemplo, cuando la consulta realiza una búsqueda en una tabla de gran tamaño utilizando una
exploración no solicitada, las páginas se trasladan a través de la caché para dejar espacio para la entrada
de flujo de datos. Si se hubiese iniciado otra consulta, una segunda exploración de la misma tabla haría
que la E/S del disco volviese a recuperar dichas páginas. En un entorno en el que son frecuentes las
exploraciones de tablas, esto podría producir la hiperpaginación ("thrashing") del disco ya que ambas
Un proceso de optimización reduce la cantidad de E/S del disco producidas por este tipo de patrón de
acceso a datos. La primera exploración no solicitada de una tabla leerá los datos del disco; en lugar de
tener que volver a realizar la lectura del disco, las siguientes exploraciones no solicitadas de la misma
tabla se pueden generar sobre la información que se encuentra ya en memoria. Consulte la figura 1.
Durante varias exploraciones simultáneas de la misma tabla, este proceso de sincronización puede
mejorar el rendimiento hasta ocho veces más. Esta mejora se percibe aún más en las grandes consultas
de soporte de decisión, donde el tamaño total de la tabla es mucho mayor que el tamaño de la caché.
Las exploraciones compartidas constituyen una característica que llama el motor de almacenamiento
como servicio de ayuda con las consultas que no disponen de un plan mejor de ejecución. El objetivo de
esta característica es el de ayudar en las lecturas frecuentes de tablas de gran tamaño. Cuando el
procesador de consultas determina que el mejor plan de ejecución incluye una exploración de tabla, se
llama a esta característica. No obstante, aunque se puede utilizar el ajuste de índice o consulta para
forzar exploraciones compartidas, no se obtiene un mayor rendimiento forzando una exploración de tabla
cuando un índice bien mantenido realizaría igualmente bien esta labor, o incluso mejor.
Concurrencia
Para mantener la coherencia de transacciones mientras un gran número de usuarios están interactuando
con los datos, el motor de almacenamiento bloquea recursos para administrar las dependencias de filas,
páginas, claves, intervalos de clave, índices, tablas y bases de datos. Al bloquear los recursos mientras
se están modificando, el motor evita que más de un usuario modifique los mismos datos al mismo
tiempo. Los bloqueos de SQL Server se aplican dinámicamente en varios niveles de granularidad para
En SQL Server 2000, las mejoras en la concurrencia reducen aún más los interbloqueos y los bloqueos de
recursos evitables. Por ejemplo, el administrador de bloqueos se ha mejorado para que tenga en cuenta
otros recursos que se podrían utilizar, como subprocesos y memoria. Esta nueva capacidad puede ayudar
al administrador de la base de datos a identificar una variedad más amplia de limitaciones de diseño o
hardware.
Se ha introducido una nueva interfaz Transact-SQL en el administrador de bloqueos para que admita la
lógica de bloqueo personalizada dentro del código de programación. Los bloqueos necesarios para la
que permite especificar un recurso definido por la aplicación que se va a bloquear (por ejemplo, un
bloqueo en un recurso de aplicación como un formulario en lugar de un bloqueo en una fila de datos), el
modo de bloqueo que se utilizará, el valor del tiempo de espera y si el ámbito del bloqueo deberá ser la
transacción o la sesión. Una vez iniciados los bloqueos con el nuevo administrador de bloqueos de la
aplicación, éstos participan de la administración normal de bloqueos de SQL Server, como si el motor de
almacenamiento los hubiese iniciado, por lo que no es necesario preocuparse de que permanezca abierto
El proceso a través del cual se obtienen los bloqueos en SQL Server 2000 tiene en cuenta si se confirman
o no todos los datos de la página. Por ejemplo, si se ejecuta una instrucción SELECT en una tabla cuyos
datos no se han modificado recientemente, como una tabla de bases de datos pubs, el proceso no
produce bloqueos, ya que ninguna transacción activa ha actualizado recientemente la tabla. El motor de
almacenamiento logra esto comparando el número de secuencia de registro de la página de datos con las
transacciones activas actuales. En las bases de datos donde la mayoría de los datos son más antiguos
que la transacción activa más antigua, esto puede reducir el bloqueo de forma significativa mejorando,
así, el rendimiento.
Mientras que los bloqueos protegen los datos durante las transacciones, otro proceso, el cierre con
pestillo, controla el acceso a las páginas físicas. Los pestillos son objetos de sincronización ligeros y a
corto plazo que protegen las acciones que no es necesario bloquear durante la vida de una transacción.
Cuando el motor explora una página, la cierra con pestillo, lee la fila, la devuelve al motor relacional y la
vuelve a dejar abierta para que otro proceso pueda tener acceso a los mismos datos. A través de un
proceso denominado cierre con pestillo selectivo ("lazy latching"), el motor de almacenamiento optimiza
el acceso a las páginas de datos abriendo los pestillos sólo cuando otro proceso en curso solicita también
la página. Si no hay ningún otro proceso en curso que solicite los mismos datos de la página, un único
cierre con pestillo permanece válido para toda la operación de dicha página.
Para mejorar la concurrencia del sistema, es necesario centrarse en el diseño del sistema de la base de
datos y los objetos de código que le afectan. SQL Server 2000 se ha diseñado para que admita varios
terabytes de datos y una escalabilidad lineal prácticamente ilimitada. El papel que debe cumplir el
diseño y optimización de todos los componentes de la base de datos desde el código hasta el
almacenamiento de datos en disco, para garantizar que el diseño continúa cumpliendo con el acuerdo a
nivel de servicios.
Tablas e índices
También se han realizado mejoras en las estructuras físicas de los datos para permitir una mayor
A medida que aumenta la tabla o índice, SQL Server asigna nuevas páginas de datos en conjuntos de
ocho, denominados extensiones. Una fila de datos no puede atravesar páginas, por lo que sólo puede
contener 8 KB de datos, si bien el texto asociado, ntext o las columnas de imágenes se pueden
almacenar en distintas páginas. Las tablas que disponen de índices agrupados se almacenan físicamente
en orden de clave en el disco. Los montones, o "heaps", son tablas que no tienen índices agrupados y no
SQL Server 2000 admite vistas indizadas, normalmente denominadas vistas materializadas en otros
productos de bases de datos. Cuando se crea un índice agrupado en una vista, ésta deja de ser un objeto
derivado para convertirse en un objeto base almacenado en la base de datos con la misma estructura
que una tabla con un índice agrupado. La vista indizada resulta útil para almacenar valores calculados
previamente o el resultado de una unión compleja, en los casos en el que el coste de mantenimiento no
sobrepasa la mejora obtenida en relación al rendimiento. En SQL Server 2000 Enterprise Edition, el
procesador de consultas utiliza automáticamente una vista indizada cuando ésta optimiza un plan de
consulta. Las vistas indizadas pueden mejorar la velocidad de consulta en datos que rara vez se
modifican, pero normalmente forman parte de una unión o consulta de cálculo compleja.
Texto de fila
El texto de fila permite almacenar datos pequeños de texto en la página principal. Por ejemplo, si se
dispone de una tabla que tiene una columna de texto, pero que los valores de texto son normalmente lo
suficientemente pequeños como para ajustarse a una página normal con el resto de la fila, se puede
definir un umbral en la columna de texto. Este umbral determina el tamaño por debajo del cual los datos
se almacenan en la página principal en lugar de en otra página de texto. Esto daría como resultado un
rendimiento más rápido si la mayoría de los datos se ajustaran a la página, y sólo un pequeño porcentaje
de los datos es, en realidad, lo suficientemente grande como para justificar la creación de una página de
texto.
Para determinar cuándo se debe utilizar esta nueva característica, es necesario equilibrar la densidad del
almacenamiento o cuántas filas se almacenan en cada página de datos frente a la mejora de E/S. Por
ejemplo, se dispone de una columna de texto para los comentarios. En la tabla, se observa que el 20%
de los valores de texto son grandes, pero que el restante 80% es menor de 100 bytes. Éste parece ser
un candidato lógico para una solución de texto de fila; sin embargo, sólo se debe utilizar este tipo de
texto si se tiene acceso frecuente a los datos de esa columna. Si los usuarios tienen acceso a esta tabla
con frecuencia, pero no miran la columna de comentarios a menos que estén realizando una
investigación especial, puede que el uso de texto de fila no sea la respuesta más acertada. La densidad
de almacenamiento se reduce debido a que se almacenan menos columnas por página y, además, puesto
que la tabla contiene más páginas, aumentará el tiempo de respuesta de exploración de la tabla. Por
tanto, el mejor caso para implementar el texto de fila se produce cuando se tiene un acceso frecuente a
la columna de texto que, además, dispone de multitud de valores menores que 8 K que podrían
almacenarse en la fila.
SQL Server 2000 introduce tres nuevos tipos de datos. bigint es un tipo de entero de 8 bytes. sql_variant
permite el almacenamiento de valores de datos de distintos tipos de datos. El tercer tipo, table, resulta
útil para la optimización del rendimiento. Las variables de tabla utilizan tempdb de forma más eficaz y
resultan más rápidas que las tablas temporales. Al igual que otras variables, se incluyen en el ámbito del
lote en el que se declararon. Con una funcionalidad prácticamente idéntica a las tablas temporales, las
variables de tabla se ejecutan de forma más rápida que las tablas temporales o los cursores y utilizan
mejor los recursos del servidor. Como regla general, es necesario tener siempre en cuenta la mejor
forma de utilizar los recursos disponibles en los servidores cuando se cree código para interactuar con
Índices
El acceso a los datos se optimiza a través del uso de los índices. Debido a que los requisitos de indización
se basan en el uso, la indización incorrecta es una de las causas más frecuentes de ralentización de una
base de datos. El mantenimiento estándar de los índices debería incluir la comprobación periódica del
esquema de indización actual y el ajuste del mismo a la utilización actual del sistema mediante la
Varias características nuevas de SQL Server 2000 facilitan y hacen más eficaz la administración en el
mantenimiento de los índices. Estas mejoras disminuyen la E/S de disco, aumentando así el rendimiento
de las exploraciones de índices. Esto resulta especialmente útil cuando se encuentra disponible un
segundo índice para una exploración de intervalos.
Generación de índices
Para obtener más información sobre estas opciones, consulte los libros en línea de SQL Server 2000 (en
inglés).
Otra característica de escalabilidad para sistemas de gran tamaño es la generación de índices paralelos,
disponible en SQL Server 2000 Enterprise Edition. Este proceso se invoca de forma automática cuando se
emite una única instrucción CREATE INDEX. El motor de almacenamiento calcula los requisitos de los
datos y, a continuación, crea subprocesos separados, cada uno de los cuales genera una sección del
índice.
Figura 2. Optimización de índice paralela
La generación de un índice puede utilizar también una exploración de tabla compartida, optimizando aún
más el proceso.
Defragmentación de índices
SQL Server 2000 admite la reorganización en línea de los índices, un increíble avance desde las últimas
y se puede detener y reiniciar en cualquier momento sin pérdida de trabajo. La reorganización se realiza
A medida que se inserta, elimina y actualiza información de una tabla, las páginas de índices agrupados y
no agrupados pueden finalmente fragmentarse y reducir así la eficacia de las consultas de intervalo de
los datos. Por tanto, puede resultar beneficioso la defragmentación de los índices de forma periódica. Se
puede utilizar DBCC SHOWCONTIG, mejorado en SQL Server 2000, para analizar e informar de la
fragmentación. Para obtener más información, consulte los libros en línea de SQL Server 2000 (en
inglés).
Si se determina que un índice está fragmentado, utilice DBCC INDEXDEFRAG para reorganizarlo.
Reordena las páginas en orden de clave lógico, compactando el espacio libre y desplazando las filas
dentro de las extensiones establecidas para ajustarse al valor del factor de relleno. De este modo, mejora
el rendimiento de la lectura al rellenar densamente las páginas para que se deban leer menos páginas
durante la exploración de los datos. La ejecución de DBCC INDEXDEFRAG tiene un impacto mucho menor
en el rendimiento en línea que la regeneración del índice, siempre que el índice se haya mantenido
DBCC INDEXDEFRAG es uno de los números de las operaciones administrativas en línea de larga
ejecución que utiliza pequeñas transacciones internamente. Estas pequeñas transacciones maximizan la
concurrencia dentro del servidor, permiten que la operación se detenga sin pérdida en el trabajo y están
Registro y recuperación
El registro de transacciones es una secuencia de registros que guarda los cambios producidos en la base
de datos desde el punto en el que ésta se creó hasta el momento actual. Cada operación registrada crea
a su vez un registro de dicha operación. Estos registros generados por la transacción se graban en el
disco cuando ésta se confirma. Por el contrario, las páginas de datos modificadas por la transacción no se
graban inmediatamente en el disco, sino que se retienen en la caché del búfer de SQL Server y se
guardan posteriormente. Este retraso en la escritura de los datos en el disco permite maximizar la
eficacia de los accesos múltiples a las páginas de datos y evita las interrupciones en las exploraciones.
Forzar el registro en el disco garantiza que no se pierda ningún trabajo confirmado en caso de un error
grave en el servidor.
Con la recuperación se asegura que la base de datos es coherente desde el punto de vista transaccional
como paso previo a su presentación en línea. Se dice que una base de datos es coherente de forma
siempre define la vista correcta de la base de datos. En resumen, la recuperación es el proceso de hacer
que los datos sean coherentes con el registro de las transacciones en un momento dado.
La recuperación se lleva a cabo de forma automática cuando se inicia SQL Server, cuando se tiene acceso
a una base de datos o como paso final en la restauración de una base de datos desde la copia de
seguridad. El primero de los casos, cuando la recuperación se realiza cuando se inicia SQL Server, se
seguridad se debe normalmente a un error del disco. Este tipo de recuperación se denomina recuperación
La recuperación de reinicio es automática y siempre recupera al momento dado más reciente. En el caso
recuperación a un momento anterior. Esto está sujeto a limitaciones. Para obtener más información,
La recuperación de reinicio tiene lugar de forma automática cada vez que se inicia una instancia de SQL
Server y consiste en deshacer cualquier transacción que haya quedado incompleta la última vez que se
de datos puede elegir la recuperación a un momento anterior. Esto está sujeto a limitaciones. Para
obtener más información, consulte los libros en línea de SQL Server 2000 (en inglés). En ambos casos, la
1. Se rehacen todos los cambios hasta que se encuentra el momento dado de destino en el registro
de transacciones.
2. Se deshace todo el trabajo realizado por las transacciones que estaban activas en el momento
en el que se detuvo la acción de rehacer.
SQL Server utiliza puntos de control para acelerar la recuperación de reinicio. El punto de control fuerza
todas las páginas de datos modificadas actualmente en el búfer a que se incluyan en la caché del disco.
De este modo, se crea un punto de inicio para la parte de rehacer de la recuperación. Debido a que los
puntos de control pueden resultar costosos económicamente, SQL Server administra automáticamente
los puntos de control para maximizar el rendimiento mientras minimiza el tiempo que se tarda en
reiniciar.
En SQL Server 2000, las escrituras que finalizan correctamente se deben almacenar de forma duradera
en el disco. Si se utiliza el almacenamiento en disco en la caché de escritura, se debe trabajar en
colaboración con su proveedor para garantizar que la caché es tolerante a errores. Esta tolerancia indica
que la caché es inmune a los errores energéticos o a las acciones del operador. Si su caché no es
En SQL Server 7.0 era posible la recuperación en cualquier momento especificado. En el caso de un error
grave del hardware, el proceso de restauración resultaba bastante sencillo. Sin embargo, otra amenaza
para la base de datos es la posibilidad de que se puedan introducir datos no válidos o que la acción de un
usuario destruya datos válidos. En este caso, es necesario determinar cuándo comenzó la transacción
problemática. En SQL Server 7.0, la única forma de realizar esto consistía en restaurar los registros en
una copia de la base de datos hasta que el problema volviese a repetirse; después, se podría ejecutar su
restauración en la imagen de producción hasta el momento justamente anterior al que fue descubierto el
error.
En SQL Server 2000, se pueden marcar las transacciones en el registro. Posteriormente, si se necesita
realizar una restauración, se puede hacer referencia a la marca utilizada en el momento de la ejecución
en lugar de emplear la hora de un reloj de pared. Para ello, se debe utilizar una instrucción denominada
BEGIN TRANSACTION y la cláusula WITH MARK [descripción]. Las marcas se almacenan en msdb. La
recuperación se puede incluir o detener justo antes de una transacción que contiene la marca. Por
ejemplo, si se dispone de un proceso que se ejecuta por lote y se cambian varios registros, se puede
utilizar esta característica para garantizar que si el proceso se ejecuta en circunstancias erróneas, se
puedan deshacer los datos hasta el momento dado en el que se ejecutó el comando.
Los nombres de marcas no necesitan ser únicos. Para indicar la transacción necesaria, se debe especificar
También se pueden utilizar marcas en una transacción distribuida, denominadas marcas distribuidas,
para admitir la recuperación de varias bases de datos relacionadas en un estado coherente desde el
punto de vista transaccional. Estas bases de datos relacionadas pueden situarse en las mismas o en
diferentes instancias de SQL Server. Se pueden establecer marcas distribuidas en un conjunto de bases
de datos de forma periódica (por ejemplo, una vez cada cinco minutos). Si el registro de transacciones de
una de las bases de datos resulta dañado, se debe recuperar el conjunto de las bases de datos en un
momento anterior. La marca distribuida proporciona este punto. El uso de las marcas distribuidas invalida
la preocupación de coordinar el momento preciso de las copias de seguridad para varias bases de datos
relacionadas. Para obtener más información, consulte "Recovering to a Named Transaction" en los libros
Las operaciones de reducción del registro no se ejecutaban de forma inmediata en SQL Server 7.0.
Quedaban aplazadas hasta que se realizara la copia de seguridad del registro de transacciones o se
truncara. Esto dejó confundidos a muchos clientes de SQL Server 7.0. SQL Server 2000 reduce al
máximo el registro y, a continuación, indica si se puede reducir aún más después de la copia de
seguridad del registro. En este caso, se debe ejecutar el comando de reducción de nuevo tras la
finalización de la copia de seguridad del registro. Para obtener más información, consulte "Shrinking the
Transaction Log" en los libros en línea de SQL Server 2000 (en inglés).
necesario seguir investigando sobre cuál es la causa de que se rellene el registro en lugar de centrarse en
Modelos de recuperación
Los modelos de recuperación se agregaron a SQL Server 2000 para facilitar la planeación de la protección
de datos. Clarifican el equilibrio entre el rendimiento, los requisitos de espacio del registro y la protección
ante un error de un medio (disco). Existen tres modelos de recuperación: simple, completa y de registro
masivo.
La elección del modelo de recuperación se basa en los requisitos de disponibilidad y uso de la base de
datos y ayuda a determinar los procedimientos adecuados de restauración y copia de seguridad. Los
las copias de seguridad. La recuperación de reinicio recupera todo el trabajo confirmado. Para obtener
más información, consulte "Selecting a Recovery Model" en los libros en línea de SQL Server 2000 (en
inglés).
Se puede cambiar fácilmente entre los modelos de recuperación. Por ejemplo, en una base de datos de
gran tamaño, se puede utilizar la recuperación completa, de registro masivo, o ambas. Se puede utilizar
la completa durante el día y la de registro masivo por la noche, durante un proceso de carga de datos
que consista en la inserción masiva y la regeneración de índices. También se puede cambiar al registro
masivo mientras se ejecuta una carga de datos y volver al modo completo, ejecutar una copia de
seguridad del registro de transacciones y ser capaz de restaurar al momento dado sin tener que ejecutar
una copia de seguridad completa de la base de datos. Esta característica permite realizar el
procesamiento masivo de forma más eficaz; lo único que hay que hacer es realizar luego una copia de
Para obtener más información, consulte "Switching Recovery Models" en los libros en línea de SQL Server
El modelo de recuperación simple normalmente requiere menos espacio en el registro, pero provoca la
mayor pérdida potencial de trabajo si se dañan los datos o los archivos del registro. Sólo se registran los
eventos necesarios para la recuperación básica. Mediante el modelo de recuperación simple, sólo se
encuentran disponibles las copias de seguridad completas o de las diferencias de las bases de datos. En
caso de un error grave, se debe volver a realizar todo el trabajo confirmado desde la última copia de
seguridad. Este modelo es el más sencillo de administrar, pero no se trata de una buena elección para
Este modelo es similar a la opción truncar registro en punto de comprobación de SQL Server 7.0 y
En el modelo de recuperación completa se registra todo. Este modelo proporciona una protección total
frente a la pérdida de trabajo desde un archivo de datos dañado. Si se daña el registro de transacciones,
se pierde el trabajo confirmado desde la última copia de seguridad del registro y se debe rehacer de
forma manual.
Aún cuando se utilice el modelo de recuperación completa, es importante utilizar los discos con tolerancia
El modelo de recuperación de registro masivo proporciona el rendimiento óptimo para las operaciones
masivas. Estas operaciones consumen menos espacio de registro que con el modelo de recuperación
completa. Así, por ejemplo, se registra la asignación de una nueva página, pero no los datos insertados
en la misma. En SQL Server 2000, las operaciones masivas están formadas por la carga masiva (BCP y
BULK INSERT, incluyendo cuando se ejecutan dentro del paquete DTS), SELECT INTO, CREATE INDEX,
WRITETEXT y UPDATETEXT.
masiva minimiza el registro de las operaciones masivas. Tenga en cuenta que en el caso de que la
recuperación se convierta en necesaria, si se daña el registro o las operaciones masivas han tenido lugar
desde la copia de seguridad del registro más reciente, se pierden los cambios efectuados en la base de
una copia de seguridad del registro de transacciones que contenga cambios masivos. Las copias de
forma masiva contienen las extensiones modificadas por las operaciones masivas. Esta característica
mejora la compatibilidad para el envío de registros, debido a que ya no es necesario preocuparse de que
una operación masiva invalide las copias de seguridad. SQL Server mantiene un mapa de bits para
realizar el seguimiento de las extensiones de datos modificadas, lo que optimiza el proceso por el que
Además de la introducción de los modelos de recuperación para simplificar la protección de los datos en
general, SQL Server 2000 ha mejorado la capacidad de administración: la tecnología de instantáneas, las
La cadena del registro de transacciones nunca se rompe. En SQL Server 7.0, determinadas
Las operaciones de copia de seguridad no entran en conflicto con las aplicaciones u otras
acciones administrativas. Por ejemplo, las copias de seguridad se pueden producir de forma
Las operaciones de copia de seguridad desatendidas, con independencia de la actividad del sistema,
SQL Server admite tecnologías de copias de seguridad instantáneas y de restauración al igual que
eliminan el uso de los recursos del servidor para realizar la copia de seguridad. Esto resulta
especialmente beneficioso para moderar las bases de datos de gran tamaño en las que resulta de vital
Se puede realizar una copia de seguridad en un plazo muy breve de tiempo, generalmente
Se puede utilizar una copia de seguridad en disco para restaurar una base de datos con la
misma rapidez.
Otro host puede crear una copia de seguridad sin impacto alguno en el sistema de producción.
Se puede crear de forma instantánea la copia de una base de datos de producción para la
proveedores que utilizan características de SQL Server 2000 diseñadas con este propósito. La tecnología
de copia de seguridad crea una copia instantánea de los datos que se desean guardar, generalmente
disponible de forma inmediata. Los discos subyacentes se sincronizan en el fondo, dando como resultado
cantidad de datos cambiados desde la última copia de seguridad completa. Cuanto menos datos se hayan
cambiado, más rápida será la copia de seguridad. SQL Server 2000 utiliza un mapa de bits para realizar
el seguimiento de las extensiones de datos modificadas desde la última copia de seguridad de la base de
datos o de archivos para que se puedan localizar de forma eficaz. Además, SQL Server 2000 admite
Las copias de seguridad siguen acumulando cambios realizados en la base de datos desde la última copia
de seguridad completa, funcionando del mismo modo en el caso de una recuperación. No obstante, son
considerablemente más rápidas ya que sólo registran la pequeña cantidad de información modificada,
especialmente en bases de datos de gran tamaño que contienen sólo una pequeña cantidad de datos
modificados.
Para una mayor seguridad, se puede aplicar la protección por contraseña para los medios y conjuntos de
copia de seguridad. De este modo, se evita que usuarios no autorizados se agreguen a las copias de
Mejoras administrativas
Se han mejorado varias características administrativas del motor de almacenamiento en SQL Server
2000.
Los DBCCs proporcionan una variedad de capacidades administrativas, incluidos los comandos CHECK
La experiencia con SQL Server 7.0 y SQL Server 2000 ha demostrado que la incoherencia de las bases de
datos se produce por los problemas de hardware que pueden o no ser detectados por el motor de la base
de datos o las aplicaciones durante el funcionamiento normal de los mismos. Esto se aplica
especialmente a los datos a los que no se tiene un acceso frecuente. Como respuesta a esta necesidad,
SQL Server 2000 introduce un modo de comprobación, Physical_Only, diseñado para detectar la mayoría
que comenzaron con SQL Server 7.0, no es necesario ejecutar la comprobación de la base de datos como
parte del mantenimiento normal. No obstante, Microsoft continúa comprometido con las herramientas de
Ejecutar una comprobación completa de la base de datos en momentos importantes, como una
Microsoft no recomienda la ejecución de una comprobación completa como parte del mantenimiento
normal.
SQL Server 2000 también incluye mejoras importantes en la comprobación de la base de datos:
línea tiene poco impacto en la carga de trabajo de las transacciones. Este impacto variará según la
este impacto de un 15 a un 20 por ciento con una carga de trabajo OLTP media (CPU al 50 por
ciento). La opción TABLOCK se proporciona para obligar a que la comprobación tome bloqueos de
tabla compartidos, lo que le permite una ejecución más rápida y evitará las actualizaciones.
grado máximo de paralelismo que haya definido para la instancia de SQL Server.
Los comandos de comprobación de SQL Server 2000 continúan admitiendo la funcionalidad de reparación
introducida en SQL Server 7.0. La reparación fuera de línea puede proporcionar una alternativa a la
SQL Server 2000 incluye mejoras en la instrucción ALTER DATABASE que permiten un mayor control de
los estados de las bases de datos a través de Transact-SQL. Todas las opciones de base de datos se
pueden modificar ahora ejerciendo un mayor control a través del comando ALTER DATABASE;
base de datos.
En la siguiente tabla se enumeran las opciones de estado de la base de datos.
Tipo de opción Valores disponibles
Acceso de usuario SINGLE_USER
RESTRICTED_USER
MULTI_USER
Disponibilidad ONLINE
OFFLINE
Actualización READ_ONLY
READ_WRITE
SQL Server establece también los siguientes estados en reacción a las condiciones dentro de la base de
datos: restauración, recuperación y sospecha. Las opciones de la base de datos se pueden establecer
Cuando se modifica el estado de una base de datos, la sesión que realiza los cambios en el estado
permanece conectada, mientras que las sesiones no coherentes con el nuevo estado pueden finalizar y
deshacer sus transacciones. Entre las opciones de finalización de sesión se incluyen las siguientes:
Finalización inmediata
de usuario activas
Para obtener más información, consulte "Setting Database Options" en los libros en línea de SQL Server
Una mejora adicional administrativa que sirve de ayuda cuando se necesita detener un proceso es el
comando KILL. Este comando ha sido mejorado con la información del estado. Por tanto, si desea
Si intenta detener un identificador de proceso del sistema (SPID) que otro comando KILL está
En SQL Server 2000, las transacciones MS DTC pueden existir sin una conexión o SPID asociado. Por
tanto, se puede utilizar una conexión para otros procesos mientras se espera que se complete una
que se ha completado la tarea, puede ejecutar o deshacer la transacción. Esto se conoce como unidad de
trabajo (UOW), que es el identificador utilizado por MS DTC para la transacción. La unidad UOW no
dispone de SPID.
Para obtener más información, consulte los libros en línea de SQL Server 2000 (en inglés).
Ajuste dinámico
En SQL Server 2000, el ajuste de rendimiento basado en el uso se administra de forma dinámica, sin que
se necesiten ni se recomienden ajustes manuales. Los parámetros estáticos se han eliminado, pero se ha
límite superior sobre la cantidad de memoria que puede utilizar SQL Server). Este método resulta mucho
más preciso y receptivo que el sistema calculado manualmente basado en promedios y cálculos
aproximados. De este modo, permite que se concentre en los aspectos del diseño de la administración de
la base de datos. Los sistemas tradicionales de las bases de datos exigen una gran cantidad de
administración y ajuste manual. Así, por ejemplo, para ajustar el sistema según el uso, el administrador
de la base de datos necesitará controlar el sistema, grabando una enorme cantidad de estadísticas con el
tiempo, para seleccionar una configuración estática que parezca proporcionar la ventaja óptima del
sistema. A continuación el DBA deberá volver a evaluar el sistema para valorar el efecto que tiene la
SQL Server 2000 introduce un algoritmo dinámico en el motor de almacenamiento que controla de forma
dinámicos de SQL Server 2000 mantienen la configuración dentro del 10 por ciento del valor óptimo
absoluto (consulte la figura 3), dando como resultado un sistema muy adaptable y con un mejor ajuste.
Figura 3. Ajuste del algoritmo adaptable
SQL Server 2000 proporciona un equilibrio en el procesamiento de todas las CPUs disponibles en
coordinación con el sistema operativo Windows 2000. Si se está ejecutando una instancia dedicada de
SQL Server, y no hay otras aplicaciones que produzcan una carga en los mismos recursos, no se debe
modificar la configuración predeterminada relacionada con el procesador para utilizar al máximo todos los
procesadores. SQL Server puede aprovechar las ventajas del procesamiento en paralelo en varios
procesadores para consultas, generación de índices, DBCCs y otras operaciones. Para obtener más
información sobre el paralelismo, consulte "Degree of Parallelism" en los libros en línea de SQL Server
SQL Server 2000 Standard Edition puede admitir hasta cuatro procesadores y 2 GB de memoria física
(RAM). Enterprise Edition puede escalar hacia arriba a nuevos niveles y admitir hasta 32 procesadores y
La principal fuente de memoria para una instancia de SQL Server se denomina su bloque de memoria.
Prácticamente todas las estructuras de datos que utilizan memoria en una instancia de SQL Server se
asignan desde el bloque de memoria. Entre los ejemplos de objetos asignados desde el bloque de
memoria se incluyen la caché de búfer, donde se almacenan las últimas páginas de datos leídas, y la
Las asignaciones dentro del bloque de memoria son muy dinámicas. Para optimizar el rendimiento, SQL
Server ajusta de forma constante las cantidades de bloque de memoria asignadas a las distintas áreas.
Por ejemplo, cuando el número de planes de ejecución almacenados es más bajo, se ajusta el bloque
para utilizar de forma óptima los recursos haciendo disponible más memoria para la caché de datos.
SQL Server 2000 está diseñado para que la utilización de la memoria minimice al máximo la E/S de
disco. Para llevar a cabo esta tarea, SQL Server utiliza la caché de búfer para retener los últimos datos a
los que se ha hecho referencia, en la memoria física (RAM), donde pueden volver a utilizarse. Una posible
forma de reducir la E/S de disco y acelerar el sistema de la base de datos consistiría en agregarla a la
en determinados casos. Por ejemplo, la memoria requiere una atención especial cuando se ejecutan
SQL Server 2000 aprovecha las nuevas capacidades de Windows 2000 para incluir memoria física (RAM)
superior a 3 GB. Consulte la figura 4. SQL Server 2000 Enterprise Edition puede utilizar toda la memoria
que permita Windows 2000 Advanced Server o Windows 2000 Datacenter Server.
Para obtener más información sobre los soportes de memoria de gran tamaño en SQL Server 2000,
consulte "Managing AWE Memory" en los libros en línea de SQL Server 2000 (en inglés).
SQL Server almacena los datos y el registro en archivos de disco. En una instalación básica y
predeterminada, los datos y los archivos de registro se crean en la ubicación predeterminada especificada
En general, cuanto más discos (ejes) se tengan (a pesar del tamaño individual) y más rápido sea el
acceso a éstos (controladores y canales), más rápido podrá el motor de almacenamiento leer y escribir
datos. Cuanto mayor sea la utilización del sistema, más importante será separar los archivos de datos de
los archivos del registro mediante su almacenamiento en distintos grupos de unidades físicas. Además,
debido a que ha cambiado el uso de tempdb, deberá ahora almacenar tempdb en un grupo grande de
discos, por ejemplo, con los archivos de datos o en un conjunto de discos.
Utilizar grupos de archivos para que la base de datos corporativa resulte más fácil de
administrar.
Cada base de datos comienza por un grupo de archivos predeterminado. Debido a que SQL Server 2000
puede trabajar de forma eficaz sin grupos de archivos adicionales, un gran número de sistemas no
necesitarán agregar grupos de archivos definidos por los usuarios. Sin embargo, a medida que aumenta
el sistema, el uso de grupos de archivos adicionales puede proporcionar una mayor capacidad de
administración cuando un administrador de base de datos cualificado la implemente y mantenga.
En SQL Server 2000, si define un grupo de archivos en particular dentro de una base de datos como de
sólo lectura, los datos de dicho grupo no podrán alterarse, aunque se puede seguir administrando la
información del catálogo como los permisos.
Nota En SQL Server 2000, el número de E/S asincrónicas se administra ahora de forma dinámica
dentro del motor de la base de datos y no se ve influida por el número de archivos o grupos de archivos
utilizados, como era el caso en SQL Server 7.0.
Al implementar u optimizar un diseño de la base de datos, el administrador de la base de datos
(ingeniero de la base de datos) necesita tener en cuenta la configuración de los componentes de la base
de datos, especialmente el diseño de los discos lógicos y físicos y la organización de los archivos de las
bases de datos en los discos.
Conclusión
Para los administradores de bases de datos, una mayor flexibilidad y control sobre el rendimiento ofrece
libertad para centrar sus conocimientos y experiencia sobre tecnología de base de datos en la
enfoque unificado en la administración del sistema de base de datos. El motor de base de datos de SQL
Server 2000 proporciona una extensibilidad y flexibilidad para una gran variedad de implementaciones de
bases de datos.
Lectura recomendada
Para obtener información sobre el correcto funcionamiento de un sistema de base de datos con procesos
y profesionales, se recomienda que lea sobre el programa de Microsoft Certified Database Administrator
Los libros en línea de SQL Server 2000 se incluyen con SQL Server 2000. También se encuentran
Para obtener más información sobre hardware y SQL Server, consulte SQL Server 2000 on Large Servers
Para obtener más información sobre la arquitectura de SQL Server y el motor de almacenamiento,
consulte los libros en línea de SQL Server 2000 (en inglés), así como Inside Microsoft SQL Server 2000