mysql数据库表上百万记录优化思路杂谈

mysql数据库表上百万记录优化思路杂谈

我的mysql数据库表上百万记录,插入数据的时候超慢,插入一笔都差不多将近1秒钟了

有没有做索引?
数据量大了一般要做分区分表处理的,实时性要求高的一般要做缓存或者数据总线分层处理的

有分10个库,每个库100个表

是不是上面索引太多了,
插入的时候会重建索引

有可能,索引需要用于分表分库

优化半天没啥效果,减少了几个索引还是平均插入一笔数据需要0.35秒

那太慢了,数据库操作基本都要毫秒级的才行

数据库也调整了,事务也调整了
插入一笔都要0.013秒最少,现在同步插数据库搞不定了。

看了一下网上分析,最快正常一笔插入只需要:0.00109秒,事务插入只需要:0.00015秒
不过他插入的数据很简单,测试的数据量只有50万。
INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0);

他这数据量才50万太少了
实际中很多数据量都达到千万级的,实际中的数据都比较多的,有些文章内容很多的

我的数据量少的时候,每笔也只能达到0.003秒一笔
还是差好远,10倍,可能我插入的数据比较多,加上有一个键,我已经把另外3个不必要的键先删掉。

你用的是不是ssd硬盘?ssd硬盘比机械硬盘快很多倍

不是,4核16G,一共放了十几个数据库在里面
SSD硬盘太贵了

很多服务器还是机械硬盘,但linode服务器大部分是ssd硬盘

Linode更贵

你写入的时候可以用ssd硬盘啊
备份的用机械盘

可能需要升级硬件
多个服务器一起搞

要么你就临时写到内存里面,用redis,然后定时保存到硬盘上
机械盘你怎么优化都不行的
瓶颈在那里
我之前还以为你是用ssd硬盘的

那估计redis会撑爆

mongodb也是大部分写内存的啊

现在瓶颈在写数据库,

有专用的内存数据库服务器,也是比较贵

就是要吧区块链展开到关系型数据库,好查询

这个跟业务本身没多少关系的

我现在数据库都放在ssd硬盘里的,包括我的笔记本电脑mysql也是装在c盘的ssd硬盘里的
你可以测试下,估计你放到ssd硬盘就提升10倍的执行速度了
阿里云和腾讯云都有专门的数据库服务可以买

-----------
数据库光靠调参数,以经提升到最快0.007秒多一笔插入的速度了
看来还是大数据技术比较重要

调整了那些参数提升这么多?

调了很多参数,mysql、springboot、shardingsphere、druid

mysql主要调了那些参数?

| innodb_buffer_pool_size
| max_allowed_packet
| innodb_log_file_size
| innodb_log_buffer_size
| max_connections
| innodb_flush_log_at_trx_commit
| sync_binlog
| max_connections
这些调了这些

那也没多少参数,要配合代码做调整?

它里面参数很多
代码参数也要调整

那就比较难搞了

我感觉真正的问题还没有找到
我看网上有个人说,一秒钟可以写入1W(一般硬盘),SDD硬盘可以写入2W
我现在一秒钟只能写入一百多笔

那应该还有很大优化空间

应该可以提升100倍
由于现在确定无法使用事务及批量插入,所以估计要减少10倍,最多只能提升10倍。如果增加CPU和内存就不知道了。
换ssd硬盘也可以提升很多倍

亿级数据量的话基本都不用mysql解决方案了,再怎么优化都有瓶颈的
上千万级后瓶颈就越来越明显了,想加个字段,重建个索引都很困难的,要停掉读写服务才能搞,数据库异常修复也是漫长的等待


数据库调的差不多了
它反正也不卡,数据库后台的连接也用的不多,有好几个程序再往里面同时插入数据,如果把其他几个程序关掉,还能提升2倍的速度,应该也差不多了
彻底解决问题只能从架构来搞了

虽然是分表分库分了几十个库,但是这些数据库其实是在同台物理服务器里面的
现在最快每笔0.007秒
如果把其他应用都关闭,插入一笔应该是到0.003秒
可能需要评估一下如何加入Hadoop来进行存储及处理区块链的数据

据说现在tidb很火,可以试一下
(一)分布式数据库tidb-简介
https://www.cnblogs.com/hang-on/p/11484828.html
TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。

=================

云数据库MySQL-关系型数据库-MySQL源码优化版-产品详情-阿里云
https://www.aliyun.com/product/rds/mysql

云数据库HBase Serverless 1元1年试用
https://www.aliyun.com/database/hbaseserverless?spm=5176.7920929.1290475.12.17c142f8fjFV7V&aly_as=d7xbrMl94

区块链大数据的感觉你应该用hodoop HBase 这些解决方案,不适合用mysql的解决方案了
hodoop部署起来还是比较麻烦的,不过现在比较成熟了

阿里云新品发布会第79期:RDS专属主机组和ECS专有宿主机联合发布会-直播-云栖社区-阿里云
https://yq.aliyun.com/live/1858?spm=5176.7920929.1290475.5.17c142f8fjFV7V&aly_as=wy8ZpFeGm
看这个视频介绍 mysql 8.0好像改进了很多,可以快速动态加列那些

alert table 不就可以动态加列了吗

mysql8.0之前版本 数量量大的时候很慢,经常会失败的
加这个要锁表的
你可以试下有几千万条数据还持续在读写操作的,加字段经常失败的

我用pgsql

需要停掉读写服务才能搞,需要的时间也比较多

我不停读写服务直接加

pgsql底层都一样的
版本是多少的,是不是在mysql8.0基础上改的?

最新版

我用过性能最好的应该是mssql
mysql pgsql这类免费的还是差了一点。

腾讯用的mysql都是自己改过的,阿里也是改过的
最好的还是Oracle吧,太贵了,mssql服务器版本的也收费很贵的,有公司用到,每年要给微软交几万块钱,但几乎没有技术支持的

 

posted @ 2020-03-29 01:00  大自然的流风  阅读(1600)  评论(0编辑  收藏  举报