views:

42

answers:

3

I am in the process of making a Javascript(Front end, PHP back end) game. In this game it checks the server for updates every 2 seconds. There is one 1 sql call being run and at the end I use $mysqli->close() to close the SQL connection. The columns in the where are both indexed.

The problem I am having is after its running for a little while MYSQL starts spawning tons of sleep processes. Does anyone have any idea what might be causing this?

A: 

Do the processes stick around? Mysql likes to keep a few threads open to recieve requests, i wouldn't worry about them unless it leaving a lot of them open and there taking up resources.

If your hitting the request every 2 seconds its cheaper to keep the pool waiting for a request than instantiating a connection every time.

Chris
It starts off as one or two and quickly becomes 20-40 and page loads go from 223ms to 10 seconds. I can't ignore the problem.
Iscariot
A: 

If you are polling every 2 seconds this sort of thing is bound to happen. All it takes is one query to be held up because of table locking (which can happen the moment you have another process or page trying to do an insert or a slow drive seek). Then all of a sudden there will be two queries in the queue. The moment it starts taking an average of 2 seconds to process a page it will spiral out of control.

IMHO You will be better off using an old fashioned IFRAME for this task or using a streaming solution as suggested by some of the others.

e4c5
It's innodb and to the best of my knowledge it wouldn't lock, right?
Iscariot
InnoDB does have locks. These are row wide locks http://dev.mysql.com/doc/refman/5.0/en/innodb-lock-modes.html so the senario I mentioned above is still valid.In addition to this, whatever table type you use updates or inserts can effect the index. When that happens any query that uses that index will have to wait for the index update to be completed.
e4c5
+1  A: 

I'd push updates to your users instead of polling for them. Check out the AJAX Push Engine, that can help a lot. Also, turn on persistent MySQL connections, that could help.

Xorlev