Pregunta

Me gustaría preguntar par de preguntas relacionadas con el mecanismo de bloqueo de SQL Server

  1. Si no estoy utilizando la sugerencia de bloqueo con la instrucción SQL, SQL Server utiliza pista PageLock por defecto. Estoy en lo correcto ??? Si sí, entonces ¿por qué? que puede ser su debido al factor de gestionar demasiados bloqueos esto es lo único que me tomó como inconveniente, pero por favor, hágamelo saber si hay otros. y dime si podemos cambiar este comportamiento predeterminado si es razonable hacerlo.

  2. Estoy escribiendo una aplicación del lado del servidor, un servidor de sincronización (no usar marco de sincronización) y he escrito consultas de bases de datos en C # archivo de código y el uso de la conexión ODBC para ejecutarlos. Ahora la pregunta es ¿cuál es la mejor manera de cambiar el bloqueo por defecto de la página a la fila manteniendo inconvenientes en mente (por ejemplo, añadiendo sugerencia de bloqueo en las consultas de esto es lo que estoy planeando para).

  3. ¿Qué pasa si una consulta SQL (SELECT / DML) se está ejecutando sin el alcance de la transacción y la declaración contiene sugerencia de bloqueo a continuación, qué tipo de bloqueo se adquirió (por ejemplo, compartir, actualizar exclusiva)? Y mientras que en transacción alcance hace nivel de aislamiento de transacción tiene impacto en el tipo de bloqueo si se utiliza ROWLOCK pista.

  4. Por último, si algunos de ellos podrían dar mi muestra, de modo que pude probar y experimentar todo lo anterior escenarios mi mismo (por ejemplo dot código o secuencia de comandos SQL neto)

Gracias Mubashar

¿Fue útil?

Solución

  1. No. Que encaje como lo considere oportuno y se intensifica cerraduras según sea necesario

  2. Deje que el motor DB manejarlo

  3. Véase el punto 2

  4. Véase el punto 2

Yo sólo haría uso de sugerencias de bloqueo si desea comportamientos específicos y determinados, por ejemplo colas o no bloqueante (sucio) lee.

De forma más general, ¿por qué cree que el motor de base de datos no puede hacer lo que quiera de forma predeterminada?

Otros consejos

El bloqueo por defecto es bloqueos de registro no bloqueos de página, aunque la forma en que funciona el mecanismo de bloqueo significa que va a colocar cerraduras en todos los objetos dentro de la jerarquía, por ejemplo, la lectura de una sola fila colocará un bloqueo compartido en la mesa, un bloqueo compartido en la página y luego un bloqueo compartido en la fila.

Esto permite una acción tendente a un bloqueo exclusivo en la tabla para saber que no puede tomar todavía, ya que hay un bloqueo presente compartida (de lo contrario tendría que comprobar cada página / fila para cerraduras.)

Si emite demasiados bloqueos para una consulta individual sin embargo, se lleva a cabo la extensión de bloqueo que reduce la granularidad del bloqueo - por lo que es la gestión de menos cerraduras. Esto se puede desactivar mediante un indicador de traza, pero yo no lo consideraría.

Hasta que no sabe que en realidad tiene un problema de escalada de bloqueo / bloqueo se arriesga prematuramente la optimización de un problema inexistente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top