Sie sind auf Seite 1von 3

http://www.sqlserverfordummies.

com

Particionamiento de Tablas en SQL Server


A menudo me encuentro con problemas de performance en el acceso a bases de datos con tamao importante. Si bien es real que el crecimiento de la base de datos es un dato que se obtiene con el paso del tiempo, existen un conjunto de consideraciones que deberan tenerse en cuenta durante el diseo de bases de datos. En particular, una de las caractersticas ms olvidadas (por no decir desconocidas) es el particionamiento de tablas. Esta caracterstica permite dividir la informacin de una tabla en varios archivos de datos para facilitar a SQL Server el acceso a stos, de forma 100% transparente para el usuario. La divisin de archivos permite a SQL Server operar con varios archivos ms pequeos, en lugar de manejar un nico gran archivo.

Escenario de Ejemplo:
En una tabla T (no particionada), se almacena aproximadamente 1 milln de registros por mes de forma secuencial, por lo que al cabo de un ao, dicha tabla almacena un total aproximado de 12 millones de registros. Tpicamente, los usuarios realizan consultas sobre un nico mes, y no mezclan informacin de distintos meses. Para solucionar este escenario, tomamos la decisin de dividir la informacin en 12 bloques, correspondientes a cada uno de los meses del ao, para facilitar la gestin de los mismos para SQL Server, ya que, considerando el tipo de inserciones y consultas que se realiza sobre la tabla, no habr de ser necesario trabajar con ms de un archivo a la vez. Con esta decisin, acabamos de reducir el volumen de datos con el que SQL Server deber trabajar a la 12ava. parte, es decir, a poco ms del 8%.

Cmo funciona el particionamiento de datos?


1. El usuario inserta un registro en la tabla T 2. SQL Server ejecuta la Funcin de particin definida para la tabla T y sta retorna un ndice correspondiente al nmero de FILEGROUP que se utilizar para almacenar el registro insertado. 3. SQL Server analiza el Esquema de particin de la tabla, y utilizando el ndice devuelto por la Funcin de particin, identifica el nombre del FILEGROUP que se utilizar para almacenar el registro insertado. 4. SQL Server selecciona un archivo de datos para almacenar el registro, de entre los archivos asociados al FILEGROUP seleccionado en el paso anterior.

Qu pasos debo seguir para particionar una tabla?


1. El paso ms importante: PENSAR para determinar el criterio que se utilizar para dividir los datos en el medio fsico. Para ello es importante determinar el volumen, tipo y frecuencia de ingreso de datos, as como tambin el tipo de consultas que los usuarios realicen. Las preguntas que debemos hacernos aqu son:
http://www.sqlserverfordummies.com

http://www.sqlserverfordummies.com

En qu columna(s) debo basarme para determinar dnde se debe guardar cada registro insertado? o Qu lgica deber aplicar para determinar dnde se debe guardar cada registro insertado? o La divisin que estoy proponiendo disminuye el volumen de datos que SQL Server deber utilizar? o La divisin que estoy proponiendo no exagera la cantidad de archivos que SQL Server deber utilizar para resolver mis consultas? 2. Crear un FILEGROUP para cada una de las particiones que deseemos crear y agregar a cada uno de ellos, la cantidad de archivos de datos que se desee. En el ejemplo que aqu se presenta, se agrega nicamente un archivo a cada una de los filegroups:

3. Crear una Funcin de Particin, que se encargar de determinar en qu FILEGROUP se almacenar cada uno de los registros que se vayan insertando. Cada vez que un registro sea insertado en la tabla particionada, esta funcin ser invocada con un parmetro de tipo int que se corresponder con el mes asociado al registro que se inserta. Para esto, ejecutaremos el siguiente script:

Bsicamente, este script define la siguiente tabla de correspondencias entre cada mes recibido en el parmetro int y el nmero de FILEGROUP a retornar por la funcin: 4. Crear un Esquema de Particin, que se encargar asociar la Funcin de Particin a los Filegroups definidos para el almacenamiento, utilizando el siguiente script:

http://www.sqlserverfordummies.com

http://www.sqlserverfordummies.com

Este script asocia cada posible retorno de la funcin de particin a un FILEGROUP, de la

siguiente manera: 5. Crear la tabla particionada, especificando que el FILEGROUP, en lugar de tratarse de uno esttico, se inferir para cada caso a partir de la definicin del Esquema de Particin.

Y eso es todo! Ya tenemos una tabla particionada que permitir la distribucin de los datos en los distintos archivos fsicos, a partir de su campo. Espero que el artculo haya sido de vuestro agrado y utilidad. Hasta la prxima!

http://www.sqlserverfordummies.com