七. 性能提升

临时性能提升

  • 第一种方法:先处理掉那些占着连接但是不工作的线程。有损处理,会Kill掉正在处理事务的连接,或导致客户端lost connection 错误.

避免大量使用短连接.

# 查看事务具体状态
select * from information_schema.innodb_trx\G
# 从服务器断开连接使用 kill connection + id 的命令
kill connection 5
  • 第二种方法:减少连接过程的消耗。

如果你启用–skip-grant-tables 参数, MySQL 会默认把 --skip-networking 参数打开, 表示这时候数据库只能被本地的客户端连接。

  • 慢查询性能问题
    • 索引没有设计好;Online DDL
    • SQL 语句没写好;使用query_rewrite 功能.
    • MySQL 选错了索引。
  • QPS突增问题, 新业务bug? 某个语句QPS暴涨?

IO性能瓶颈

  • 设置 binlog_group_commit_sync_delay 和 binlog_group_commit_sync_no_delay_count 参数, 减少 binlog 的写盘次数。这个方法是基于“额外的故意等待”来实现的, 因此可能会增加语句的响应时间, 但没有丢失数据的风险。
  • 将 sync_binlog 设置为大于 1 的值(比较常见是 100~1000)。这样做的风险是, 主机掉电时会丢 binlog 日志。
  • 将 innodb_flush_log_at_trx_commit 设置为 2。这样做的风险是, 主机掉电的时候会丢数据。

主备数据一致性