Diseño de Particiones
A continuación, se revisan las distintas estrategias de particionamiento propuestas por SQL Server: horizontal, vertical y funcional. En este post, nos centraremos en la definición conceptual de cada estrategia para sentar las bases que nos permitan, en próximos posts, desarrollar los aspectos que hemos de tener en cuenta para decidir, de forma efectiva y eficiente, la estructura de particionamiento para distintos casos de uso.
Las estrategias que se describen a continuación, pueden ser combinadas entre sí, es decir, podemos dividir los datos en particiones (particionamiento horizontal) y, a continuación, usar particiones verticales para subdividir todavía más los datos de cada partición.
Particionamiento Horizontal
En esta estrategia, cada partición es un almacén de datos independiente, pero todas las particiones tienen el mismo esquema. Cada división se conoce como partición y contiene un subconjunto específico de los datos. Un ejemplo de este tipo de particionamiento podría ser el conjunto de pedidos de un conjunto específico de clientes.
En la siguiente ilustración, se muestra un ejemplo particionamiento en el que los datos del inventario de productos se dividen en particiones según la clave del producto. Cada partición contiene los datos de un intervalo contiguo de claves de partición (A-G y H-Z), organizadas alfabéticamente.
El factor más importante es la elección de una clave de particionamiento. Puede resultar difícil cambiar la clave después de que el sistema está en funcionamiento. La clave debe garantizar la creación de particiones uniformes para asegurar la eficiencia de la estructura creada.
Particionamiento Vertical
En esta estrategia, cada partición contiene un subconjunto de los campos que forman la tabla. Los campos se dividen según su patrón de uso, de esta forma, los campos a los que se accede con más frecuencia pueden colocarse en una partición vertical y los campos que se utilizan de forma más ocasional, en otra.
El objetivo principal del particionamiento vertical es reducir los costes de E/S y de rendimiento asociados a la recopilación de elementos a los que se accede con más frecuencia. En la siguiente ilustración, se muestra un ejemplo de creación de particiones verticales en el que, las diferentes propiedades de un elemento, se almacenan en particiones distintas. Una partición contiene los datos a los que se accede con mayor frecuencia como el nombre, la descripción y el precio de los productos, y en otra, los datos de inventario: la cantidad en stock y la fecha del último pedido.
Particionamiento Funcional
En esta estrategia, los datos se agregan en función del uso de cada contexto de negocio. Por ejemplo, un sistema de comercio electrónico puede almacenar los datos de facturas en una partición y los del inventario de productos en otra.
Cuando sea posible identificar un contexto enlazado para cada área de negocio independiente de una aplicación, la creación de particiones funcionales, es una forma de mejorar tanto el rendimiento del acceso a los datos como el aislamiento. Otro uso común de la creación de particiones funcionales, es separar los datos de lectura y escritura de los datos de solo lectura. En la siguiente ilustración, se muestra una visión general de la creación de particiones donde se separan los datos de inventario de los datos del cliente.
¿Quieres modernizar tu infraestructura para facilitar la explotación de tus datos?
Mejora la eficiencia de tu plataforma, con seguridad y cumpliendo las normativas vigentes. Nuestros expertos cuentan con gran experiencia en el desarrollo, optimización de procesos y migraciones de SQL Server.
Quiero modernizar mi plataforma ahoraPasamos a la acción: Creación de una Tabla Particionada
A continuación, se describen los pasos para la creación de una tabla con particionamiento horizontal. Previa a la creación de dicha tabla se describen dos conceptos: Función de particionamiento y esquema de partición.
Función de Particionamiento
La función de particionamiento es el objeto que define cómo se asignan las filas de una tabla o índice a un conjunto de particiones.
Range Left
En el caso del ejemplo que se muestra en la ilustración anterior, la función de partición pfnTens, con la opción RANGE LEFT, posibilitará 4 particiones de tipo entero con los siguientes intervalos:
- Partición 1: [-∞, 10]
- Partición 2: [11, 30]
- Partición 3: [31, 50]
- Partición 4: [51, +∞]
Range Right
En el caso de ejemplo que se muestra en la ilustración anterior, la función de partición pfnTens, con la opción RANGE RIGHT, posibilitará 4 particiones de tipo entero con los siguientes intervalos:
- Partición 1: [-∞, 9]
- Partición 2: [10, 29]
- Partición 3: [30, 49]
- Partición 4: [50, +∞]
Esquema de Partición
El esquema de partición es el objeto de base de datos que asigna particiones de una función de partición a grupos de archivos. Dicha asignación puede hacerse a varios o al mismo al mismo grupo de archivos.
En el ejemplo que se muestra a continuación, se crea un esquema de particionamiento haciendo uso de la función ‘pfnTens’ del apartado anterior, y cada partición se alojará en grupos de archivos distintos (test1fg, test2fg, test3fg y test4fg).
Creación de Tabla Particionada
Una vez definidos el particionamiento y el esquema de partición, se crea la tabla ‘Empleados’ con los objetos de particionamiento generados en los apartados anteriores.
En base a la estructura de particionamiento propuesta, la tabla ‘Empleados’ queda organizada de la siguiente forma:
- Partición 1. Empleados con ID menor o igual a 9 en el grupo de archivos test1fg
- Partición 2. Empleados con ID en el intervalo [10, 29] en el grupo de archivos test2fg
- Partición 3. Empleados con ID en el intervalo [30, 49] en el grupo de archivos test3fg
- Partición 4. Empleados con ID mayor o igual a 50 en el grupo de archivos test4fg
Nota: Tomamos como función de particionamiento pfnTens con RANGE RIGHT
Consulta de Datos Particionados
Cargamos la tabla ‘Empleados’ con 100 registros que se distribuirán en función del valor del campo ‘EmpId’, en la partición correspondiente.
Consultamos distribución de datos en las distintas particiones.
Consultamos datos por partición:
Operaciones para la Gestión de Particiones (Merge, Split y Switch)
A continuación se analizan las principales operaciones sobre particiones en SQL Server: MERGE, SPLIT y SWITCH.
Merge
La operación MERGE permite combinar dos particiones contiguas en una única partición. Dicha operación consiste en eliminar uno de los valores límite.
Como ejemplo, combinaremos las particiones P2 y P3 de la estructura creada en apartados anteriores.
A continuación, se muestra cómo quedaría la distribución de datos del particionamiento del ejemplo, tras aplicar la operación de MERGE.
Al aplicar merge, se mantendrían 3 particiones en la que, el contenido de la partición 2, es el resultado de combinar los registros de las “antiguas” partición 2 y 3 en una sola partición.
Split
Con la operación SPLIT se separa una partición en dos. Para ello, se ha de indicar qué grupo de archivos será el que se utilizará para los valores contenidos en la nueva partición. La aplicación de la operación SPLIT se ha de tener en cuenta los siguientes aspectos:
- El nuevo valor límite debe pertenecer al rango de valores de la función de particionado
- El nuevo valor límite no puede ser un valor límite asignado actualmente en la función de particionado
- Si al dividir una partición con SPLIT, se producen dos particiones con datos, SQL Server distribuirá respectivamente los datos a sus particiones que lleva asociado crecimiento en el log de transacciones para albergar las operaciones INSERT y DELETE que internamente se producen.
A continuación se muestra como ejemplo el SPLIT de la actual partición 2, tal y como se muestra en la siguiente ilustración:
Tras la aplicación del SPLIT, volveríamos a tener las particiones 2 y 3, tal y como se muestran a continuación.
Switch
La operación SWITCH es una operación interesante para mover datos de forma rápida entre objetos. Es una operación que solo incurre en modificación de metadatos y que, por tanto, se realiza de forma instantánea (independientemente de cuantos datos existan en la partición).
En siguientes posts veremos la utilidad de la operación SWITCH para el traslado de datos a tablas de históricos. No obstante, a continuación se muestra un ejemplo con la operación SWITCH para ilustrar el funcionamiento de dicha operación. En dicho ejemplo, se traslada la partición 2 de ’empleados’ a la tabla, de nueva creación, ‘EmpleadosStaging’.
Para tener una visión más clara de la operación switch, creamos una tabla con la misma estructura de particionmiento de la tabla ‘Empleados’. En el siguiente ejemplo se analiza el resultado de aplicar la operación switch de una de las particiones de la tabla ‘Empleados’ sobre la nueva tabla creada ‘EmpleadosStaging’.
Haciendo uso de la operación switch, pasamos la partición 2 de la tabla ‘Empleados’ a ‘EmpleadosStaging’.
Tras la ejecutar la operación SWITCH mostrada anteriormente, se obtienen los siguientes resultados de distribución de datos en ambas tablas.
Resumen y Conclusiones
En este post se sientan las bases de conocimiento necesarias para acometer el particionamiento de tablas en SQL Server:
- Estrategias de particionamiento: horizontal, vertical y funcional.
- Objetos relacionados: funciones particionamiento y esquemas de partición.
- Operaciones básicas de particionamiento: SPLIT, MERGE y SWITCH.
En próximos artículos, se hará uso de estos conceptos para el desarrollo de escenarios reales en los que se analizarán las mejores prácticas para cada caso:
- Elección de claves de particionamiento.
- Indexación y alineación con el esquema de particionamiento.
- Como, en algunas ocasiones, hemos de modificar la codificación de queries para un uso eficiente del esquema de particionamiento creado.
- Aplicación y casos de uso de operaciones sobre particionamiento
¡Has llegado al final! Parece que te ha gustado nuestro post sobre SQL Server
Mejora la eficiencia de tu plataforma, con seguridad y cumpliendo las normativas vigentes. Nuestros expertos cuentan con gran experiencia en el desarrollo, optimización de procesos en SQL Server, así como en migraciones a Azure o Amazon Web Services. Moderniza tu plataforma de datos ahora y mantente competitivo.
Voy a Echar un vistazoAntonio Llompart Freire
Soy Ingeniero Técnico en Informática y Máster en diseño y gestión de proyectos, con más de 20 años de experiencia en informática, desempeñando diversas funciones en el sector. Actualmente soy Arquitecto de Plataformas de Datos en Verne Technology Group realizando análisis, implementación, puesta a punto, etc. de proyectos en plataformas con SQL Server.