I'm busy working on my book, "Developing Web Applications with
Apache, MySQL, Memcached, and Perl", writing about how
Libmemcached (particularly the perl interface to libmemcached,
Cache::Memcached::libmemcached/Memcached::libmemcached) is
faster. And it is, except when I was writing a test script to
compare, I first used Daisuke Maki's script that comes with
Cache::Memcached::libmemcached, tools/benchmark.pl (which I
modified to only compare Cache::Memcached to
Cache::Memcached::libmemcached)
==== Benchmark "Simple get() (scalar)" ====
Rate perl_memcached libmemcached
perl_memcached 6784/s -- -78%
libmemcached 30488/s 349% --
==== Benchmark "Simple get_multi() (scalar)" ====
Rate perl_memcached libmemcached
perl_memcached 1806/s -- -84%
libmemcached 11494/s 537% --
==== Benchmark "Serialization with get()" ====
Rate perl_memcached libmemcached
perl_memcached 6402/s -- …
tl;dr: The MySQL community rocks. Percona, XtraDB, Drizzle, SSD storage, InnoDB IO scalability challenges.
For anyone who lives and dies by MySQL and InnoDB, things are finally starting to heat up and get interesting. I’ve been banging the “MySQL/InnoDB scales poorly” drums for years now, and despite having paid Enterprise licenses, I haven’t been able to get anywhere. I was pretty excited when Sun …
[Read more]After getting sysbench running properly with a scalable memory allocator (see last post), I can now return to what I was originally testing - what memory allocator is best for the 5.1 server (mysqld).
This stems out of studies I have made of some patches that have been released by Google. You can read about the work Google has been doing here.
I decided I wanted to test a number of configurations based on the MySQL community source, 5.1.28-rc, namely:
- The baseline - no Google SMP patch, default memory allocator (5.1.28-rc)
- With Google SMP patch, mem0pool enabled, no custom malloc (pool)
- With Google SMP patch, mem0pool enabled, linked with mtmalloc (pool-mtmalloc)
- With Google SMP patch, mem0pool disabled, linked with tcmalloc (TCMalloc)
- With Google SMP patch, mem0pool …
After getting sysbench running properly with a scalable memory allocator (see last post), I can now return to what I was originally testing - what memory allocator is best for the 5.1 server (mysqld).
This stems out of studies I have made of some patches that have been released by Google. You can read about the work Google has been doing here.
I decided I wanted to test a number of configurations based on the MySQL community source, 5.1.28-rc, namely:
- The baseline - no Google SMP patch, default memory allocator (5.1.28-rc)
- With Google SMP patch, mem0pool enabled, no custom malloc (pool)
- With Google SMP patch, mem0pool enabled, linked with mtmalloc (pool-mtmalloc)
- With Google SMP patch, mem0pool disabled, linked with tcmalloc (TCMalloc)
- With Google SMP patch, mem0pool …
After getting sysbench running properly with a scalable memory allocator (see last post), I can now return to what I was originally testing - what memory allocator is best for the 5.1 server (mysqld).
This stems out of studies I have made of some patches that have been released by Google. You can read about the work Google has been doing here.
I decided I wanted to test a number of configurations based on the MySQL community source, 5.1.28-rc, namely:
- The baseline - no Google SMP patch, default memory allocator (5.1.28-rc)
- With Google SMP patch, mem0pool enabled, no custom malloc (pool)
- With Google SMP patch, mem0pool enabled, linked with mtmalloc (pool-mtmalloc)
- With Google SMP patch, mem0pool disabled, linked with tcmalloc (TCMalloc)
- With Google SMP patch, mem0pool …
I have created a new tool, called xtstat, for analyzing the
performance of the PBXT storage engine.
The way it works is simple. PBXT now counts all kinds of things:
transactions committed and rolled back, statements executed,
records read and written, tables and indexes scanned, bytes read,
written and flushed to various types of files: record, index,
data logs, transaction logs, and so on.
A SELECT on the system table PBXT.STATISTICS (or
INFORMATION_SCHEMA.PBXT_STATISTICS if PBXT was built inside the
MySQL tree) returns the current totals of all these counters.
xtstat does a SELECT every second on this table and prints the
difference. In this way, you can see how much work PBXT is doing
in each area.
There are currently 48 different statistics:
To ensure all this counting does not itself cost any performance,
each thread counts for itself, so no locking is required. The
SELECT on …
My mind is playing "Suffering Succotash..."
I have been working on MySQL performance for a while now, and the team I am in have discovered that SysBench could do with a couple of tweaks for Solaris.
Sidebar - sysbench is a simple "OLTP" benchmark which can test multiple databases, including MySQL. Find out all about it here , but go to the download page to get the latest version.
To simulate multiple users sending requests to a database, sysbench uses multiple threads. This leads to two issues we have identified with SysBench on Solaris, namely:
- The implementation of random() is explicitly identified as unsafe in multi-threaded applications on Solaris. My team has found this is a real issue, with occasional core-dumps happening to our …
My mind is playing "Suffering Succotash..."
I have been working on MySQL performance for a while now, and the team I am in have discovered that SysBench could do with a couple of tweaks for Solaris.
Sidebar - sysbench is a simple "OLTP" benchmark which can test multiple databases, including MySQL. Find out all about it here , but go to the download page to get the latest version.
To simulate multiple users sending requests to a database, sysbench uses multiple threads. This leads to two issues we have identified with SysBench on Solaris, namely:
- The implementation of random() is explicitly identified as unsafe in multi-threaded applications on Solaris. My team has found this is a real issue, with occasional core-dumps happening to our …
My mind is playing "Suffering Succotash..."
I have been working on MySQL performance for a while now, and the team I am in have discovered that SysBench could do with a couple of tweaks for Solaris.
Sidebar - sysbench is a simple "OLTP" benchmark which can test multiple databases, including MySQL. Find out all about it here , but go to the download page to get the latest version.
To simulate multiple users sending requests to a database, sysbench uses multiple threads. This leads to two issues we have identified with SysBench on Solaris, namely:
- The implementation of random() is explicitly identified as unsafe in multi-threaded applications on Solaris. My team has found this is a real issue, with occasional core-dumps happening to our …
For those interested In SSD or Wafflegrid I will be presenting on both topics at the 2009 MySQL User Conference! I want to keep these fresh, so their will be more then just a rehash of my blog here, but their will be some overlap. Interested in something I have not talked about yet? Drop me a line! Always looking for good ideas.