?

Log in

No account? Create an account

MySQL 6.0, Libevent

« previous entry | next entry »
Jan. 1st, 2008 | 11:30 am

Currently in the 6.0 tree we have support for Libevent. This is one of those things I've been wanting to see
us do for years and it was finally completed a few weeks ago by Damien
Katz (aka CouchDB) with some help from Dmitri Lenev.

So what does this do? MySQL uses a 1:1 ratio for connections and
threads. Libevent allows us to pull threads into pools and use them
for connections. This is pretty awesome for 8way machines since
partially solves thread contention issues. Below is an example of
MyISAM doing large number of inserts with the number of users doing
inserts increasing (1-300 users). The graph shows the time taken for
each test run. Similar numbers show up when you run benchmarks with
Innodb (leave concurrent set to zero as you should normally do, this
will allow libevent to more effectively control the thread usage).
The green line shows the test running with 20 threads, while the blue
is unlimited. I do not have good rules of thumb yet for thread number
vs processors. The machine I used for this test is an 8way that I have
on loan from Intel. I will work out a similar test for Solaris once I
can get the code to compile there.

Pretty awesome :)
Libevent Picture.jpg

Link | Leave a comment |

Comments {17}

dormando

(no subject)

from: dormando
date: Jan. 1st, 2008 08:15 pm (UTC)
Link

I'd say "yay, finally!" but it might be a while now :) I hope there's a concept of max_connections vs max_active_threads.

Reply | Thread

Brian "Krow" Aker

(no subject)

from: krow
date: Jan. 2nd, 2008 04:54 am (UTC)
Link

Well MySQL has max connections, that has been around since nearly the beginning.

6.0 is as stable as 5.1 is. Avoid backup and any new engines and you will be fine.

Reply | Parent | Thread

dormando

(no subject)

from: dormando
date: Jan. 2nd, 2008 05:38 am (UTC)
Link

What I mean is a concept of max connections and "max active connections" being separate.

So you could say:

max_connections = 10000

max_active_connections = 100

... and 10,000 clients could connect, but the clients will queue if there're more than 100 queries in flight.

Reply | Parent | Thread

Brian "Krow" Aker

(no subject)

from: krow
date: Jan. 2nd, 2008 06:17 am (UTC)
Link

Damien's code looks to be such that you set the number of threads, and that set of threads are allocated at startup. That pool of threads will never grow.

Reply | Parent | Thread

thread pool per user

from: 72squared
date: Jun. 25th, 2008 03:21 pm (UTC)
Link

what if the thread pools were allocated per user? That way one mysql user would be able to consume only the thread pool for itself. Then the application designer can put slower queries connecting via the same username, and not block out other users? This would also prevent the condition where the root user could be starved out.

Does that make sense?

Reply | Parent | Thread