MySQL有哪些“饮鸩止渴”提高性能的方法?

Posted lyh225

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL有哪些“饮鸩止渴”提高性能的方法?相关的知识,希望对你有一定的参考价值。

短连接风暴

正常的短连接模式就是连接到数据库后,执行很少的 SQL 语句就断开,下次需要的时候再重连。

怎么解决短连接引起数据库连接数暴涨的问题?

  1. 先处理掉那些占着连接但是不工作的线程。怎么做呢?show processlist, 踢掉显示为sleep的线程,但是这样也会误杀执行事务的线程,使用命令select * from information_schema.innodb_trx; 进一步过滤掉trx_mysql_thread_id 的事务。 服务端终止连接的命令是 kill connection + id

  2. 减少连接过程的消耗。让数据库跳过权限验证阶段,方法是重启数据库时,启动命令带上 --skip-grant-tables。 风险很高。

慢查询性能问题

索引没有设置好

线上因为索引没有设置好的花,MySQL5.6后支持 online DDL了,那么直接alter table创建索引。

如果有数据库设置了主备,一般是现在备库执行DDL。 流程是这样

  1. 备库执行 set sql_log_bin=off不写binlog, 执行DDL加上索引
  2. 执行主备切换
  3. 在原来的主库上执行set_sql_log_bin=off, 执行DDL加上索引。

实际应该考虑使用gh-ost这样的工具来执行。但如果需要紧急处理,上面的流程是最稳妥的。

SQL语句没写好

MySQL5.7之后,可以通过query_rewrite重写有问题的语句

mysql> insert into query_rewrite.rewrite_rules(pattern, replacement, pattern_database) values ("select * from t where id + 1 = ?", "select * from t where id = ? - 1", "db1");

call query_rewrite.flush_rewrite_rules();

如果MySQL选错了索引,使用force index

QPS 突增

  1. 新上业务导致的问题,直接删除新业务的MySQL用户或者把新业务从数据库白名单去除。
  2. 直接将压力最大的SQL重写为 select 1

以上是关于MySQL有哪些“饮鸩止渴”提高性能的方法?的主要内容,如果未能解决你的问题,请参考以下文章

《Mysql - 在Mysql服务出现瓶颈时,有哪些“饮鸩止渴”提高性能的方法?》

Day886.MySQL的“饮鸩止渴”提高性能的方法 -MySQL实战

面试中常问:mysql数据库做哪些优化也提高mysql性能

Linux上MySQL优化提升性能 哪些可以优化的关闭NUMA特性

提高 ASP.NET 网站性能的方法都有哪些? [关闭]

怎么提高电脑内存的性能及使用效率都有哪些方法