myloader導入更快嗎?並沒有......

来源:https://www.cnblogs.com/greatsql/archive/2023/08/28/17661482.html
-Advertisement-
Play Games

* 0.結論先行 * 1.背景介紹 * 2.測試過程 * 3.結果對比 - 附錄 > myloader還預設禁用binlog了 ## 0. 結論先行 重要結論先說:導入大批量數據時,採用GreatSQL 8.0.32-24中新增並行load data特性是最快的,關於該特性的描述詳見:[Change ...


  • 0.結論先行
  • 1.背景介紹
  • 2.測試過程
  • 3.結果對比
  • 附錄

myloader還預設禁用binlog了

0. 結論先行

重要結論先說:導入大批量數據時,採用GreatSQL 8.0.32-24中新增並行load data特性是最快的,關於該特性的描述詳見:Changes in GreatSQL 8.0.32-24

1. 背景介紹

前幾天我用MySQL官網提供的airportdb庫中的weatherdata表做測試,結論是相比原生快了約5倍。

群里有小伙伴反駁說用myloader更香,於是就有了本次測試。

由於weatherdata表較小,表空間只有228MB,所以我改用sysbench表做測試,該表共600萬行數據,表空間約1.5GB,其他信息如下:

greatsql> show create table myload\G
*************************** 1. row ***************************
       Table: myload
