故事是这样的:
我在对MySQL进行性能测试时,发现CPU使用率接近100%,其中80%us, 16%sys,3%wa,iostat发现磁盘iops2000以下,avgqu-sz不超过3,%util最高70%,看来瓶颈不在磁盘IO上面,而在CPU上。sys部分使用率有点高。
于是我果断使用perf top查看,赫然排在前面的2个,是my_ismbchar_utf8mb4和my_charpos_mb。
my_ismbchar_utf8mb4顾名思义,很明显是与字符集相关的;my_charpos_mb暂时不清楚。
经验告诉我,这很不正常!通常来说,消耗CPU最多的应该是数据页相关的操作才对啊。
我快速打开MySQL internal文档搜索,没找到有价值的信息。
哦,你想要知道这个故事的前情提要?抱歉,我刚刚只说了压测,按照国际惯例,我这就贴出环境和版本信息:
硬件:8核16GB,200GB SSD,腾讯云虚拟机 操作系统版本:CentOS release 6.9 (Final) MySQL版本:5.7.28-log MySQL Community Server (GPL),二进制方式安装 MySQL参数:innodb_buffer_pool_size = 10752M innodb_flush_log_at_trx_commit = 1 sync_binlog = 1 character-set-server = utf8mb4 sysbench版本:1.0.19 sysbench参数:sysbench /usr/share/sysbench/oltp_read_write.lua --tables=3 --table-size=1000000 --mysql-password=*** --mysql-user=root --mysql-socket=http://www.likecs.com/usr/local/mysql5.7.28/mysql.sock --threads=128 --time=1800 run