国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

mysql 批量數(shù)據(jù)插入很慢(kettle 輸入輸出組件) 性能優(yōu)化辦法

這篇具有很好參考價(jià)值的文章主要介紹了mysql 批量數(shù)據(jù)插入很慢(kettle 輸入輸出組件) 性能優(yōu)化辦法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

背景
最近在做數(shù)倉(cāng)重構(gòu)項(xiàng)目,遇到一些性能瓶頸,這里記錄一下解決辦法。

隨著業(yè)務(wù)數(shù)據(jù)每天都在增加,幾年前開發(fā)的etl任務(wù)開始跑不動(dòng)了。大表一般是通過增量的方式插入,但是修復(fù)bug 或者每月/季度跑一次的情況 需要跑全量,原來的etl任務(wù)可能需要跑幾個(gè)小時(shí),甚至出現(xiàn)超時(shí)失敗的情況。因此需要優(yōu)化,下面介紹一些優(yōu)化方法。(項(xiàng)目是用kettle做的,如果使用其他開發(fā)工具,也可以參考下面的思路)

1、配置數(shù)據(jù)庫(kù)連接參數(shù)
2、去掉臨時(shí)表 DDL的primary key
3、調(diào)整輸出組件的數(shù)量
4、暫時(shí)關(guān)閉索引

優(yōu)化方法

1、配置數(shù)據(jù)庫(kù)連接參數(shù)
defaultFetchSize:5000
useCursorFetch : true 相當(dāng)于告訴數(shù)據(jù)庫(kù),分批讀取數(shù)據(jù),每次打包5000條回來
rewriteBatchedStatements : true 插入數(shù)據(jù)的時(shí)候,批量插入
useServerPrepStmts : true 啟動(dòng)預(yù)編譯
useCompression : true 客戶端跟服務(wù)器之間的數(shù)據(jù)壓縮傳輸

以kettle為例,配置方法如下:
kettle更新數(shù)據(jù)慢怎么辦,大數(shù)據(jù),mysql,數(shù)據(jù)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)
測(cè)試結(jié)果:
配置參數(shù)前:kettle更新數(shù)據(jù)慢怎么辦,大數(shù)據(jù),mysql,數(shù)據(jù)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)
配置參數(shù)后:
kettle更新數(shù)據(jù)慢怎么辦,大數(shù)據(jù),mysql,數(shù)據(jù)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)
性能提升了80倍!

2、去掉DDL中的 primary key
在 etl 的過程中會(huì)用中間表來存放一些臨時(shí)數(shù)據(jù),這些中間表可以去掉 ddl中的 primary key,通過邏輯來保證唯一性,只在結(jié)果表中使用primary key。primary key會(huì)檢查相關(guān)字段是否重復(fù),從而降低插入速度。(下面的案例 讀寫字段多,且表輸入sql很復(fù)雜,所以插入很慢)

測(cè)試結(jié)果如下:
kettle更新數(shù)據(jù)慢怎么辦,大數(shù)據(jù),mysql,數(shù)據(jù)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)
去掉目標(biāo)表primary key 后
kettle更新數(shù)據(jù)慢怎么辦,大數(shù)據(jù),mysql,數(shù)據(jù)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)
性能提升了20倍!

3、調(diào)整 輸出組件數(shù)量
如果輸出組件還是慢,可以復(fù)制多個(gè)輸出。具體操作:輸出組件 右鍵-改變開始復(fù)制的數(shù)量
kettle更新數(shù)據(jù)慢怎么辦,大數(shù)據(jù),mysql,數(shù)據(jù)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)

4、暫時(shí)關(guān)閉索引
維護(hù)索引數(shù)據(jù)需要大量額外的開銷,因此全量數(shù)據(jù)插入前,可以先關(guān)掉索引,插入完畢再打開索引。
ALTER TABLE table_name DISABLE KEYS;
ALTER TABLE table_name ENABLE KEYS;
效果對(duì)比如下:
kettle更新數(shù)據(jù)慢怎么辦,大數(shù)據(jù),mysql,數(shù)據(jù)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)
kettle更新數(shù)據(jù)慢怎么辦,大數(shù)據(jù),mysql,數(shù)據(jù)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)
性能提高了4倍!文章來源地址http://www.zghlxwxcb.cn/news/detail-799256.html

