Personalizar el bloqueo de un índice
Microsoft SQL Server Database Engine (Motor de base de datos de SQL Server) utiliza una estrategia de bloqueo dinámico que, en la mayoría de casos, elige automáticamente la mejor granularidad de bloqueo para las consultas. Cuando los patrones de acceso se comprenden bien y son coherentes, puede resultar beneficioso limitar los niveles de bloqueo disponibles para un índice.
Por ejemplo, una aplicación de bases de datos utiliza una tabla de búsqueda que se actualiza semanalmente en un proceso por lotes. La estrategia de bloqueo más eficaz consiste en desactivar el bloqueo de fila y página, y permitir que todos los lectores simultáneos obtengan un bloqueo compartido (S) sobre la tabla, con lo que se reduce la sobrecarga. Durante la actualización semanal por lotes, el proceso de actualización puede obtener un bloqueo exclusivo (X) y, a continuación, actualizar la tabla completa.
La granularidad del bloqueo utilizado en un índice se puede establecer mediante las instrucciones CREATE INDEX y ALTER INDEX. Además, las instrucciones CREATE TABLE y ALTER TABLE se pueden utilizar para establecer la granularidad del bloqueo en las restricciones PRIMARY KEY y UNIQUE. Para mantener la compatibilidad con versiones anteriores, el procedimiento almacenado del sistema sp_indexoption también puede establecer la granularidad. Para mostrar la opción de bloqueo actual de un determinado índice, utilice la función INDEXPROPERTY. Se pueden impedir los bloqueos de página, los de fila o una combinación de bloqueos de página y fila para un determinado índice.
Bloqueos no permitidos | Tienen acceso al índice |
---|---|
De página |
Bloqueos de fila y tabla |
De fila |
Bloqueos de página y tabla |
De página y fila |
Bloqueos de tabla |
Por ejemplo, cuando se sabe que una tabla es un punto de contención, puede resultar beneficioso impedir los bloqueos de página y, por lo tanto, permitir sólo los de fila. O bien, si siempre se utilizan recorridos de tabla para tener acceso a un índice o una tabla, impedir los bloqueos de página y fila puede resultar positivo, ya que sólo se permiten bloqueos de tabla.
Importante: |
---|
Normalmente, el optimizador de consultas Database Engine (Motor de base de datos) elige la granularidad correcta del bloqueo. Se recomienda no reemplazar las decisiones que toma el optimizador. Impedir un nivel de bloqueo puede ir en detrimento de la simultaneidad de una tabla o un índice. Por ejemplo, especificar sólo bloqueos de tabla en una tabla grande a la que tienen acceso muchos usuarios puede afectar al rendimiento de forma notable. Los usuarios deben esperar a que se libere el bloqueo de tabla antes de poder obtener acceso a ésta. |
Vea también
Otros recursos
ALTER INDEX (Transact-SQL)
ALTER TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL)
CREATE TABLE (Transact-SQL)
INDEXPROPERTY (Transact-SQL)
sp_indexoption (Transact-SQL)