Se ha explicado un par de veces antes y no estoy seguro de por qué todavía parece ser un misterio que a veces las sesiones no se cancelan de inmediato (o nunca).
De mi libro
Administración de SAP HANA | Libro y E-Book - por SAP PRESS:
10.2.4 Cancelar una sesión
A veces puede ser deseable no solo cancelar una declaración en ejecución de una sesión, sino también desconectar completamente la sesión. El comando para esto es ALTER SYSTEM DISCONNECT SESSION '' y se puede usar de manera similar al comando CANCEL SESSION. La diferencia entre esto y el comando CANCEL WORK es simplemente que no solo se cancelará la declaración actual, sino que la sesión en sí misma se terminará.
Nota
Desconectar la sesión no es una forma "más fuerte" de forzar la terminación de una declaración en ejecución. Con cualquiera de las opciones, la declaración en ejecución primero debe reconocer la bandera de cancelación y luego se debe realizar el rollback de la transacción, lo que también puede llevar una cantidad considerable de tiempo. Si el comando CANCEL WORK no logró detener una declaración en ejecución, entonces no tiene sentido intentar DESCONECTAR SESIÓN.
10.2.5 Problemas con la Cancelación de Sesiones
Como has visto, la capacidad de detener comandos en ejecución y desconectar sesiones depende de la idea de que la sesión que se debe cancelar verifica activamente que la bandera de cancelación esté establecida. Este enfoque tiene la desventaja de que hay situaciones en las que la sesión no puede verificar la bandera y, por lo tanto, nunca puede ser cancelada.
Por ejemplo, una sesión podría abrir una transacción y actualizar una tabla pero no confirmar la actualización. En su lugar, la sesión ya no hace nada y simplemente mantiene un bloqueo en el registro modificado (por ejemplo, piensa en un usuario que tiene abierta una máscara de entrada de datos y sin guardar se va a almorzar). Si otras sesiones necesitan cambiar este registro también, necesitan esperar hasta que la primera sesión libere el bloqueo.
En esta situación, cancelar la sesión del poseedor del bloqueo no ayuda, porque la sesión actualmente no está ejecutando ningún código que pueda verificar la bandera de cancelación. Esta situación, en la que la sesión está INACTIVA, solo se puede resolver desconectando la sesión.
El problema con esto es obvio: ¿Qué pasa si la aplicación cliente está procesando legítimamente los datos y debe escribir los resultados de nuevo a la base de datos? En este caso, el trabajo se pierde y la sesión debe reiniciarse. Por lo tanto, es importante investigar por qué la sesión está inactiva mientras una transacción está abierta y decidir caso por caso si desconectar la sesión. (Veremos cómo encontrar quién está ejecutando una sesión en la Sección 10.3).
Un segundo problema es que a veces lleva varios minutos hasta que se realiza el rollback de una sesión y se completa con éxito la cancelación. Durante ese tiempo, no hay signos visibles, en el monitor de Threads, por ejemplo, de que el hilo específico esté marcado para terminación. Esto podría llevar a los administradores de bases de datos a intentar ejecutar el comando CANCEL SESSION una y otra vez hasta que funcione. Claramente, esto es inútil.
Para asegurarse de que se han entendido los comandos de control de sesión, se puede examinar el archivo de traza del servidor de índices en el Listado 10.4.
[...]
[12351]{301610}[-1/-1] 2013-12-19 03:03:05.410801 i SQLSessionCmd
Statement.cc(03254):
el comando de control de sesión es realizado por 301610,
usuario=LARS, usuario de aplicación=I028297,
fuente de aplicación=csns.sql.editor.SQLExecuteFormEditor$1$1
.run(SQLExecuteFormEditor.java:796);
, consulta=ALTER SYSTEM CANCEL SESSION '301611'
[...]
Listado 10.4 Extracto del Archivo de Trama del Servidor de Índices
En el caso de que una declaración o cancelación de sesión no tenga éxito en absoluto, podría ser que SAP HANA esté ejecutando actualmente una rutina que aún no verifica la bandera de cancelación. Para encontrar estas rutinas y mejorarlas, el desarrollo de SAP HANA necesita conocerlas. Esta información se puede recopilar mediante un volcado en tiempo de ejecución. La Nota de SAP 1951590 cubre esto.
En tal caso, desafortunadamente, las únicas posibilidades para detener la sesión en ejecución son provocar al cliente para que libere el bloqueo (si es posible), detener el proceso del cliente o, como último recurso, detener y reiniciar todo el proceso del servidor de índices, lo que también terminará todas las demás sesiones.
Por lo tanto, antes de dar este último paso, considera si la cancelación puede esperar, por ejemplo, hasta que la mayoría de los usuarios hayan cerrado sesión y los trabajos importantes hayan terminado. Además, debes abrir un incidente con el Soporte de SAP para esta situación y asegurarte de recopilar el volcado en tiempo de ejecución para que se pueda analizar la causa raíz incluso si el sistema se reinició. En resumen, ¡no te apresures a cancelar hilos reiniciando el sistema!
<