欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql-Insert插入過(guò)慢的原因記錄和解決方案

 更新時(shí)間:2023年08月30日 15:34:11   作者:胡安民  
這篇文章主要介紹了Mysql-Insert插入過(guò)慢的原因記錄和解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mysql Insert插入過(guò)慢的原因

場(chǎng)景

先來(lái)說(shuō)下業(yè)務(wù)場(chǎng)景, A單位每天下發(fā)全量數(shù)據(jù)5萬(wàn)數(shù)據(jù)左右,我們需要將這5萬(wàn)條數(shù)據(jù)處理到主表中以及日志表中

我們現(xiàn)在的邏輯是,先將數(shù)據(jù)每次100條批量修改或者插入到主表中, 然后我們通過(guò)事件監(jiān)聽(tīng)將每次插入或者修改的動(dòng)作都記錄到日志表中

問(wèn)題: 因?yàn)槲覀儾迦肴罩颈淼臅r(shí)候是每次處理一條這樣就導(dǎo)致了5萬(wàn)條日志數(shù)據(jù),一個(gè)一個(gè)插入非常耗時(shí),抱著能提升一點(diǎn)就提升一點(diǎn)的想法,我們看看插入還能優(yōu)化嗎?

先來(lái)說(shuō)一下: Mysql中單條語(yǔ)句原子性的,所以高并發(fā)情況下不會(huì)有安全性問(wèn)題

說(shuō)說(shuō)插入會(huì)慢的影響因素

  • Mysql插入緩存(bulk_insert_buffer_size 默認(rèn)是8M)
  • 每條數(shù)據(jù)在插入的時(shí)候都要驗(yàn)證是否違反表中的約束條件(主鍵,唯一等)
  • 構(gòu)建新數(shù)據(jù)的索引
  • innodb中,數(shù)據(jù)通常都是先寫(xiě)緩存,再寫(xiě)事務(wù)日志,再寫(xiě)入數(shù)據(jù)文件
  • Mysql 每秒最大支持16384并發(fā) ,但是默認(rèn)只有151可以設(shè)置max_connections數(shù)量
  • 服務(wù)器性能,cpu,硬盤(pán),網(wǎng)絡(luò), 網(wǎng)絡(luò)數(shù)據(jù)傳輸 ,代碼解析
  • 數(shù)據(jù)庫(kù)事務(wù)影響

解決辦法

先設(shè)置mysql的插入緩存bulk_insert_buffer_size=100M,確保一次能插入1000條數(shù)據(jù)

然后使用List方式記錄需要插入的數(shù)據(jù)當(dāng)達(dá)到1000條之后我們批量一次性插入

insert into tablename values('xxx','xxx'),('yyy','yyy'),('zzz','zzz')...... 

然后在清空List ,插入的過(guò)程中我們可以異步,不用等待結(jié)果的返回 ,通過(guò)上面的方案, 插入100萬(wàn)數(shù)據(jù)幾十秒就完事了

為什么要這樣解決呢?

因?yàn)榕坎迦肫鋵?shí)就是訪問(wèn)一次數(shù)據(jù)量告訴數(shù)據(jù)庫(kù)我需要執(zhí)行這1000條的插入,而不是訪問(wèn)1000次數(shù)據(jù)庫(kù)告訴數(shù)據(jù)庫(kù)我要執(zhí)行1條的插入所以使用批量插入大大的縮減客戶端與數(shù)據(jù)庫(kù)之間的連接、關(guān)閉等消耗 , 所以我們?cè)谏厦娴姆桨钢惺褂靡淮翁峤慌繑?shù)據(jù)的更新的語(yǔ)句,那么還有沒(méi)其他的方式呢?

MySQL 的事務(wù)自動(dòng)提交模式默認(rèn)是開(kāi)啟的,其對(duì) MySQL 的性能也有一定得影響。

也就是說(shuō)如果你執(zhí)行1000 條插入語(yǔ)句,MySQL 就會(huì)提交 1000 次事物,這大大影響了插入數(shù)據(jù)的速度。

我們還可以在代碼中,手動(dòng)開(kāi)啟事物也就是相當(dāng)于希望事物內(nèi)執(zhí)行的語(yǔ)句要作為一個(gè)“不可分割”的整體去執(zhí)行的任務(wù)當(dāng)所有任務(wù)完畢后在提交事物,當(dāng)然這樣是沒(méi)有批量插入快的但是也能節(jié)約不少時(shí)間的

MySQL數(shù)據(jù)庫(kù)Insert語(yǔ)句慢SQL處理

問(wèn)題描述

insert into …普通的插入語(yǔ)句,經(jīng)常出現(xiàn)耗時(shí)2s以上

數(shù)據(jù)狀態(tài)

