Académique Documents
Professionnel Documents
Culture Documents
Qu es SQL Server
y cmo funciona?
Tibor Karaszi
Asesor, experto en SQL Server
El propsito del presente informe es ofrecerle informacin sobre SQL Server. Explicaremos qu
es SQL Server, de dnde proviene, su arquitectura y sus elementos fundamentales.
SQL, el lenguaje
En la dcada de 1970, se desarroll un lenguaje para un prototipo de un Sistema de gestin de bases
de datos relacionales. Este lenguaje se denomin ms tarde SQL. Algunos afirman que SQL significa
Lenguaje de consulta estructurado (Structured Query Language), mientras que otros consideran
que son simplemente tres letras al azar. El lenguaje SQL consiste en varios comandos (en trminos
generales) que nos permiten crear, asegurar, gestionar y operar los datos de nuestras tablas. A veces
vemos una categorizacin de comandos en el lenguaje SQL:
DDL, Lenguaje de Definicin de Datos
Esta categora estaba destinada inicialmente a incluir los comandos con los cuales creamos la base
de datos. Por ejemplo, el comando CREATE TABLE (CREAR TABLA). Y tambin DROP TABLE (ELIMINAR
TABLA) y ALTER TABLE (MODIFICAR TABLA) (nos permite agregar una columna, por ejemplo). Con
el tiempo, la categora DDL paso a incluir todo tipo de comandos como CREATE (CREAR), ALTER
(MODIFICAR) y DROP (ELIMINAR) (DATABASE (BASE DE DATOS), LOGIN (INICIO DE SESIN), USER
(USUARIO), VIEW (VISTA), PRODECURE (PROCEDIMIENTO), etc.).
DCL, Lenguaje de Control de Datos
Aqu tenemos los comandos con los cuales definimos los permisos. Quin tiene permitido hacer qu,
en forma opcional con los datos. En esta categora tenemos los comandos GRANT (OTORGAR),
DENY (DENEGAR) y REVOKE (REVOCAR). Algunos ejemplos:
GRANT CREATE TABLE TO (OTORGAR CREAR TABLA A) Sue
GRANT SELECT ON Customers TO (OTORGAR SELECCIONAR EN Clientes A) Joe
SQL Server 2005 present cambios bastante significativos al producto, pero no fueron tan grandes como
los de 7.0. Por ejemplo, 2005 fue cuando se lanz SQL Server Management Studio. Todos los que hayan
trabajado con SQL Server durante la ltima dcada probablemente hayan utilizado esta herramienta.
Otro cambio significativo fue una estructura de metadatos totalmente nueva donde Microsoft cambi
por completo la estructura de la tabla del sistema, por ejemplo, de sysobjects (que era una tabla fsica)
a sys.tables (que es una vista, la tabla fsica est oculta). En cuanto a los dems componentes, OLAP Server
pas a llamarse Analysis Services y DTS pas a llamarse SQL Server Integration Services (SSIS), ambos
reescritos. Este informe se centra en el motor de la base de datos, o el el motor SQL.
Las versiones ms recientes de SQL Server son 2008, 2008 R2, 2012 y 2014. Por supuesto que cada una
de ellas puede haber agregado complementos potencialmente significativos al producto, pero me
gustara considerarlos ms como evoluciones del producto. El hecho es que, si trabaj con 2005,
lo ms probable es que se sienta a gusto con 2014.
Instancias
Para algunos de los componentes anteriores (servicios), puede tener ms de uno instalado en un sistema
operativo. Cada componente instalado se denomina una instancia. Los componentes en cuestin son el
motor de la base de datos, Analysis Services y Reporting Services. Se puede ver en el nombre del servicio
si es un componente que nos permite tener varias instancias; hay un parntesis y un nombre de instancia
despus del nombre descriptivo del servicio. Una instancia puede ser una instancia predeterminada
(donde aparece MSSQLSERVER entre parntesis) y puede haber varias instancias nombradas para las
cuales el nombre de la instancia se especifica cuando se instala dicha instancia.
Cada instancia est separada de las dems, a menos que se alojen en el mismo sistema operativo.
Cada instancia tambin tiene su propia estructura de carpeta, por ejemplo, donde se almacena
el archivo exe. Esto les permite tener diferentes nmeros de versin y compilacin. Puede haber
configuraciones totalmente diferentes en el nivel de la instancia y tambin configuraciones de
seguridad diferentes (inclusive quines son sper administradores, sysadmin, etc.).
La base de datos tempdb se vuelve a crear cada vez que inicia su SQL Server. La estructura de archivo
de la base de datos (cantidad de archivos de la base de datos, tamao y ruta de acceso) no se obtiene
de la base de datos modelo; sin embargo, est basada en una tabla de sistema, que se puede visualizar
utilizando master.sys.master_files.
La base de datos de recursos
Esta base de datos de recursos, de hecho, est oculta. No podemos ver esta base de datos en el Object
Explorer de SQL Server Management Studio ni tampoco aparece en sys.databases. Est oculta porque
se supone que no debe ser modificada. Una vez escuch a alguien de Microsoft sugerir que hay que
considerarlo como si fuera un archivo DLL. Solamente contiene cdigos, no datos. Pero se preguntar,
qu cdigo? El cdigo que es el procedimiento almacenado del sistema (como sp_detach_db, sp_
help, etc.) y tambin las vistas del sistema (sys.databases, sys.tables, etc.) se incluyen en la base de datos
de recursos. Esto le permite a Microsoft reemplazar estos archivos cuando repara su SQL Server en lugar
de ejecutar archivos de script para recrear estos objetos en la base de datos maestra (como tenamos
en SQL Server 2000 y las versiones anteriores).
Archivos de bases de datos
Cada base de datos se almacena en un conjunto de archivos. Los archivos estn enumerados internamente
desde el archivo uno en adelante (ver por ejemplo sys.database_files). Tenemos al menos dos archivos para
cada base de datos; un archivo de datos (.mdf) y un archivo de registro de transacciones (ldf). Podemos tener
ms de un archivo de datos (.ndf) y tambin ms de un archivo de registro de transacciones (ldf).
Un archivo de datos pertenece a un grupo de archivos. Hay un mnimo de un grupo de archivos
para cada base de datos: el grupo de archivos PRIMARIO. Cuando crea una tabla o un ndice, puede
especificar qu grupo de archivos se utilizarn en el comando CREATE (CREAR). Siempre hay un
grupo de archivos predeterminado, que ser el PRIMARIO a menos que cambie el grupo de archivos
predeterminado. Si no especifica en qu grupo de archivos se debe crear la tabla o ndice, entonces
se crear en el grupo de archivos predeterminado.
Puede tener ms de un archivo de datos para cada base de datos. El primario (.mdf ) siempre pertenece
al grupo de archivos PRIMARIO. Cada grupo de archivos puede tener ms de un archivo de datos.
Si tiene ms de un archivo en el mismo grupo de archivos, entonces los archivos se completarn
de manera proporcional a sus tamaos.
Al final, el concepto del grupo de archivos le permite especificar en qu archivo, o archivos,
se almacenar una tabla, en el caso de que tenga una tabla para la cual sepa que tendr un acceso
altamente configurado. La tabla tiene un tamao moderado, lo suficientemente grande como para no
caber en RAM segn el mecanismo de cach estndar en SQL Server. Pero tambin tiene muchos otros
datos en la base de datos. Adems, digamos que tiene un disco rpido (SSD) de tamao moderado que
puede utilizar en este servidor. Cree un grupo de archivos, agregue un archivo a este disco SSD y cree
su tabla de acceso intensivo en este disco SSD (el grupo de archivos que contiene el archivo que est
en este disco SSD). Este es solo un ejemplo que demuestra para qu puede utilizar varios grupos de
archivos, y otro es el backup a nivel del grupo de archivos, o realizar verificaciones de la congruencia de
la base de datos al nivel del grupo de archivos (DBCC CHECKFILEGROUP en lugar de DBCC CHECKDB).
Sin embargo, la amplia mayora de las bases de datos tienen solo un grupo de archivos e incluso un
solo archivo de datos (el archivo .mdf ). Y, en la mayora de los casos, eso es perfectamente suficiente.
Creo fervientemente en el concepto KISS (mantener las cosas simples) y si ms de un grupo de archivos
no le brinda ventajas, entonces por qu debera tenerlo?
Arquitectura del archivo de datos
Cada archivo de datos est dividido en un conjunto de pginas, de 8 kB de tamao. Las pginas estn
numeradas internamente desde la pgina 0 en adelante. Puede haber una pgina sin uso, es decir, una
pgina libre. Las pginas estn agrupadas en ocho pginas consecutivas; a esto se denomina extensin.
Tambin puede haber una extensin no utilizada si ninguna de las pginas de la extensin est en uso.
A veces nos referimos a este tipo de extensin como no asignada (en contraposicin a asignada).
Una extensin asignada se puede asignar de dos maneras. Ya sea como una extensin compartida (o mixta).
En una extensin compartida, hay pginas de diferentes tablas e ndices, de all el nombre compartida
(o mixta). Adems, una extensin puede bsicamente pertenecer a una tabla o ndice determinados,
lo que llamamos una extensin uniforme. Las primeras ocho pginas de cada tabla o ndice provienen
de extensiones compartidas y las pginas subsiguientes provienen de extensiones uniformes.
Aqu tomamos dos tipos de asignaciones, datos e ndices. Adems hay otros tipos, tales como
asignaciones LOB, por ejemplo, pero las pginas de datos e ndices bastan para ilustrar el principio
de la pgina y la asignacin de la extensin en SQL Server.
Arquitectura del ndice y la tabla
Lgicamente, una tabla est definida por una cantidad de columnas. Cada columna tiene un nombre
y corresponde a un determinado tipo de dato.
Desde una perspectiva fsica, una tabla tiene filas almacenadas en pginas. Sin embargo,
la tabla (los datos) se pueden estructurar de dos maneras diferentes:
Una tabla sin ndices (Heap Table)
Una tabla sin ndices es una tabla para la cual no creamos un ndice agrupado. SQL Server no almacena
las filas en ningn orden particular. Las filas y las pginas se almacenan bsicamente donde haya
espacio libre. De ms est decir que SQL Server trata de ser conservador y no utilizar ms pginas que
las necesarias y tratar de tener la mayor cantidad de filas en cada pgina, dentro de lmites razonables.
Una tabla con ndices agrupados (Clustered Table)
Una tabla con ndices agrupados es una tabla para la cual creamos un ndice agrupado. Es posible que el
ndice se haya creado automticamente ya que SQL Server crear de manera predeterminada un ndice
agrupado en la Clave primaria (columna); sin embargo, esto se puede sobrescribir. O puede crear el ndice
agrupado explcitamente utilizando el comando CREATE CLUSTERED INDEX (CREAR NDICE AGRUPADO).
10
Pero cmo podemos saber qu pginas est usando una tabla o ndice, o ms precisamente,
un montn o un ndice? Cada montn y cada ndice tienen una pgina de mapa de asignacin
de ndices (Index Allocation Map, IAM). La pgina IAM tambin mapea aproximadamente 4 GB en
el archivo de la base de datos y tenemos una por cada extensin que utiliza este heap o ndice.
Las pginas IAM por supuesto no estn en posiciones fijas, de modo que SQL Server mantiene un
registro de la direccin (nmero de pgina) de la primera pgina IAM al nivel del heap o ndice.
Si el heap o ndice utiliza extensiones en un rea mayor a 4 GB en los archivos de la base de datos,
entonces tenemos ms pginas IAM e indicadores desde la primera pgina IAM a la siguiente.
Por ltimo, tenemos las pginas de espacio disponible en pginas(Page Free Space, PFS). Una PFS
mantiene un registro de qu tan completa est una pgina, aproximadamente. La primera PFS es la
segunda pgina (pgina nmero 1) de cada archivo de datos. El mapa de PFS es de aproximadamente
64 MB en el archivo de datos. Y se repiten para cada porcin adicional de 64 MB. Cada byte (no bit)
en el PFS representa una pgina en esa rea de 64 MB, con una aproximacin de cunto espacio libre
se incluye en esta pgina. El PFS no se mantiene para las pginas del ndice, ya que esta informacin
no es de inters en primer lugar; cuando se inserta una nueva fila en un ndice, siempre sabemos
dnde colocar dicha fila, en la posicin adecuada segn la clave de ndice.
Entonces, aqu lo tenemos; una revisin de la arquitectura de asignacin para SQL Server. Ahora, se estar
preguntando si tenemos que saber o darle importancia a estas cosas. No, en la mayora de los casos
puede simplemente administrar y programar su SQL Server sin ningn conocimiento de GAM, SGAM,
IAM ni PFS. Sin embargo, conocer del tema puede ayudar a comprender ms eficazmente algunos
mensajes de error, fragmentacin de ndices o solo desmitificar el motor sustancial del SQL Server.
Si investiga un poco ms, descubrir ms detalles. Por ejemplo:
U
n heap o ndice se puede particionar (tener ms de una particin) y ver que los IAM
se encuentran en realidad en el nivel de la particin.
E xisten ms tipos de asignaciones (de vuelta, los IAM) adems de heap e ndice. Tenemos pginas
LOB, pginas para tipos de datos tales como varchar(max), nvarchar(max), varbinary(max), text,
ntext e image. Y tambin hay asignaciones para pginas de desbordamiento de fila; podemos tener
una combinacin de tipos de datos de longitud variable para las columnas de modo que una fila
ya no quepa en una columna y aqu es cuando SQL Server almacena algunos de los valores de las
columnas en dichas pginas de desbordamiento de fila.
Si desea investigar ms a fondo en esta rea, recomiendo la documentacin de SQL Server (SQL Server
Books Online, BOL) como un buen punto de partida. Desafortunadamente, Microsoft decidi no seguir
manteniendo algunas de las secciones de arquitectura de la documentacin de productos, pero
podemos usar la versin R2 de SQL Server 2008 de BOL que todava es precisa:
https://technet.microsoft.com/en-us/library/cc280361(v=sql.105).aspx
11
Registro de transacciones
Como ya sabemos, cada base de datos tiene al menos un archivo para su registro de transacciones, el archivo
ldf. Se puede tener ms de uno, pero esto no afectar el rendimiento ya que se utilizarn uno despus de otro
en serie. Esta es una breve descripcin de lo que sucede cuando se modifican datos en SQL Server:
Cada modificacin se realiza siempre en una transaccin. Entre otras cosas, una transaccin se define
como una cantidad de modificaciones que se deberan formar todas o ninguna: una operacin
atmica. De manera predeterminada, un nico comando de modificacin, como INSERT (INSERTAR),
UPDATE (ACTUALIZAR) o DELETE (ELIMINAR), se realizar dentro de su propia transaccin; mientras
tanto, si algo falla mientras se est ejecutando el comando de modificacin, entonces se revertir
todo lo realizado hasta ese momento para ese comando de modificacin.
Tambin se pueden agrupar varios comandos de modificacin dentro de la misma transaccin,
utilizando comandos tales como BEGIN TRANSACTION (INICIAR TRANSACCIN), COMMIT
TRANSACTION (CONFIRMAR TRANSACCIN) y ROLLBACK TRANSACTION (REVERTIR TRANSACCIN).
Cuando se inicia una transaccin, ya sea en forma implcita utilizando un comando de modificacin
o en forma explcita mediante un comando BEGIN TRANSACTION, SQL Server registrar en el registro
de transacciones que la sesin actual inici una transaccin.
Para cada modificacin (una fila se inserta, actualiza, elimina o algo similar para modificaciones
del ndice, etc.), SQL Server se cerciorar de que la pgina modificada est en cach. Cada lectura y
modificacin se realiza desde el cach. Si todava no est en cach, entonces la pgina se leer desde
el disco y se pasar a cach. Se construye un registro para reflejar la modificacin y se escribe en el
registro de transacciones (no necesariamente a nivel fsico para el archivo todava). Ahora, la pgina se
puede modificar en cach. Esto sucede para cada modificacin dentro de esta transaccin. Y respecto
al final de la transaccin, como una confirmacin, SQL Server reflejar la confirmacin en el registro
de transacciones y tambin se asegurar de que todos los registros producidos hasta el momento
especfico estn escritos fsicamente en el disco (forzar escritura de registro en la confirmacin).
Es por esto que queremos tener un buen rendimiento de escritura donde se encuentra el archivo ldf,
ya que la escritura en el archivo ldf es sincrnica: la aplicacin esperar a que el sistema operativo
y el SQL Server hayan reconocido que se haya realizado la operacin de escritura.
Las pginas que se modificaron estn sucias en este punto. Se modificaron desde que se llevaron
a cach y no tienen la misma apariencia en cach que en el disco. SQL Server realiza controles de tanto
en tanto donde escribe todas las pginas modificadas (para la base de datos) en el disco y tambin
lo refleja en el registro de transacciones. Esto le brinda a SQL Server un punto de partida para la
recuperacin, por ejemplo cuando inicia SQL Server. Buscar el control ms reciente en el registro
de transacciones y lo utilizar para asegurarse de que todas las modificaciones registradas en el registro
hayan sido realizadas en las pginas de datos, pero tambin para revertir cualquier transaccin que
haya quedado incompleta cuando se detuvo SQL Server. A veces nos referimos a esto como REDO
(REHACER) o UNDO (DESHACER). Podr ver informacin acerca de este proceso de recuperacin
en el archivo errorlog de SQL Server, desde cuando inici su SQL Server.
12
Herramientas
Hay varias herramientas que lo ayudarn a administrar su SQL Server. La siguiente es una lista
de las herramientas incluidas ms importantes y ms utilizadas.
SQL Server Management Studio (SSMS)
SSMS es simplemente una interfaz de usuario grfica que le permite administrar su SQL Server.
Se puede conectar a un SQL Server (o a alguno de los otros componentes) y utilizar el Object Explorer
para ver sus bases de datos, tablas, vistas, etc. Puede hacer clic con el botn derecho en un objeto
y acceder a un men contextual que le permite realizar distintas tareas para ese objeto. Y puede abrir
ventanas de consulta, que le permiten escribir consultas y comandos de SQL y ejecutarlos y,
por supuesto, guardarlos como archivos, archivos de script.
SQL Server Configuration Manager
Esta herramienta le permite configurar su servidor y realizar cambios que en general se almacenan
fuera de SQL Server (sobre todo en Windows Registry) en lugar de adentro de SQL Server. Estas
configuraciones incluyen elementos tales como la cuenta de Windows en la que se inicia cada servicio,
los parmetros de arranque y las configuraciones de red para su SQL Server.
SQLCMD.EXE
SQLCMD es una herramienta de la lnea de comandos para ejecutar consultas en un SQL Server. Esto
se puede hacer ya sea al especificar la consulta como una opcin de la lnea de comandos, leerla desde
un archivo de entrada o utilizar la herramienta interactivamente donde aparece un aviso desde el cual
puede escribir y utilizar GO (IR) para enviar las consultas a SQL Server.
SQL Server Documentation (tambin conocido como Books Online)
Esto es exactamente lo que indica su nombre: la documentacin para SQL Server. De manera
predeterminada, ser dirigido a un sitio web para obtener la documentacin. Esto tiene varias
limitaciones. La navegacin es muy lenta en comparacin con una aplicacin de ayuda local
y la funcionalidad de bsqueda est administrada por Bing, y no est limitada solo a SQL Server.
Se puede cambiar la documentacin a una aplicacin local utilizando la herramienta Manage Help
Settings (Administrar configuraciones de ayuda). Cambie esto a local y luego descargue las partes
de mayor inters utilizando la misma herramienta.
13
14
15
conexin no fiable. El inicio de sesin de SQL ms conocido es sa. Esto existe desde el principio y es
miembro del rol sysadmin. En mi opinin, nunca debemos utilizar el inicio de sesin sa; debe tener una
contrasea compleja, posiblemente renombrada y definitivamente deshabilitada. El empleado que
necesita privilegios de administrador del sistema en su SQL Server debera tener su propio inicio de
sesin para dichos fines en lugar de utilizar el inicio de sesin sa.
Inicio de sesin de Windows
Cuando se crea un inicio de sesin de Windows, hay que especificar un usuario o un grupo en el entorno
de Windows (en el dominio, probablemente). SQL Server tomar el identificador de seguridad (Security
Identifier, SID) de Windows y almacenar el nombre y el SID. Cuando se conecta utilizando el inicio de
sesin de Windows, a travs de una conexin fiable, SQL Server verifica que el SID que representa al
usuario exista como un inicio de sesin en SQL Server o cualquier de los grupos al que pertenece el
usuario. Si tiene permitido conectarse a un SQL Server utilizando un inicio de sesin de Windows que es
un grupo, todava podemos identificar el nombre de usuario de Windows dentro de SQL Server. Esto es
importante porque no perdemos la capacidad de rastrear quin est conectado o quin hizo qu.
Roles de servidor
A nivel del servidor, hay roles a los que se puede agregar un inicio de sesin como miembro. Existe el rol
pblico del cual son miembros todos los inicios de sesin. Este se puede utilizar para otorgar permisos que
se deberan aplicar a todos. Luego hay ocho roles fijos de servidor. No es posible cambiar los permisos que
vienen con un rol fijo de servidor, pero desde luego que se puede decidir quin (si se asigna a alguien)
debera ser miembro de ese rol. Probablemente, el rol de servidor ms conocido es sysadmin. Como
sysadmin, puede hacer lo que desee, en cualquier lugar, en su instancia de SQL Server. Por supuesto que
esto se debe utilizar con mucho cuidado. Considermoslo como el equivalente de SQL Server a Domain
Admin. Algunos ejemplos de otros roles fijos de servidor son dbcreator y processadmin.
A partir de SQL Server 2012, tambin podemos crear nuestros propios roles de servidor, adems
de agregar miembros y otorgar permisos al rol en lugar de a inicios de sesin individuales.
Obtener acceso a una base de datos: el usuario
Un inicio de sesin solamente le permite conectarse a la instancia. Esto es irrelevante a menos que
tambin pueda acceder a la(s) base(s) de datos que necesite. Este es el concepto del usuario. A veces
lo consideramos como si se mapeara un inicio de sesin a una base de datos o se otorgara acceso para
el inicio de sesin a la base de datos. Pero lo que en realidad estamos haciendo es crear un usuario
(con un nombre) en la base de datos que seale hacia el inicio de sesin. Esto permite que el inicio
de sesin pueda acceder a la base de datos. Luego se le puede dar permiso a este usuario para que
pueda, por ejemplo, SELECT (SELECCIONAR) desde una tabla. En la mayora de los casos, por supuesto
tenemos el mismo nombre para el usuario que para el inicio de sesin. Aunque la conexin del usuario
al inicio de sesin se efecta utilizando el SID para el inicio de sesin. Un SID de inicio de sesin de
Windows proviene de Windows y un SID de inicio de sesin de SQL Server es generado por SQL Server
cuando se crea dicho inicio de sesin. Siempre hay un usuario llamado dbo en cada base de datos.
El inicio de sesin al que pertenece una base de datos tiene el usuario dbo en esa base de datos.
16
17
18
19
NEW Veeam
Availability
Suite v9
20