После прочтения статьи - http://www.percona.com/blog/2013/03/08/mysql-performance-imp.../решил таки проверить есть ли отличия или нет, как раз планируем переход на 16ти ядерный сервер.
CentOS 6.6, 30 ГБ RAM, это EC2 инстанс на AWS, если это имеет значение.
CPU: Intel Xeon CPU E5-2680 v2 @ 2.80GHz, 16 ядер
# rpm -qa | grep Percona-Server-server
Percona-Server-server-55-5.5.42-rel37.1.el6.x86_64# rpm -qa | grep jemalloc
jemalloc-3.6.0-1.el6.x86_64
# rpm -qa | grep gperftools
gperftools-libs-2.0-11.el6.3.x86_64
Настройки mysql
# cat my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
character-set-server=utf8
init-connect='SET NAMES utf8'thread_cache_size = 4
innodb_buffer_pool_size = 12G
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
innodb_thread_concurrency = 0
innodb_flush_log_at_trx_commit=2
innodb_doublewrite=0
innodb_flush_method=O_DIRECT
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
Подготавливаю базу
# sysbench --test=oltp --oltp-table-size=50000000 --mysql-db=sysbench --mysql-user=sysbench --mysql-password=7654321 --db-driver=mysql prepare
В случае jemalloc/tcmalloc добавляю в секцию [mysqld_safe] строки
malloc-lib=/usr/lib64/libjemalloc.so.1
и
malloc-lib=/usr/lib64/libtcmalloc_minimal.so.4
Через pmap и /proc/mysql_pid/environ проверяю, что соответствующий алокатор подгрузился
# pmap 2891 | grep malloc
00007f2e57854000 196K r-x-- /usr/lib64/libjemalloc.so.1
00007f2e57885000 2048K ----- /usr/lib64/libjemalloc.so.1
00007f2e57a85000 8K rw--- /usr/lib64/libjemalloc.so.1# cat /proc/2891/environ
LD_PRELOAD=/usr/lib64/libjemalloc.so.1TERM=xtermPATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/binPWD=/usrSHLVL=3MYSQL_HOME=/usr_=/usr/bin/nohup
И запускаю тесты. После каждого теста БД пересоздается, а сервер перегружается, чтобы исключить влияение кеширования.
MALLOC (glibc)
# sysbench --num-threads=16 --test=oltp --oltp-table-size=50000000 --oltp-test-mode=complex --mysql-db=sysbench --mysql-user=sysbench --mysql-password=7654321 --db-driver=mysql --max-requests=0 --max-time=3600 run sysbench 0.4.12: multi-threaded system evaluation benchmarktransactions: 10008748 (2780.20 per sec.)
JEMALLOC
# sysbench --num-threads=16 --test=oltp --oltp-table-size=50000000 --oltp-test-mode=complex --mysql-db=sysbench --mysql-user=sysbench --mysql-password=7654321 --db-driver=mysql --max-requests=0 --max-time=3600 run sysbench 0.4.12: multi-threaded system evaluation benchmarktransactions: 9787562 (2718.76 per sec.)
TCMALLOC
# sysbench --num-threads=16 --test=oltp --oltp-table-size=50000000 --oltp-test-mode=complex --mysql-db=sysbench --mysql-user=sysbench --mysql-password=7654321 --db-driver=mysql --max-requests=0 --max-time=3600 run sysbench 0.4.12: multi-threaded system evaluation benchmarktransactions: 10448024 (2902.23 per sec.)
http://i.piccy.info/i9/ef4c86131616fbc59a19bef4caa4ac65/1427...
три пика это соответственно тест с malloc/jemalloc/tcmalloc. Но как я вижу по графику разницы практически нет. Может я что то не так делаю?