Tengo un proceso con un Select que tarda mucho en finalizar, del orden de 5 a 10 minutos.
Actualmente no estoy usando NOLOCK como una pista para el motor de base de datos MS SQL.
Al mismo tiempo, tenemos otro proceso que realiza actualizaciones e inserciones en la misma base de datos y las mismas tablas.
El primer proceso ha comenzado, recientemente para terminar prematuramente con un mensaje
SQLEXCEPTION: La transacción se bloqueó en los recursos de bloqueo con otro proceso y se eligió como la víctima del bloqueo.
Este primer proceso se ejecuta en otros sitios en condiciones idénticas pero con bases de datos más pequeñas y, por lo tanto, la declaración de selección en cuestión toma un período de tiempo mucho más corto (del orden de 30 segundos aproximadamente). En estos otros sitios, no recibo el mensaje de interbloqueo en estos otros sitios. Tampoco recibí este mensaje en el sitio que tenía el problema inicialmente, pero supongo que, a medida que la base de datos ha crecido, creo que debo haber cruzado algún umbral. Aquí están mis preguntas:
- ¿Podría el tiempo que tarda en ejecutarse una transacción hacer que el proceso asociado sea más probable que sea marcado como víctima de un punto muerto?
- Si ejecuto la selección con una pista NOLOCK, ¿esto eliminará el problema?
- Sospecho que un campo de fecha y hora que se verifica como parte de la cláusula WHERE en la declaración de selección está causando el tiempo de búsqueda lento. ¿Puedo crear un índice basado en este campo? Es aconsejable