首页 > 代码库 > 数据库调优分层思想

数据库调优分层思想

数据库调优分层思想

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全表的例子

 

数据库调优分层思想