首先MYSQL优化是一个很宽广的一个话题,没有具体场景很难有一个统一的优化方法,这里只能给出一个大概的优化方向,当数据库产生性能问题时候,我们先要知道从哪里开始入手分析,主要是收集什么数据和怎样分析数据。
定一个调优的目标
从客户的角度来看,就是系统慢了,数据查询响应超过了用户的忍耐性,所以需要优化了。从IT的角度来看,我们得分析平均响应时间是多少,看资源的使用率、延时、吞吐、要从你的业务量来量化这个平均响应时间,假如现在响应时间为10ms,通过专家判断目前业务量最多5ms的话,那么我们的优化的目标就是朝着5ms以下去努力。
MYSQL如何执行优化和查询
衡量数据库指标是响应时间,所以我们的目的就是降低响应时间。简单说下MYSQL执行优化查询的步骤:我们的应用APP发送SQL语句到数据库服务器。
MYSQL服务器如果启动了QueryCahce,那么它检查QueryCahce,如果命中,则从缓存中返回结果集,否则继续下一步。
MYSQL Parser负责解析SQL,MYSQL优化器则生成执行计划。
MYSQL查询引擎处理执行执行计划。
所以我们进行性能优化实际上要对上述4个步骤进行部分或者全部优化,降低每个环节的响应时间,对于优化,正确的方法,我们首先需要获取每个环节的时间开销,获取开销方法很多,最简单可以在应用中记录开始和结束时间日志,然后再进行分析
例如:对于客户端来说,发送SQL语句开销一般很小,假如第一步就发现时间很长,那么可能是网络响应缓慢,可以考虑使用连接池进行加速,或者一次发送多个SQL语句,能批量Insert的尽量使用批处理操作。
如果是执行计划查询慢,那么可以针对SQL进行分析,条件是否走索引,是否全表扫描。如果数据超过100万,可以考虑分表处理等等。
如果SQL没有问题,可以考虑I/O、cpu、内存资源的使用率情况,如果I/O过高,CPU处于高运转状态,那么还得分析进程情况等等。
最后
我们需要尽量获取关键环节的指标数据,因为它很重要,有助于我们特定场景下进行性能优化。要从根本上去解决性能问题,还得从我们的系统架构和物理架构出发,分析是否合理,是否灵活应对业务量的发展。
以上只是一些经验之谈,更多MYSQL分享,请关注头条号!