Mysql大数据表处理方案

本文介绍了在面对大数据表导致查询变慢的问题时,MySQL的三种解决方案:数据表分区、数据库分表(水平分表和垂直分表)以及冷热数据归档。讨论了每种方案的实现方式、优缺点以及适用场景,并提出了根据业务场景选择合适策略的建议。
摘要由CSDN通过智能技术生成

场景:

当我们业务数据库表中的数据越来越多,如果你也和我遇到了以下类似场景,那让我们一起来解决这个问题

  • 数据的插入,查询时长较长
  • 后续业务需求的扩展 在表中新增字段 影响较大
  • 表中的数据并不是所有的都为有效数据  需求只查询时间区间内的

评估表数据体量

我们可以从表容量/磁盘空间/实例容量三方面评估数据体量,接下来让我们分别展开来看看

表容量:

表容量主要从表的记录数、平均长度、增长量、读写量、总大小量进行评估。一般对于OLTP的表,建议单表不要超过2000W行数据量,总大小15G以内。访问量:单表读写量在1600/s以内

查询行数据的方式: 我们一般查询表数据有多少数据时用到的经典sql语句如下:

  • select count(*) from table
  • select count(1) from table 但是当数据量过大的时候,这样的查询就可能会超时,所以我们要换一种查询方式
  1. use 库名
  2. show table status like '表名' ; 或 show table status like '表名'\G ;

上述方法不仅可以查询表的数据,还可以输出表的详细信息 , 加 \G 可以格式化输出。包括表名 存储引擎 版本 行数 每行的字节数等等,大家可以自行试一下哈

磁盘空间

查看指定数据库容量大小

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
order by data_length desc, index_length desc;
复制代码

查询单个库中所有表磁盘占用大小

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql'
order by data_length desc, index_length desc;
复制代码

查询出的结果如下:

建议数据量占磁盘使用率的70%以内。同时,对于一些数据增长较快,可以考虑使用大的慢盘进行数据归档(归档可以参考方案三)

实例容量

MySQL是基于线程的服务模型,因此在一些并发较高的场景下,单实例并不能充分利用服务器的CPU资源,吞吐量反而会卡在mysql层,可以根据业务考虑自己的实例模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值