课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据库的架构开发是每一位软件开发程序员在开发软件的时候都会用到的一个互联网编程开发技术,而本文我们就简单来了解和学习一下,数据库调优都有哪些常用方法。
1、总是先要发现待调优的sql语句,这块可以通过newrelic,或zabbix或cat组件来发现,比如通过配置把这些组件连接到对应的数据库服务器上,如果出现超过阈值的慢sql,或发邮件告警。如果再不济,可以直接说,把mysql数据库配置到linux服务器上,运维人员做来配置,所以一旦出现运行时间超过10秒(或其他配置值)的sql语句,我会收到告警邮件。
2、发现慢sql以后,先用执行计划(sqlexplain)去分析下该sql语句耗时主要耗在哪块?一般耗时长的点会有,没建索引或没走索引,大表关联导致耗时长,或长sql语句里,同一个sql块被之行多次。当然还有其他可能会费时间的点,但上述点经常会遇到,也好准备。
通过执行计划分析到慢sql的原因后,就可以针对性地说解决方案。可以是建索引,但这里要注意,被建索引的表规模至少十万级,而被建索引的字段应当重复率低,否则索引建了白建,这些原因自己查,但我在面试求职者时,真听说过为几千条表规模建索引,以及为性别字段建索引的说辞。
3、以上是单机版的调优手段,说好这块还可以说redis缓存调优,这块该怎么说呢?先准备个业务点,比如发订单,在这过程中会多次访问用户表,此时一次访问时,就可以把数据放入缓存,然后准备下放入缓存用户数据的结构(无非是list或hash型),然后准备下java访问redis的api,应该是用Jedis或RedisTemplate。
在此基础上,可以说下解决过redis的缓存穿透问题,无非是缓存空数据或不存在的数据,同时可以说下,为了避免缓存的数据一直存在于内存,所以需要设置缓存数据的超时时间。
4、如果再想往深了说,可以说引入了mycat分库分表组件。这块基本的该怎么说呢?有张千万级别(至少百万级别)的大表,比如订单流水表,通过配置mycat参数,按id取模的方式,把它们分散到5个表结构一样的字表里,比如id%5是1分到1号子表,依次类推。
用了mycat前,需要排查针对该表的所有sql语句,即所有sql语句都要包含分库字段,比如id,而且不能有针对全表的操作,比如groupby等,如果遇到全表操作,需要改写,或用java业务实现。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。