Logo
You
Code

Kill sleeping connections

Autor YouCode - http://www.youcode.com.ar/mysql/kill-sleeping-connections-294

Matar las conexiones en sleep en MySql

Veremos como matar la conexiones que estan en sleep en MySql.

Para realizar esta tarea, debemos hacer el Procedimiento Almacenado y el Evento (Schedule) sobre la base de datos mysql.
Las conexiones que mataremos seran aquellas con un TIME de mas de 200.

Primero creamos el Procedimiento Almacenado:
create procedure purge_idle_connections()
deterministic
begin
    declare done boolean default false;
    declare max_time int default coalesce(@max_kill_time, 200);
    declare pid bigint;
    declare c cursor for
    SELECT id
    FROM information_schema.processlist
    WHERE command in ('Sleep')
        AND time > max_time;
    declare continue handler for not found
        set done = true;
    open c;
    set @q_kill = 'KILL ?';
    prepare q_kill from @q_kill;
    PURGELOOP: loop
        fetch c into pid;
        if done then
            leave PURGELOOP;
        end if;
        set @pid = pid;
        execute q_kill using @pid;
    end loop;
    deallocate prepare q_kill;
end;
Ahora crearemos el SCHEDULE para que se ejecute cada 10 segundos:
create event auto_purge_idle_connections
    on schedule every 10 second
    do call purge_idle_connections();
Es importante que luego de crear el SCHEDULE lo editemos, por ejemplo con el EMS para quitar el tilde en
"on completion not preserve" dado que si esta marcado se borrara al ajecutarse una vez.

Con esto tan simple ya tenemos a MySql con las conexiones activas y ninguna durmiendo.

Vean tambien http://www.youcode.com.ar/mysql/kill-slow-querys-mysql-295
 
http://www.youcode.com.ar/mysql/kill-sleeping-connections-294