首页 > 代码库 > 数据库调优分层思想
数据库调优分层思想
数据库调优分层思想
1.调优策略
1)*号的处理(只提取必要字段,减少流量)
最好是用,有用的字段,减少流量。
表结构会改变,增加或者减少某列,如果*号全部查询出来 会造成代码逻辑错误。
2)大SQL(拆分,逐步缩小结果集)
大SQL执行起来非常耗时, where 后面带子句,或者读表联合查询。 或者临时表 暂时存储结果集
3)合理的索引(where子句后面的条件)
4)类型转换(‘’符号的使用)
在进行查询操作的时候把 ‘’带上
5)尽量不要用范围查询,或者缩小检索范围(程序逻辑update)
<,>,like,这样模糊查询,不好,
2.哪些SQL语句需要调优
1)找开发要
2)查看程序日志(接口——后台服务)
3)查看慢查询日志
4)查看统计:最多调用,最占流量,最慢查询(100ms)。。监控系统,
5)show full processlist
3.SQL配置层面
3.1 哪些配置需要关注
Query_cache:mysql自带的功能,查询的缓存, 保存的结果集, 放在缓存里
Max_connection:数据库最大链接数。 可以改动链接数,和业务程序的连接池做对应的关系。
Wait_timeout:数据每八小时检测一次,如果没有链接访问它。它就关闭了。避免这个问题,每八小时链接数据库,保证程序一直访问它
Lock :进程操作,保证另外的进程不对他做改变,所以 一个进程操作它的时候,就先锁起来,等操作完再开放给另外的进程去使用。
如果占用时间长,另外的程序就一直在等待。
解决锁的问题,一条SQL语句不能执行太长, 大SQL分解为小SQL。
4.SQL架构层面
1)主从复制(读写分离)
如果都对一个表进行读写,导致CPU飙升。压力大等。
可以把一份数据库复制到几个数据库,读的时候在从库读,写的时候放在主库。
2)分库分表
3)负载均衡
LV5,F5,nginx
负载均衡 是让压力更均匀的分布在数据库之间
4) 多级缓存
Redis
5.业务层面的思考
1) 表字段拆分
某些列不常用,甚至不用
2)text(适用key-value)
拆分出来,新建一个详情表
方便运维(DDL),便于缓存,提高查询性能
冷数据备份
每年把历史数据导出去一次,缩小检索范围
程序逻辑的处理
Update全表的例子
数据库调优分层思想