mysql单表过大怎么办 mysql表单的最大数据量

Mysql单表太大,性能受影响求指点这么大的表优化是很痛苦的,看你对数据的用途,如果不经常查询、而是频繁的增加,可以考虑定期(每周或者每日)把表中的数据复制到历史表中,清空工作表的数据,这样插入的效率能大大提高,但是查询的时候需要在两个表中进行查询 。用于频繁插入数据的工作表要尽量少建索引,用于查询的历史表要多建索引 。
如何修复超过1G的MYSQL 数据表 数据表在MYSQL中显示状态是“使用中”方法一:
重启动mysql,简单 , 一般会有效 。
方法二:
运行SQL语句,登陆phpmyadmin,运行如下语句 , 多数可以决绝 。
CHECK TABLE `table1`;
ANALYZE TABLE `table1`;
REPAIR TABLE `table1`;
方法三:
登陆phpmyadmin,首页有个“状态”标签,点击进去服务器选项卡下有个杀死进程的 。
方法四:
使用linux命令解决Mysql数据表一直显示使用中 。以lampp服务器集成包为例,数据库显示“使用中”,操作命令如下:
/opt/lampp/lampp stopmysql
cd /opt/lampp/var/mysql/
/opt/lampp/bin/myisamchk -f miningplants/wp_options.MYI (数据库名、数据表名)
/opt/lampp/lampp startmysql
mysql单库负载过高的处理方式请点击输入图片描述(最多18字)
经常混迹于技术社区,频繁看到这个题目 , 今天干脆在自己博客重复一遍解决办法:
针对mysql , sqlserver等关系型数据库单表数据过大的处理方式
如果不是阿里云的分布式数据库 DRDS 那种多机器集群方案的话: 先考虑表分区 ;然后考虑分表 ;然后考虑分库 。
这个题目是我所经历过的 , 我做的是GPS应用,早期版本就是选用的关系型数据库Sql Server 。当时我选取的方案就是第一种:表分区 。表分区的优势是,如果表结构合理,可以不涉及到程序修改 。也就是说,对程序来讲依然是单表读写的效果!
所有轨迹数据存入到一个巨大的表里 。有多大呢?
最大存储量超过10亿行 。具体数值应该是12亿多点,由于系统设计为只存储30天轨迹,所以线上期间最大存储只到这个数,再后来采用云架构,上云替换成非关系性数据库 , 获得了更高的写入性能和存储压缩能力 。
每日写入量就超过1500万行 。上下班交通高峰时候每秒写入量平均超过500行 。也就是500iops,距离系统设计的压测指标3000还有一大截
这张大型单表设计要点:(一个聚集索引用于写入 , 一个联合索引用于查询,没有主键,使用表分区)
明确主键用途:
真的需要查询单行数据时候才需要主键!
我采用无主键设计,用于避免写入时候浪费维护插入数据的性能 。最早使用聚集的类似自增的id主键,压测写入超过5亿行的时候,写入性能缩减一半
准确适用聚集:
写入的数据在硬盘物理顺序上是追加,而不是插入!
我把时间戳字段设置为聚集索引,用于聚集写入目的设计 。保证硬盘上的物理写入顺序,不浪费性能用于插入数据
职责足够单一:
用于精准索引!
使用时间+设备联合索引,保证这张表只有一个查询用途 。保证系统只有一种查询目的:按照设备号,查询一个时间段的数据 。
精确的表分区:
要求查询时候限定最大量或者最大取值范围!
按天进行表分区,实现大数据量下的高效查询 。这里是本文重点,按照聚集索引进行,可以让目标数据局限在更小的范围进行,虽然单表数据上亿,但是查询基本上只在某一天的的几千万里进行索引查询
每张表会有各自的特点 , 不可生搬硬套,总结下我这张表的特点: