SHOW PROCESSLIST in MySQL command: sleep
Asked Answered
R

4

114

When I run SHOW PROCESSLIST in MySQL database, I get this output:

mysql> show full processlist;

+--------+------+-----------+--------+---------+-------+-------+-----------------------+
| Id     | User | Host      | db     | Command | Time  | State | Info                  |
+--------+------+-----------+-------+---------+-------+-------+-----------------------+
| 411665 | root | localhost | somedb | Sleep   | 11388 |       | NULL                  | 
| 412109 | root | localhost | somedb | Query   |     0 | NULL  | show full processlist | 
+--------+------+-----------+-------+---------+-------+-------+------------------------+

I would like to know the process "Sleep" that is under Command. What does it mean? Why it is running since a long time and showing NULL? It is making the database slow and when I kill the process, then it works normally. Please help me.

Respect answered 30/8, 2012 at 9:53 Comment(8)
it does nothing it just sits there and "waits" for a connection.Horwath
can we find which query is waiting for connection ? does my que makes some sense ? ANd why it is slowing down my database ?Respect
Is it really slowing your database down? its doing nothing. Its basically a connection thats doing nothing - eg perhaps you connected on another terminal a while back, and didnt disconnect etc.Rateable
its not a query waiting for connection. its a connection pointer waiting for the timeout to terminate. and it doesn't have an impact on performance. The only thing its using is a few bytes as every connection does. The really worst case its using one connection of your pool, if you would connect multiple times via console client and just close the client without closing the connection you could use up all your connections and have to wait for the timeout to be able to connect again... but this is highly unlikely :-)Horwath
@Rufinus, I have the same problem. Why you say but this is highly unlikely ? And which parameters is related to config timeout sleeping connections in my.cnf?Cowbell
@hamidreza66 see #2408232 and dba.stackexchange.com/questions/1558/…Horwath
Does this answer your question? MySql Proccesslist filled with "Sleep" Entries leading to "Too many Connections"?Jorgenson
Something is off. While state=sleep, trx_rows_modified = 823 so definitely not something we wanted to kill yet killing it got our server back to working again. you do not show your trx_rows_modified above. There has to be more to this.Placeman
H
95

It's not a query waiting for connection; it's a connection pointer waiting for the timeout to terminate.

It doesn't have an impact on performance. The only thing it's using is a few bytes as every connection does.

The really worst case: It's using one connection of your pool; If you would connect multiple times via console client and just close the client without closing the connection, you could use up all your connections and have to wait for the timeout to be able to connect again... but this is highly unlikely :-)

See MySql Proccesslist filled with "Sleep" Entries leading to "Too many Connections"? and https://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep for more information.

Horwath answered 4/1, 2013 at 14:36 Comment(1)
The problem can be if you have limited connections to database. Because even those connections don't have an impact on performance, they still count as a connection.Mite
M
33

"Sleep" state connections are most often created by code that maintains persistent connections to the database.

This could include either connection pools created by application frameworks, or client-side database administration tools.

As mentioned above in the comments, there is really no reason to worry about these connections... unless of course you have no idea where the connection is coming from.

(CAVEAT: If you had a long list of these kinds of connections, there might be a danger of running out of simultaneous connections.)

Miffy answered 3/1, 2013 at 20:12 Comment(0)
F
8

I found this answer here: https://dba.stackexchange.com/questions/1558. In short using the following (or within my.cnf) will remove the timeout issue.

SET GLOBAL interactive_timeout = 180; SET GLOBAL wait_timeout = 180;

This allows the connections to end if they remain in a sleep State for 3 minutes (or whatever you define).

Firing answered 12/3, 2018 at 11:36 Comment(0)
S
0

Sleep meaning that thread is do nothing. Time is too large beacuse anthor thread query,but not disconnect server, default wait_timeout=28800;so you can set values smaller,eg 10. also you can kill the thread.

Singleton answered 23/5, 2013 at 3:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.