¿Qué es un "razonable" de la longitud de tiempo para mantener un cursor SQL abierto?

StackOverflow https://stackoverflow.com/questions/10727

  •  08-06-2019
  •  | 
  •  

Pregunta

En sus aplicaciones, lo que es un "largo tiempo" para mantener una transacción abierta antes de confirmar o deshacer?Minutos?Segundos?Horas?

y sobre que base de datos?

¿Fue útil?

Solución

@lomaxx, @ChanChan:al mejor de mi conocimiento de los cursores son sólo un problema en SQL Server y Sybase (T-SQL variantes).Si su base de datos de la opción es de Oracle, a continuación, los cursores de tu amigo.He visto una serie de casos en donde el uso de cursores en realidad ha mejorado el rendimiento.Los cursores son una increíblemente útil mecanismo y tbh, diciendo cosas como "si utiliza un cursor tenemos el fuego" es un poco ridículo.

Habiendo dicho eso, sólo quieren mantener un cursor abierto para el mínimo que se requiere.Especificar un tiempo máximo sería arbitrario y sin sentido sin la comprensión del dominio del problema.

Otros consejos

Que probablemente voy a conseguir flameado para esto, pero usted realmente debe tratar de evitar el uso de los cursores como incurren en un grave impacto en el rendimiento.Si usted debe usarlo, usted debe mantener abierto el mínimo tiempo posible para que libere los recursos que están siendo bloqueados por el cursor a la brevedad posible.

transacciones:minutos.

Cursores:0seconds máximo, si se utiliza un cursor que despedirlo.

Esto no es ridículo cuando se considera que estamos en una web de alta disponibilidad de medio ambiente, que se ejecuta sql server, y ni siquiera podemos permitir almacenados procs debido a la imposibilidad de precisión versión y mantenerlos.Si estamos usando oracle tal vez.

En general estoy de acuerdo con las otras respuestas:Evitar los cursores cuando sea posible (en la mayoría de los casos) y cerca de ellos tan rápido como sea posible.

Sin embargo:Todo depende del entorno en el que está trabajando.

  • Si se trata de una producción en entorno web con un montón de usuarios, asegúrese de que el cursor desaparece antes de que alguien se obtiene un tiempo de espera.
  • Si usted está - por ejemplo - la escritura de un "registro de analizar el procedimiento almacenado" (o lo que sea) en una propiedad de la máquina que no hace nada más:siéntase libre de hacer cualquier cosa que quieras hacer.Usted será la única persona que tiene que esperar.No es como si el servidor de base de datos se va a morir porque utiliza los cursores.Usted debe considerar, sin embargo, que tal vez el uso de un comportamiento va a cambiar a lo largo del tiempo y en algún momento hay 10 personas que utilizan esa aplicación.Así que trate de encontrar otra manera ;)

@ninesided:problemas de rendimiento a un lado, también se trata de usar la herramienta correcta para el trabajo.Se les da la opción para mover el cursor fuera de la consulta en el código, yo creo que el 99 veces de cada 100 que sería mejor poner esa lógica de bucle en una especie de código administrado.Esto permite obtener las ventajas del uso de un depurador, comprobación de errores en tiempo de compilación, tipo de seguridad, etc.

Mi respuesta a la pregunta es siempre la misma, si usted está usando un cursor, cerrar lo antes posible, en oracle también me gustaría estar tratando de utilizar explícita de los cursores.

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