Subject | Dead connections |
---|---|
Author | Tom Munro Glass |
Post date | 2010-11-03T21:57Z |
Firebird 2.1.3 Classic on CentOS 5.5.
I have seen a number of instances where garbage collection stops and I have
put in place a system to alert me when the difference between the oldest and
next transaction exceeds a threshold.
I now have some evidence of what is causing the problem. A Delphi client
application used a thread to create a connection to the database and run a
query. Something caused an access violation in the thread at the point when it
opened the query. The exception was handled and the thread will have
terminated but the database is still showing a connection in the
MON$ATTACHMENTS table and this has blocked garbage collection. Nothing was
logged to firebird.log.
In the real world things can go wrong with clients, whether it is exceptions
in the code, network or power problems. My question is, when something like
this happens, how can I rectify the situation and terminate the dead
connection?
Currently I do a backup, kill all Firebird processes, restore and everything
is fine, but I need an automatic solution I can code for detecting and killing
dead connections.
Regards
Tom Munro Glass
I have seen a number of instances where garbage collection stops and I have
put in place a system to alert me when the difference between the oldest and
next transaction exceeds a threshold.
I now have some evidence of what is causing the problem. A Delphi client
application used a thread to create a connection to the database and run a
query. Something caused an access violation in the thread at the point when it
opened the query. The exception was handled and the thread will have
terminated but the database is still showing a connection in the
MON$ATTACHMENTS table and this has blocked garbage collection. Nothing was
logged to firebird.log.
In the real world things can go wrong with clients, whether it is exceptions
in the code, network or power problems. My question is, when something like
this happens, how can I rectify the situation and terminate the dead
connection?
Currently I do a backup, kill all Firebird processes, restore and everything
is fine, but I need an automatic solution I can code for detecting and killing
dead connections.
Regards
Tom Munro Glass