Hi Mark!
Is there a reason you are using the pool_of_threads scheduler in
Drizzle? Is this a requirement on your end? We've found that the
pool_of_threads scheduler has serious performance problems and we
recommend using the default multi_thread scheduler. In addition, to get
an apples-to-apples comparison, I would advise using multi_thread, as
MySQL < 6.0 does not have a pool of threads scheduler anyway.
In addition, you will see serious performance bottlenecks if TCMalloc is
installed on your benchmark server. MySQL's memory allocation
procedures simply do not like TCMalloc.
Here is how we run our benchmarks internally:
innodb_buffer_pool_size= 128M
innodb_log_file_size= 64M
innodb_log_buffer_size= 8M
innodb_thread_concurrency= 0
innodb_additional_mem_pool_size= 16M
table_open_cache= 4096
table_definition_cache= 4096
When running against MySQL, we also add this:
character_set_server= utf8
I see from the results below that Drizzle, with the pool_of_threads, is
doing ~98K qps (16,000,000 / 162). I would expect us to exceed 100 qps
with the regular multi_thread scheduler in Drizzle, but I'll leave it to
you to do the benchmarks :)
Thanks!
Jay
MARK CALLAGHAN wrote:
I am moving a discussion from the facebook page to here as it is
drizzle specific.
I ran a load test, briefly described at
http://www.facebook.com/MySQLatFacebook#/note.php?note_id=142812280932,
to measure the overheads in MySQL by area (parser, table locking,
authorization, execution). Eventually, I tried the test on Drizzle.
For the non-Drizzle tests, about 66% of the overhead in mysqld is from
executing the query, about 10% from parsing and about 12% from
pre-execution (between parse and execution -- table locking, access
control).
Notes:
* the non-drizzle tests used mysqlslap and the drizzle test used drizzleslap
* the test input is a file with 1M identical select statements --
select pk from foo where pk = 1
* 5138-innodb-plugin uses the 1.0.4 innodb plugin which is faster than
the 1.0.3 innodb plugin used by drizzle
* 5138-innodb-builtin uses the non-plugin innodb which is probably not
faster than the 1.0.3 innodb plugin in drizzle
* I reran the tests to use utf8 (5138-innodb-plugin-utf8) to confirm
that the only cause for the performance difference is not utf8
* tests are run on an 8-core server with clients and server run on the same host
* tests for drizzle used the default value -- pool_of_threads_size=8
(pool8 below), but changing it to 16 (pool16 below) did not improve
performance much
seconds to complete test
by concurrency
1 2 4 8 16
60 66 64 68 139 5138-innodb-plugin-utf8
55 72 79 81 164 drizzle-innodb-utf8-pool8
62 65 73 80 162 drizzle-innodb-utf8-pool16
55 63 55 62 129 5138-innodb-plugin-latin1
49 61 57 64 130 5138-innodb-builtin-latin1
Top-N entries from oprofile for Drizzle:
Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a
unit mask of 0x00 (Unhalted core cycles) count 50000
samples % image name app name symbol name
29261 7.9739 drizzled drizzled
DRIZZLEparse(void*)
10959 2.9864 drizzled drizzled
JOIN::optimize()
10508 2.8635 drizzled drizzled
lex_one_token(void*, void*)
9207 2.5090 drizzled drizzled
mysql_select(Session*, Item***, TableList*, unsigned int, List<Item>&,
Item*, unsigned int, order_st*, order_st*, Item*, unsigned long,
select_result*, Select_Lex_Unit*, Select_Lex*)
6466 1.7620 drizzled drizzled
row_search_for_mysql
4968 1.3538 drizzled drizzled alloc_root
4583 1.2489 drizzled drizzled
btr_search_guess_on_hash
4552 1.2405 drizzled drizzled
my_strnncoll_binary
4467 1.2173 libc-2.5.so drizzleslap memset
4387 1.1955 libc-2.5.so drizzled memcpy
4181 1.1394 libc-2.5.so drizzled malloc
3761 1.0249 libc-2.5.so drizzled _int_malloc
3521 0.9595 libc-2.5.so drizzled free
3426 0.9336 ld-2.5.so drizzle do_lookup_x
3324 0.9058 drizzled drizzled Item::Item()
3146 0.8573 libpthread-2.5.so drizzled
pthread_mutex_lock
And similar data for 5.1.38, innodb plugin and latin1
Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a
unit mask of 0x00 (Unhalted core cycles) count 50000
samples % image name app name symbol name
32255 7.2674 mysqld mysqld
MYSQLparse(void*)
9406 2.1193 libc-2.5.so mysql strncmp
7827 1.7635 mysqld mysqld
JOIN::optimize()
7662 1.7263 mysqld mysqld
MYSQLlex(void*, void*)
6722 1.5145 libc-2.5.so mysqld memcpy
6443 1.4517 mysqld mysqld
make_join_statistics(JOIN*, TABLE_LIST*, Item*, st_dynamic_array*)
6270 1.4127 libc-2.5.so mysqlslap malloc
5906 1.3307 libpthread-2.5.so mysqld
pthread_mutex_lock
5618 1.2658 mysqld mysqld
row_search_for_mysql
5256 1.1842 libc-2.5.so mysqlslap _int_malloc
4694 1.0576 mysqld mysqld
get_hash_symbol(char const*, unsigned int, bool)
4452 1.0031 libc-2.5.so mysqld _int_malloc
4188 0.9436 libc-2.5.so mysqlslap memcpy
3814 0.8593 mysqld mysqld alloc_root
3749 0.8447 no-vmlinux no-vmlinux (no symbols)
3733 0.8411 ld-2.5.so mysql do_lookup_x
my.cnf variables:
innodb_buffer_pool_size=2000M
innodb_log_file_size=100M
innodb_doublewrite=0
innodb_flush_method=O_DIRECT
innodb_thread_concurrency=8
max_connections=500
innodb_max_dirty_pages_pct=80
innodb_flush_log_at_trx_commit=2
_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help : https://help.launchpad.net/ListHelp