1.表數(shù)據(jù)量大,每天產(chǎn)生200萬(wàn)條數(shù)據(jù)

2.高并發(fā)插入

問(wèn)題解決

1.由于表中數(shù)據(jù)量龐大,建議數(shù)據(jù)歸檔處理,冷熱處理

2.表中有過(guò)多索引,當(dāng)數(shù)據(jù)insert時(shí),索引會(huì)重排產(chǎn)生太多的io操作。導(dǎo)致緩慢,有必然要的只保留主鍵。

3.表的數(shù)據(jù)庫(kù)引擎,默認(rèn)InnerDB,若數(shù)據(jù)不重要,可以使用MyISAM

4.注意字段text使用,內(nèi)存過(guò)大會(huì)引起表膨脹,影響插入和查詢效率

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL之join查詢優(yōu)化方式

    MySQL之join查詢優(yōu)化方式

    這篇文章主要介紹了MySQL之join查詢優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Mysql8.0.22解壓版安裝教程(小白專用)

    Mysql8.0.22解壓版安裝教程(小白專用)

    這篇文章主要介紹了Mysql8.0.22解壓版安裝教程(小白專用),文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 關(guān)于SqlServer中datediff用法

    關(guān)于SqlServer中datediff用法

    datediff是SQL SERVER里面的用法,ORACLE沒(méi)有,主要作用是返回兩個(gè)日期之間的時(shí)間間隔,本文通過(guò)實(shí)例代碼給大家詳細(xì)講解,對(duì)datediff用法感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • MySQL 億級(jí)數(shù)據(jù)導(dǎo)入導(dǎo)出及遷移筆記

    MySQL 億級(jí)數(shù)據(jù)導(dǎo)入導(dǎo)出及遷移筆記

    上周被安排做了一個(gè)MySQL億級(jí)數(shù)據(jù)的遷移,特此記錄一下,導(dǎo)入和導(dǎo)出是兩個(gè)過(guò)程,本文想詳細(xì)的介紹一下具體的使用,感興趣的小伙伴們可以參考一下
    2021-06-06
  • MySQL對(duì)limit查詢語(yǔ)句的優(yōu)化方法

    MySQL對(duì)limit查詢語(yǔ)句的優(yōu)化方法

    這篇文章主要介紹了MySQL對(duì)limit查詢語(yǔ)句的優(yōu)化方法,分別講解了offset參數(shù)比較小和offset參數(shù)比較大的時(shí)候,如何優(yōu)化查詢語(yǔ)句,需要的朋友可以參考下
    2014-07-07
  • mysql獲取字符串長(zhǎng)度函數(shù)(CHAR_LENGTH)

    mysql獲取字符串長(zhǎng)度函數(shù)(CHAR_LENGTH)

    本文介紹一下關(guān)于mysql獲取字符串長(zhǎng)度的方法,希望此教程對(duì)各位同學(xué)會(huì)有所幫助哦。
    2013-11-11
  • 如何解決安裝MySQL5.0后出現(xiàn)1607異常

    如何解決安裝MySQL5.0后出現(xiàn)1607異常

    小伙們?cè)诎惭bmysql5.0的時(shí)候是不是遇到過(guò)1607異常問(wèn)題,大家都是怎么解決的呢?下面小編跟大家分享我是如何解決安裝MySQL5.0后出現(xiàn)1607異常的,需要的朋友可以參考下
    2015-10-10
  • mysql解決時(shí)區(qū)相關(guān)問(wèn)題

    mysql解決時(shí)區(qū)相關(guān)問(wèn)題

    這篇文章主要介紹了mysql如何解決時(shí)區(qū)相關(guān)問(wèn)題,本篇文章將從數(shù)據(jù)庫(kù)參數(shù)入手,逐步介紹時(shí)區(qū)相關(guān)內(nèi)容。感興趣的朋友可以了解下
    2020-08-08
  • MySQL執(zhí)行SQL語(yǔ)句的流程詳解

    MySQL執(zhí)行SQL語(yǔ)句的流程詳解

    這篇文章主要介紹了MySQL執(zhí)行SQL語(yǔ)句的流程詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • MySQL中ON DUPLICATE KEY UPDATE語(yǔ)句的使用

    MySQL中ON DUPLICATE KEY UPDATE語(yǔ)句的使用

    INSERT INTO ... ON DUPLICATE KEY UPDATE?是一個(gè)強(qiáng)大的SQL語(yǔ)句,它結(jié)合了插入新記錄和更新已存在記錄的功能于一體,本文就來(lái)介紹一下MySQL中ON DUPLICATE KEY UPDATE語(yǔ)句的使用,感興趣的可以了解一下
    2024-08-08

最新評(píng)論