Published on

April 20, 2021

Comprendiendo las transacciones de Manipulación de Datos (DML) en SQL Server

Las transacciones de Manipulación de Datos (DML) son una parte esencial de cualquier carga de trabajo que se ejecuta en SQL Server. Tener una comprensión sólida de cómo funcionan las declaraciones DML en el fondo es crucial para escribir código con un mejor rendimiento. En este artículo, profundizaremos en los detalles de las tres principales declaraciones DML: insertar, actualizar y eliminar, cuando se utilizan en tablas sin índices agrupados.

Una tabla sin índice agrupado se conoce como “heap”, lo que significa que no sigue un orden lógico de filas. SQL Server utiliza páginas de asignación de índices (IAM) para rastrear y escanear las páginas de datos asignadas por la tabla. Sin embargo, esta falta de orden puede resultar en un rendimiento deficiente debido a escaneos completos al buscar registros que coincidan con los criterios de filtro de la consulta.

Cuando se inserta una fila en un heap, SQL Server busca espacio disponible e inserta la fila donde pueda encajar. Utiliza las páginas IAM para encontrar los extensos pertenecientes a la tabla y las páginas PFS para rastrear el espacio libre en las páginas de datos. Si no hay espacio en las páginas existentes, SQL Server intenta encontrar páginas no asignadas dentro del mismo extenso. Si no hay ninguna disponible, se asigna un nuevo extenso.

Eliminar una fila de un heap no libera automáticamente el espacio ni mueve los datos en la página. SQL Server simplemente establece el desplazamiento de la fila eliminada en 0, lo que indica que el espacio se puede utilizar para una nueva fila. Las páginas vacías no se desasignan a menos que se reconstruya la tabla heap o se cree un índice agrupado. Sin embargo, el espacio ocupado por las filas eliminadas aún se puede reutilizar para futuras inserciones.

La actualización de filas en un heap puede ocurrir en el mismo lugar o en otro lugar. Las actualizaciones en el mismo lugar ocurren cuando el valor de la fila cambia sin moverla a una página diferente. Si la fila se mueve a otra página o a una ubicación diferente en la misma página, se considera una actualización en otro lugar y se realiza como una eliminación seguida de una inserción. Las actualizaciones en otro lugar en los heaps resultan en punteros de reenvío, que son filas de 16 bytes que apuntan a la nueva ubicación de la fila reenviada.

Los punteros de reenvío introducen múltiples lecturas físicas durante una sola búsqueda de ID de fila (RID), lo que conduce a un rendimiento deficiente. Ocurren principalmente cuando se actualiza una columna de longitud variable para contener valores más grandes de los que pueden caber en la misma ubicación. Para solucionar los punteros de reenvío, se recomienda crear un índice agrupado en la tabla o reconstruir la tabla heap.

Aunque los heaps pueden ofrecer un mejor rendimiento para insertar rápidamente grandes cantidades de datos, los beneficios de tener un índice agrupado generalmente superan a los de los heaps. Las búsquedas de claves en un índice agrupado tienen un impacto mínimo en el rendimiento en comparación con la E/S física introducida por las búsquedas de RID en los heaps.

En conclusión, comprender los detalles de las transacciones DML en SQL Server, especialmente al trabajar con heaps, es crucial para optimizar el rendimiento. Al conocer cómo funcionan las inserciones, actualizaciones y eliminaciones en los heaps, se pueden tomar decisiones informadas sobre cuándo utilizar heaps y cuándo considerar el uso de un índice agrupado. En el próximo artículo, exploraremos el impacto de las operaciones DML en tablas con índices B-tree, divisiones de páginas y fragmentación.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.