到了這里,關(guān)于mysql 批量數(shù)據(jù)插入很慢(kettle 輸入輸出組件) 性能優(yōu)化辦法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Mysql 實(shí)現(xiàn)批量插入對(duì)已存在數(shù)據(jù)忽略或更新

    Mysql 實(shí)現(xiàn)批量插入對(duì)已存在數(shù)據(jù)忽略或更新

    對(duì)已存在的數(shù)據(jù)進(jìn)行 忽略/更新 ,需要唯一索引/主鍵。 唯一索引可為多個(gè)字段的聯(lián)合索引,比如根據(jù)我提供的sql中,我需要``name + age`不重復(fù),則可把這2個(gè)字段聯(lián)合創(chuàng)建為唯一索引 創(chuàng)建聯(lián)合唯一索引的sql 批量插入對(duì)已存在數(shù)據(jù)忽略 批量插入對(duì)已存在數(shù)據(jù)更新 筆者這里只舉

    2024年02月15日
    瀏覽(29)
  • MySQL——插入加鎖/唯一索引插入死鎖/批量插入效率

    MySQL——插入加鎖/唯一索引插入死鎖/批量插入效率

    本篇主要介紹MySQL跟加鎖相關(guān)的一些概念、MySQL執(zhí)行插入Insert時(shí)的加鎖過程、唯一索引下批量插入可能導(dǎo)致的死鎖情況,以及分別從業(yè)務(wù)角度和MySQL配置角度介紹提升批量插入的效率的方法; 在介紹MySQL執(zhí)行插入的加鎖過程之前,先復(fù)習(xí)下幾種跟鎖相關(guān)的概念; 快照讀 InnoDB 利

    2024年02月12日
    瀏覽(19)
  • mysql 批量插入BulkCopy

    mysql 批量插入BulkCopy

    一、新建項(xiàng)目:SqlSugarDemo 二、連接串未添加AllowLoadLocalInfile=true 中文提示 : BulkCopy MySql連接字符串需要添加 AllowLoadLocalInfile=true; 添加后如果還不行Mysql數(shù)據(jù)庫(kù)執(zhí)行一下 SET GLOBAL local_infile=1? English Message : connection string add : AllowLoadLocalInfile=true ?三、Startup.cs HomeController.cs

    2024年02月12日
    瀏覽(15)
  • MySQL批量插入技巧

    MySQL批量插入技巧

    關(guān)于MySQL批量插入的一些問題 MySQL 一直是我們互聯(lián)網(wǎng)行業(yè)比較常用的數(shù)據(jù),當(dāng)我們使用 半ORM框架 進(jìn)行 MySQL 大批量插入操作時(shí),你是否考慮過這些問題: 進(jìn)行大數(shù)據(jù)量插入時(shí),是否需要進(jìn)行分批次插入,一次插入多少合適?有什么判斷依據(jù)? 使用 foreach 進(jìn)行大數(shù)據(jù)量的插入存

    2024年02月03日
    瀏覽(19)
  • mysql批量插入insert語(yǔ)句

    在MySQL中批量插入數(shù)據(jù)有幾種方法,下面我將介紹其中兩種常用的方法: 這是一種簡(jiǎn)單的方式,可以一次性插入多個(gè)值。以下是一個(gè)示例: 在上面的示例中,你需要替換your_table_name為你的表名,列名和相應(yīng)的值。你可以一次性插入多行數(shù)據(jù)。 另一種批量插入數(shù)據(jù)的方法是使

    2024年02月06日
    瀏覽(37)
  • MySQL - 批量插入唯一索引沖突避免辦法

    我們?cè)谶M(jìn)行大批量的數(shù)據(jù)插入時(shí),遇到唯一索引沖突是經(jīng)常的事,報(bào)錯(cuò)如下: 在MySQL中有4種方法可以避免唯一索引沖突 (一)導(dǎo)入差異數(shù)據(jù),忽略重復(fù)數(shù)據(jù),IGNORE INTO的使用 (二)導(dǎo)入并覆蓋重復(fù)數(shù)據(jù),REPLACE INTO 的使用 (三)導(dǎo)入保留重復(fù)數(shù)據(jù)未指定字段,INSERT INTO ON DU

    2024年02月01日
    瀏覽(25)
  • MYSQL批量插入并發(fā)場(chǎng)景下的DEADLOCK

    MYSQL批量插入并發(fā)場(chǎng)景下的DEADLOCK

    公元2023-10-12(周四)上午,組內(nèi)的亞梅反饋,用戶生成標(biāo)簽報(bào)死鎖異常 ? ? 查到當(dāng)時(shí)報(bào)錯(cuò)的日志 ? 具體異常信息如下 ? 查看發(fā)生Deadlock的代碼現(xiàn)場(chǎng)。 代碼如下: ? 觀察代碼,大致邏輯是,先根據(jù)用戶id查詢出所有標(biāo)簽信息,計(jì)算出來需要新增的用戶標(biāo)簽,批量入庫(kù)。其中,

    2024年02月08日
    瀏覽(14)
  • mybatis批量插入數(shù)據(jù)list超過一定長(zhǎng)度時(shí)報(bào)錯(cuò)的解決辦法(批量插入數(shù)據(jù),數(shù)據(jù)過多時(shí)報(bào)錯(cuò)解決和批量修改報(bào)錯(cuò)

    在使用MyBatis進(jìn)行批量新增時(shí),如果數(shù)據(jù)量較大,可以考慮分批次插入以減少數(shù)據(jù)庫(kù)的負(fù)載壓力。這里提供一種基于MyBatis的分批次插入的方法: 創(chuàng)建一個(gè)新的Mapper XML文件(例如:BatchInsertMapper.xml)來定義批量插入的SQL語(yǔ)句。在該XML文件中,添加如下內(nèi)容: ? 請(qǐng)將上述代碼中

    2024年02月16日
    瀏覽(29)
  • java實(shí)現(xiàn)批量插入數(shù)據(jù)

    日常工作或者學(xué)習(xí)中,可能會(huì)遇到批量插入數(shù)據(jù)的需求,一般情況下數(shù)據(jù)量少的時(shí)候,我們會(huì)直接調(diào)用批量接口插入數(shù)據(jù)即可,當(dāng)數(shù)據(jù)量特別大時(shí),可能由于數(shù)據(jù)庫(kù)限制,插入的數(shù)據(jù)最多不能超過100條(假如限制100條),就算是數(shù)據(jù)庫(kù)支持一次性插入千條也會(huì)耗內(nèi)存,如果使用

    2024年02月11日
    瀏覽(21)
  • java 批量插入數(shù)據(jù)

    批量插入數(shù)據(jù),常見的使用mybatis foreach 插入的方式,原始的方式和批處理 xml mapper: 對(duì)于數(shù)據(jù)量不是很大的,基本夠用。如果同步數(shù)據(jù)特別慢,再考慮其它的方式?;蛘咄砩狭璩吭偻綌?shù)據(jù)。 批量插入 數(shù)據(jù)庫(kù)連接: 原始的方法寫起來麻煩些。 MybatisGeneralBatchUtils? SpringUtil?

    2024年02月11日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包