Mysql 亿级数据量 慢SQL及数据库性能优化实践方案

一、msysql 慢SQL 参数配置

long_query_time:5S ,执行时间超过5秒 就记录慢SQL 日志。

熟悉MySQL 执行计划参数说明。

二、业务代码中常见慢SQL类型及应对方案

2.1 嵌套查询,多层嵌套中产生的临时表无法走索引优化SQL 效率低

方案:消除嵌套

2.2 多表联合查询,当联合查询中主表数据量达千万级时,联表消耗大。

方案:单表查询,内存中联合;先过滤再联合

2.3 百万以上大数量 COUNT 和 SUM 函数耗时随数据量线性增长。

方案:按常用统计维度进行数据预汇总,全量数据使用汇总表,增量数据实时计算。

2.4、Where 子查询条件 过多,每个子条件 都带 IF 判断语句,查询条件排列组合,不可能全都命中索引。

方案:从客户端限制查询条件的必要性 和 顺序性,按mysql 索引左匹配原则,设置必传过滤条件;SQL 语句的 Where 条件匹配联合索引。

2.5 Insert 和 Update语句 不走索引,导致锁定区间(lock range),而不是锁定指定记录,导致事务串行等待。

方案:Update 按主键、唯一索引、索引更新。

三、通过优化数据库及表结构提升SQL执行性能

3.1 索引特性:提升寻址效率、占用存储空间、唯一索引对Insert 和Update 多一次重复判断。

3.2 分区特性:按分区规则 物理层独立文件存储数据,分区内查询数据量小效率高,跨分区执行效率低。分区对查询友好,对变更不友好,频繁变更会涉及数据物理地址迁移,易造成磁盘碎片。推荐已时间做分区字段,历史分区数据不变更。

3.3 分表特性:单表数据量小,适合客户数据分布均匀的系统。不能解决有超级大客户存在的数据倾斜问题。

3.4 分库特性:单机 变 集群,利用资源横向扩容能力。

3.5 数据仓库:数据分层、读写分离,分布式计算;将具有大数据属性的数据处理任务交给 Hbase 、ClickHouse、高斯等数据库。

3.6 用于统计分析的表设计成融合字段的宽表,一张表包含所有统计查询字段 ,对于任何数据库而言,单表分析性能都优于多表联合。

四、通过提升服务器硬件能力优化SQL执行效率

3.1 增加CPU核心数

目的:提升sum、count 计算型SQL 执行能力

3.2 增加内存大小

目的:扩大缓存空间大小,增加缓存命中率,降低回原表查询几率,提升速度。

3.3 普通硬盘存储介质切换为SSD高IO存储介质

目的:提升数据库读写的物理速度,当前 SSD 读写速度是普通磁盘的10倍左右。

你可能感兴趣的:(数据库,mysql,hive,hbase,数据仓库)