2013 Particiones Israel Dimas Medina Ingeniera en Sistemas Computacionales 25/03/2013 Instituto Tecnológico Superior de Poza Rica Introducción En este manual aprenderemos la creación de Particiones utilizando el manejador de SQL Server 2008 Enterprise edition. Es importante elegir una versión adecuada por que no todas nos permiten crear particiones dentro de la base de datos. La partición facilita el uso de tablas e índices grandes, ya que permite administrar y tener acceso a subconjuntos de datos de forma rápida y eficaz, a la vez que mantiene la integridad de la colección de datos. Los datos de tablas e índices con particiones se dividen en unidades que pueden propagarse por más de un grupo de archivos de la base de datos. Los datos se dividen en sentido horizontal, de forma que los grupos de filas se asignan a particiones individuales. La tabla o el índice se tratarán como una sola entidad lógica cuando se realicen consultas o actualizaciones en los datos. Las particiones de un índice o una tabla deben encontrarse en la misma base de datos. ISC 6 “A” Edgar Israel Dimas Medina Instituto Tecnológico Superior de Poza Rica Desarrollo La creación de particiones en una base de datos mejora el rendimiento y simplifica el mantenimiento. Al dividir una tabla grande en tablas individuales más pequeñas, las consultas que tengan acceso únicamente a una parte de los datos pueden ejecutarse con mayor rapidez, ya que deben recorrer menos datos. Se puede conseguir la creación de particiones sin dividir las tablas si las tablas se colocan físicamente en unidades de disco individuales. La colocación de una tabla en una unidad física y de las tablas relacionadas en una unidad independiente puede mejorar el rendimiento de las consultas, debido a que, cuando se ejecutan consultas que implican combinaciones entre las tablas, varios encabezados de discos leen los datos al mismo tiempo. Se pueden utilizar grupos de archivos de SQL Server para especificar los discos en los que se colocarán las tablas. Por regla general, puede resultar adecuado crear particiones de una tabla grande si se cumplen las dos condiciones siguientes: La tabla contiene, o se espera que contenga, muchos datos que se utilizan de formas diferentes. Las consultas o las actualizaciones en la tabla no presentan el rendimiento que se esperaba o los costos de mantenimiento superan los períodos de mantenimiento predefinidos. Particionamiento de tablas con índices Id Descripción Fecha $Partición 1 Octubre 23/10/2013 11 2 Marzo 10/04/2013 5 Fig1. Se obtiene una mejor estructura y las filas pertenecen a la misma tabla lógica, aunque la información se encuentre almacenada físicamente en lugares distintos. ISC 6 “A” Edgar Israel Dimas Medina Instituto Tecnológico Superior de Poza Rica A continuación veremos un ejemplo para entender el uso de las particiones: Crear una tabla particionada que almacene la informacion correspondiente a un detalle de kardex, para lo cual analice los posibles campos que conformaran dicha tabla, se debera generar una particion para cada mes del anio, una vez hecho lo anterior genere diferentes inserciones sobre dicha tabla y verifique que los registros esten almacenados dentro de las particiones definidas por la funcion de particion la cual debera elaborar para implementar dichas particiones. Paso 1. Creación de base de datos Lo primero que hacemos es crear una base de datos donde crearemos la partición Create database MESES use MESES Paso 2. Creación de Partición Debemos hacer antes de poder particionar tablas e índices en SQL Server, es crear una Función de Partición la cual, tomará como entrada un único campo de la tabla a particionar. CREATE PARTITION FUNCTION [pfMeses](datetime) AS RANGE RIGHT FOR VALUES ('20130101','20130201','20130301','20130401','20130501','2013 0601', '20130701','20130801','20130901','20131001','20131101','20131 201') GO Fig2. La función de partición se encuentra en la carpeta de almacenamiento. ISC 6 “A” Edgar Israel Dimas Medina Instituto Tecnológico Superior de Poza Rica Paso 3. Crear Esquema de Partición Es necesario crear el Esquema de Partición, el cual nos permitirá asignar a cada partición, el Grupo de Ficheros (FileGroup) que deseamos que utilice para almacenar sus datos. Téngase en cuenta, que al crear el Esquema de Particionamiento, tenemos que asociarlo a una Función de Particionamiento. No es necesario que cada partición utilice un Grupo de Ficheros (FileGroup) exclusivo para ella. De hecho, en muchos casos, se utiliza un único FileGroup para todas las particiones. CREATE PARTITION SCHEME [pSMeses] AS PARTITION [pfMeses] ALL TO ([PRIMARY]); Fig3. Se crea un esquema para mapear todas las particiones en un mismo FileGroup Paso 3. Creación de una tabla Creamos una tabla con un índice, de tal modo que ambos objetos utilizan el mismo Esquema de Particionamiento. CREATE TABLE dbo.Datos( ID INT NOT NULL ,DESCRIPCION VARCHAR (100) NOT NULL ,FECHA DATETIME NOT NULL , CONSTRAINT pk_Datos PRIMARY KEY NONCLUSTERED(ID,FECHA) ON pSMeses(FECHA)) on pSMeses(FECHA) go ISC 6 “A” Edgar Israel Dimas Medina Instituto Tecnológico Superior de Poza Rica Paso 4. Insertar datos a la tabla y consultar INSERT INTO dbo.Datos (ID, 'Octubre 2013','20131001') INSERT INTO dbo.Datos (ID, 'Febrero 2012','20120202') INSERT INTO dbo.Datos (ID, 'Enero 2013','20130114') INSERT INTO dbo.Datos (ID, 'Abril 2013','20130405') INSERT INTO dbo.Datos (ID, 'Marzo 2013','20130304') INSERT INTO dbo.Datos (ID, 'Mayo 2012','20100501') DESCRIPCION, FECHA) VALUES (1, DESCRIPCION, FECHA) VALUES (2, DESCRIPCION, FECHA) VALUES (3, DESCRIPCION, FECHA) VALUES (4, DESCRIPCION, FECHA) VALUES (5, DESCRIPCION, FECHA) VALUES (6, SELECT *, $PARTITION.pfMeses(FECHA)[PARTITION] FROM Datos Fig4. Muestra los datos ingresados en formato fecha y la partición asignada. Fig5. Por ultimo podemos observar que el plan de ejecución de la consulta es el mas bajo. ISC 6 “A” Edgar Israel Dimas Medina Instituto Tecnológico Superior de Poza Rica Conclusión El uso de las particiones es muy importante y nos facilita el menos coste posible de estimación de una consulta a nivel PERFORMANCE. Como observamos en el ejemplo anterior hay más maneras de poder crear una partición o un esquema para las tablas e índices, todo depende de la necesidad que tengamos o del problema que deseemos solucionar, por lo regular se utiliza en sistema de control de ventas donde manejan ofertas en sus productos. Por ultimo podemos definir que por medio de una partición podemos definir los límites que utiliza SQL para dividir la información. ISC 6 “A” Edgar Israel Dimas Medina Instituto Tecnológico Superior de Poza Rica Anexos.Vistas útiles para trabajar con tablas particionadas --Caracteristicas de la particion select * from sys.partitions -- Permite ver la funcion de particion creada y su rango select * from sys.partition_functions -- Ver los parametros que puede recibir la particion select * from sys.partition_parameters --Muestra el rango de valores select * from sys.partition_range_values -- Caracteristicas del Esquema select * from sys.partition_schemes --Muestra el archvo de grupos asignado para la particion select * from sys.filegroups ISC 6 “A” Edgar Israel Dimas Medina