View Single Post

  #3 (permalink)  
Old 04-25-2007
John Nagle
 
Posts: n/a
Default Re: Load testing results in "Lost connection to MySQL server duringquery"

More info: This is happening during the opening of a MySQL connection,
not during a query. What's actually failing in Python is

db = MySQLdb.connect(host="localhost",
use_unicode = True, charset = "utf8",
user=username, passwd=password, db=database)

and you can see the last line of that in the Python backtrace
below. That's raising:

OperationalError: (2013, 'Lost connection to MySQL server during query')

which is wrong.

So it's not related to the query; we're still in connection
setup.

This only occurs under load, when about 20 programs, each
with several threads attached to the database, are running.
All the connections are local, to the same machine, so it's
not a network problem. The MySQL server can support up to 100
connections, and we monitor that; SHOW PROCESSLIST never shows
more than 40 processes.

'MySQL error 2013 "lost connection' has 52,000+ hits in Google,
so there might be a problem. Apparently this is the generic
MySQL error for "can't connect", as well as an indication of a
connection loss. The MySQLAB documentation says that you get a
2002 or 2003 error for "Can't connect" situations. But that
does not seem to be the case.

So now I have the code retrying the database connect at one
second intervals until it either succeeds or fails 30 times in
succession. This seems to be a useful workaround. It's not
failing in minutes of heavy load; it used to fail within a minute.

Still, this shouldn't be happening on a local connection, ever.

Exception in thread Thread-5:
Traceback (most recent call last):
File "/usr/local/lib/python2.5/threading.py", line 460, in __bootstrap
self.run()
File "./sitetruth/InfoSiteRating.py", line 111, in run
if not self.getDb() : #
if no database
File "./sitetruth/InfoSiteBase.py", line 42, in getDb
self.db = self.owner().getDbConnection() # get a new database
connection
File "./sitetruth/InfoSite.py", line 59, in getDbConnection
return(miscutils.dbattach(self.keyfile)) # get a new
database connection
File "./sitetruth/miscutils.py", line 227, in dbattach
user=username, passwd=password, db=database)
File "build/bdist.linux-i686/egg/MySQLdb/__init__.py", line 74, in Connect
File "build/bdist.linux-i686/egg/MySQLdb/connections.py", line 170, in __init__
super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (2013, 'Lost connection to MySQL server during query')


John Nagle wrote:
> I'm load-testing a dedicated server by making 20 CGI requests
> at the same time, and I'm getting an occasional
>
> MySQL database error 2013:
> Lost connection to MySQL server during query
>
> The server is running Linux (Red Hat Fedora 5) and MySQL 5.
>
> The MySQL server and client are on the same machine, so there shouldn't
> be a network error. MySQL isn't crashing. The requests aren't large
> and each one affects only one table row. About 1 in 50 requests fails.
>
> 20 simultaneous requests shouldn't be overloading anything, although
> the server does go compute-bound.
>
> I've read
> http://dev.mysql.com/doc/refman/5.0/en/gone-away.html
> and none of the problems there seem to apply.
>
> John Nagle

Reply With Quote