日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql大批量数据插入技巧

發(fā)布時間:2023/12/20 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql大批量数据插入技巧 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:https://jingyan.baidu.com/album/95c9d20d61b01dec4f75615a.html?picindex=6
首先我是簡單的寫了一個mysql的循環(huán)插入數(shù)據(jù)的SP,具體如下:

這是插入100W數(shù)據(jù)的過程和結(jié)果,可以看到是換了55min +20S約3320秒(約300rows/s),看到之后我是只崩潰,就在網(wǎng)上查了些提速的方法:

  • 最快的當然是直接 copy 數(shù)據(jù)庫表的數(shù)據(jù)文件(版本和平臺最好要相同或相似);1. 設(shè)置 innodb_flush_log_at_trx_commit = 0 ,相對于 innodb_flush_log_at_trx_commit = 1 可以十分明顯的提升導(dǎo)入速度;2. 使用 load data local infile 提速明顯;3. 修改參數(shù) bulk_insert_buffer_size, 調(diào)大批量插入的緩存;4. 合并多條 insert 為一條: insert into t values(a,b,c), (d,e,f) ,,,5. 手動使用事物;

    而我創(chuàng)建的是Innodb類型的表,分了128個分區(qū)。而我依照以上的方法,設(shè)置如下:

    可以明顯的看到插入百萬數(shù)據(jù)是100S左右,速度提升了33倍之多。
  • 速度是提升了不少,那就加大插入的數(shù)據(jù)量,提升10倍,即插入千萬的數(shù)據(jù)量,具體的SP如下:


    可以看到時間差不多是1200s左右,因為字段加長了,可能也有影響插入的速度。

    為了具體驗證,就按千萬行插入,字段的長度為1000字節(jié),來查看結(jié)果,具體的SP和結(jié)果如下:

    varchar字段

    字段的限制在字段定義的時候有以下規(guī)則: a) 存儲限制 varchar 字段是將實際內(nèi)容單獨存儲在聚簇索引之外,內(nèi)容開頭用1到2個字節(jié)表示實際長度(長度超過255時需要2個字節(jié)),因此最大長度不能超過65535。 b) 編碼長度限制 字符類型若為gbk,每個字符最多占2個字節(jié),最大長度不能超過32766;   字符類型若為utf8,每個字符最多占3個字節(jié),最大長度不能超過21845。   對于英文比較多的論壇 ,使用GBK則每個字符占用2個字節(jié),而使用UTF-8英文卻只占一個字節(jié)。   若定義的時候超過上述限制,則varchar字段會被強行轉(zhuǎn)為text類型,并產(chǎn)生warning。 c) 行長度限制   導(dǎo)致實際應(yīng)用中varchar長度限制的是一個行定義的長度。 MySQL要求一個行的定義長度不能超過65535。若定義的表長度超過這個值,則提示   ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to    change some columns to TEXT or BLOBs。

    再次升級插入的數(shù)據(jù)量,提升10倍,看插入的時間及占用的內(nèi)存,字段的字節(jié)同樣為1000,具體的SP和結(jié)果如下:

    從上圖可以清楚的看到,插入1億條數(shù)據(jù)的時間為5hours +20 min+ 56s=19256s,平均插入的條數(shù)為(5193 rows/s)。根上次插入1千萬條的時間差不多,再看所耗磁盤空間,用了98G的空間,跟上次插入千萬條數(shù)據(jù)時的(26G-17G=9G)也是成線性關(guān)系的。按照本機500G的磁盤空間,存儲1行1K字節(jié)大小的數(shù)據(jù),本機可以存儲理想極限情況下為5億條數(shù)據(jù),保守為4~4.5億左右合適,以防其他的應(yīng)用或者數(shù)據(jù)庫的UNDO,索引空間占用。

    最后再看一次查詢的時間,上次插入百萬數(shù),查詢數(shù)據(jù)量的時間


    因為創(chuàng)建了索引,在查百萬級的數(shù)據(jù)量時,時間是1秒左右,在數(shù)據(jù)量上升到千萬時,查詢1億5百萬時,時間為3Min 30S,再插入1億數(shù)據(jù),查詢數(shù)據(jù)量,時間達到27min 43s,可見,不是線性關(guān)系,是幾何級增加的。

    現(xiàn)在描述集群環(huán)境的測試

    集群:32G內(nèi)存 ,500G硬盤,3臺虛擬機也就是3個節(jié)點:188.188.2.181(主節(jié)點,數(shù)據(jù)節(jié)點和SQL節(jié)點)、188.188.2.182(數(shù)據(jù)節(jié)點和SQL節(jié)點)和188.188.2.183(數(shù)據(jù)節(jié)點和SQL節(jié)點)。/root目錄分區(qū)磁盤空間200G(原先默認的是50G)、插入的數(shù)據(jù)量為8000KW,所占磁盤空間為下圖

    總結(jié)

    以上是生活随笔為你收集整理的mysql大批量数据插入技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。