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服務器版本的也收費很貴的,有公司用到,每年要給微軟交幾萬塊錢,但幾乎沒有技術支持的
