La ejecución de la consulta "" falló con el siguiente error: "El índice" "(partición 1) en la tabla" "no se puede reorganizar porque el bloqueo de nivel de página está deshabilitado".
El plan de mantenimiento debe estar intentando ALTERAR ÍNDICE REORGANIZAR, que es una operación en línea. Para eliminar la fragmentación (las páginas no están en orden), las páginas deben estar bloqueadas y movidas, lo que no es posible si se han deshabilitado los bloqueos de página. La única forma de desfragmentar sin bloqueos de página es bloquear toda la partición, lo que no es posible para REORGANIZAR ya que solo está en línea.
¿Cuál es la diferencia entre los dos esquemas de bloqueo y cuáles son sus consecuencias en el mundo real (en producción)?
Debe comprender qué registro y página son para evaluar el impacto de no permitir un tipo de bloqueo en particular. Si no está familiarizado con el almacenamiento interno de SQL Server, comience con Anatomía de un registro y Anatomía de una página . En pocas palabras:
- filas = registros
- las filas se almacenan en páginas de 8 kb
Si tuviera que modificar los tipos de bloqueo permitidos:
- Deshabilitar bloqueos de página = Solo bloqueos de fila y tabla
- Deshabilitar bloqueos de fila = solo bloqueos de página y tabla
- Deshabilitar ambos = solo bloqueos de tabla
Hay dos escenarios que conozco en los que puede ser beneficioso no permitir un tipo de bloqueo. No significa que no haya otros, ojalá alguien más intervenga con ejemplos.
Una tabla de búsqueda de acceso frecuente, que cambia con poca frecuencia : al deshabilitar los bloqueos de nivel de página y fila, todos los lectores tomarán un bloqueo de tabla compartido. Esto es más rápido / más barato en lugar de la intención compartida en la tabla, seguida de la intención compartida en una página y finalmente un bloqueo compartido en una fila o filas específicas.
Prevención de un escenario de bloqueo específico : si encuentra bloqueos causados por procesos concurrentes que adquieren bloqueos que están frecuentemente en la misma página, si no se bloquean las filas, se bloquean las páginas. Solo un proceso puede acceder a la página a la vez, el otro debe esperar.
El primer ejemplo es la microoptimización y es poco probable que produzca un beneficio medible en un sistema típico. El segundo resolverá ese escenario de punto muerto en particular, pero puede introducir efectos secundarios inesperados, por ejemplo, matar la concurrencia en una sección diferente del código. Difícil de evaluar el impacto por completo, ¡enfoque con precaución!
El valor predeterminado es que ambos estén habilitados y esto no debe cambiarse sin una buena causa.