Create Table:CREATE TABLE `myload` (
  `id` int NOT NULL AUTO_INCREMENT,
  `k` int NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `k_2` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=6194244 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

greatsql> show table status like 'myload'\G
*************************** 1. row ***************************
           Name: myload
         Engine: InnoDB
        Version: 10
     Row_format: Dynamic
           Rows: 5930876
 Avg_row_length: 233
    Data_length: 1385168896
Max_data_length: 0
   Index_length: 153894912
      Data_free: 7340032
 Auto_increment: 6194244
    Create_time: 2023-07-08 09:25:02
    Update_time: 2023-07-08 09:25:33
     Check_time: NULL
      Collation: utf8mb4_0900_ai_ci
       Checksum: NULL
 Create_options:
        Comment:

2. 測試過程

本次測試基於GreatSQL 8.0.32-24版本,其他相關信息如下:

# myloader版本
$ myloader --version
myloader0.15.0-1, built against MySQL 5.7.42-46 with SSL support with GZIP

# MySQL Shell版本
 JS > shell.version
Ver 8.0.32 for Linux on x86_64 - for MySQL 8.0.32 (MySQL Community Server (GPL))

預設開啟binlog + 雙1 + redo log + doublewrite buffer:

|binlog_rows_query_log_events |ON|
| innodb_buffer_pool_size | 8589934592|innodb_doublewrite |ON|
|innodb_flush_log_at_trx_commit |1|
|innodb_redo_log_capacity |2147483648|
|sync_binlog |1|

3. 結果對比

下麵是幾個不同導入方式的對比測試結果,每種方式我都測試至少3次,去除噪點數據後取平均值:

工具 耗時(秒) binlog大小(MB) mysqld記憶體增長(MB)
原生load data 62.801741 1091 1536
並行load data(chunk=4MB,併發16線程) 11.81 1091 1522
myloader(dump時chunk=64MB,load時併發16線程) 29.358 2246 1868
myloader(dump時chunk=64MB,load時併發16線程)+ 關binlog 21.426
myloader(預設 + 開binlog) 82.651 2246
myloader(預設 + 關binlog) 62.830
util.importTable(預設,chunk=64MB,併發8線程) 16.0034 1091 1662

從這個測試結果可以看到幾個對比關係:

  1. 原生load data最慢,因為是單線程的,它的耗時是並行load data的5.32倍;
  2. 原生load data的耗時是多線程模式下myloader的2.14倍;
  3. 原生load data的耗時是多線程模式下util.importTable的3.92倍;
  4. 當myloader沒有開啟並行(mydumper備份時要先進行分配)的話,它的耗時是最久的,是並行load data的7倍,是多線程模式下util.importTable的5.16倍;
  5. 當myloader未開啟binlog時(其預設行為,有"作弊"嫌疑),其耗時是並行load data的1.81倍,是多線程模式下util.importTable的1.34倍;
  6. 最後,myloader導入後造成的binlog文件最大,記憶體開銷也最大。

file

綜上,在MySQL 8.0/GreatSQL 8.0.32中,採用myloader導入數據就不再是最優方案了,推薦採用GreatSQL的並行load data,或者MySQL Shell的util.loadDump/util.importTable導入,其本質也是採用並行的思路,導入效率更高,額外的binlog和記憶體開銷也更小。

最後,補充說下,myloader導入時產生的binlog更多,是因為它的導入方式是反覆執行INSERT SQL,在 binlog_rows_query_log_events = ON 時,相比load data方式會產生更多binlog。

附錄

1. myloader多分片方式導出

設置導出時進行分片,每個分片(chunk)10MB

$ mydumper -F 10 -S /data/GreatSQL/mysql.sock -T sbtest.myload -o /tmp/myload

最後的(未壓縮)文件總大小為1.2GB。

2. outfile導出

greatsql> select * into outfile '/tmp/myload.csv' from myload;

很簡單,平平無奇,最後的(未壓縮)文件總大小為1.1GB。

3. util.dumpTables多分片方式導出 設置導出時進行分片,每個分片(chunk)64MB(預設值)

MySQL  localhost  JS > util.dumpTables("sbtest", ["myload"], "/tmp/myload", {threads:16, chunking:true, bytesPerChunk:"67108864"})

最後的(壓縮後)文件總大小為505MB。


Enjoy GreatSQL

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # Git和Gitlab使用 ## 前言 **版本控制概念**:記錄開發文件的時間機器 **分類**:1.本地版本控制系統、2.集中化的版本控制系統CVS、Subversion(SVN)、3.分散式版本控制系統GIT **產品**:github、git、gitlab ## Gitlab部署 **1. ...
  • 很多運維同學都遇到過“磁碟告警”,遇到這種情況就需要去清理磁碟。 這時候,很多同學通過各種途徑、手段、命令找到了占用磁碟比較大的文件,然後大手一揮, sudo rm -rvf xxxxx.log 以為這樣任務就完成了,誰知道,一查詢磁碟使用量還是居高不下,完全沒有釋放。 這是因為在Linux中,如果 ...
  • 進程是正在運行的程式的實例,它可以包含一個或多個線程。我們瞭解了進程的執行方式,包括早期單核處理器上的順序執行以及引入多任務概念實現的偽並行。我們還探討了進程的狀態模型。進程可以處於就緒、運行、阻塞和結束等不同的狀態。就緒狀態表示進程已經準備好運行,但還沒有被調度執行。運行狀態表示進程正在執行。阻塞... ...
  • ![](https://img2023.cnblogs.com/blog/3076680/202308/3076680-20230825164340432-1938857156.png) # 1. 連接 ## 1.1. 笛卡兒積 ### 1.1.1. 交叉連接(cross join) ### 1.1 ...
  • ![file](https://img2023.cnblogs.com/other/2685289/202308/2685289-20230828190238753-1379880889.png) 視頻貢獻者 | 王維饒 視頻製作者 | 聶同學 編輯整理 | Debra Chen > Apache ...
  • ![file](https://img2023.cnblogs.com/other/3195851/202308/3195851-20230828185450336-2138333694.png) > 時隔兩個月, Apache SeaTunnel 終於迎來大版本更新。此次發佈的 2.3.3 版本在 ...
  • 第14屆中國資料庫技術大會的GaussDB“五高兩易”核心技術,給世界一個更優選擇專場,華為GaussDB首席安全架構師郭亮詳細解讀了GaussDB的高安全之密態等值技術。 ...
  • 8月17日,在第14屆中國資料庫技術大會(DTCC2023)上,天翼雲科技有限公司資料庫首席技術官李躍森以《天翼雲TeleDB持續創新之路》為題發表演講,介紹了天翼雲TeleDB資料庫的發展歷程、技術突破以及國產化能力。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...