Particionamiento de tablas – Parte 1

Autor: Allan Mori

En mi primer post, voy hablar sobre el particionamiento de tablas e índices en SQL Server. Una característica que siempre me ha traído buenos resultados.

El particionamiento de tablas apareció en SQL Server 2005, habilitado solamente en la edición Entreprise; sin embargo, a partir de SQL Server 2016 SP1, esta característica esta disponible en todas las ediciones de SQL Server, con lo cual, ya no hay excusas para no aplicar esta funcionalidad.

En la mayoría de los casos, las consultas realizadas a tablas con grandes volúmenes de información, nos pueden ocasionar altos consumos de CPU, I/O y aumentando el tiempo de respuesta , sobre todo si el objeto es una tabla “normal”, creada de manera tradicional, es decir, no particionada.

Para poder aplicar el particionamiento se necesitan elegir un campo de la tabla por el cual se desea realizar “partir” la tabla, En la mayoría de los casos, se elige un campo de tipo DATE / DATETIME para poder aplicar la división de los datos por fechas. También se necesitan objetos adicionales a la tabla, los cuales son: PARTITION FUNCTION y PARTITION SCHEMA.

  • PARTITION FUNCTION: Objeto en el cual se va a determinar los segmentos de datos por los cuales se realizará las particiones. Utiliza el campo elegido para el particionamiento.
  • PARTITION SCHEMA: Objeto en el cual se va a determinar en qué grupos de archivos se van a almacenar los segmentos de los datos definidos en PARTITION FUNCTION.

En esta demo, se crearán dos tablas que tendrán la misma data, pero estarán particionadas de distinta manera. El script tiene 7 secciones:

Sección 1.- nos permite crear la base de datos, que se utilizará para el particionamiento, en la cual se crean los grupos de archivo necesarios para acomodar las partes de la tabla:

Sección 2.- Se crean los objetos PARTITION FUNCTION, PARTITION SCHEME Y la primera TABLA PARTICIONADA con rangos a la derecha.

  • El objeto PARTITION FUNCTION PF_RANGOS_RIGHT indica que habrá 5 divisiones por un campo de tipo DATE. las divisiones a la DERECHA se aplicarán por los valores ‘20100101’,’20120101′, ‘20140101’,’20160101′
  • El objeto PS_SEGMENTOS_RIGHT indica que las 5 divisiones del PARTITION FUNCTION PF_RANGOS_RIGHT se almacenarán en el grupo de archivos PRIMARY.
  • La tabla TABLA_PARTICIONADA_ RIGHT tendrá su almacenamiento según el objeto PARTITION SCHEME PS_SEGMENTOS_RIGHT que utilizará el campo FECHA para realizar las particiones

Sección 3.- nos permite ingresar data a la tabla creada en la Sección 2.

Sección 4.- nos permite visualizar de cada una de las particiones.

El resultado del script nos permite visualizar cada partición de la tabla con sus respectivas almacenamientos, rangos y cantidad de registros por partición

Sección 5.- nos permite crear la PARTITION FUNCTION, PARTITION SCHEMA Y la segunda TABLA PARTICIONADA con rangos a la izquierda.

  • El objeto PARTITION FUNCTION PF_RANGOS_LEFT indica que habrá 5 divisiones por un campo de tipo DATE: las divisiones a la IZQUIERDA se aplicarán por los valores ‘20100101’,’20120101′, ‘20140101’,’20160101′
  • El objeto PARTITION SCHEME PS_SEGMENTOS_ LEFT indica que las 5 divisiones del PARTITION FUNCTION PF_RANGOS_ LEFT se almacenarán en el Filegroup PRIMARY.
  • LA TABLA TABLA_PARTICIONADA_LEFT tendrá su almacenamiento según el objeto PARTITION SCHEME PS_SEGMENTOS_ LEFT que utilizará el campo FECHA para realizar las particiones

Sección 6.- nos permite ingresar data a la tabla creada en la Sección 5.

Sección 7.- nos permite visualizar de detalle de los tipos de particiones implementadas en cada tabla.

clip_image014

  • El resultado del script nos permite visualizar a detalle cada partición de las dos tablas con sus respectivas PARTITION SCHEME, PARTITION FUCNTION, FILEGROUPS, rangos y cantidad de registros por partición.
  • Observar la diferencia de registros que existe, esta aparece al utilizar “LEFT” o “RIGHT” al crear el objeto PARTITION FUNCTION.

Esperamos que les sea útil en la implementación de esta funcionalidad.

Nos vemos en el próximo post

2 comentarios en “Particionamiento de tablas – Parte 1

  • Buena voz si sabia que solo en versión Enterprise se puede particionar no tendras una propuesta de migración o requerimientos para pedir un servidor de datawarehouse en mi trabajo, porque el servidor actual colapsa en algunas franjas horarias por muchos aplicativos

Deja un comentario

Tu dirección de correo electrónico no será publicada.