系统层面: 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。 降低 CPU 计算,充分利用cpu 除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标 mysql 使用16c的机器最好,32c的高配反而会导致mysql的性能下降 在32核的cpu上,将innodb_thread_concurrency设为32也不能避免这个问题。 innodb_thread_concurrency=32 解决方案: 32C 4个socket,可以用numal绑定到6个C上 numactl 绑定指核启动 。eg: numactl --physcpubind=1 --localalloc mysqld_safe --user=mysql& 同时innodb_thread_concurrency=n这个参数的设置,对cpu的 利用率也是很大的。 保证不使用swap分区 如果使用了swap分区,且cache又很大的话,清cache,重新挂载swap 先sync 再清cache echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_caches swapoff -a && swapon -a 数据库层面:
是否出现死锁
若出现死锁,则因快速回滚死锁set global innodb_lock_wait_timeout=n的值