日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

如何優化數據導入導出

數據庫實際應用場景中經常需要進行數據導入導出,本文將介紹如何使用數據導入導出工具。

測試環境

本文檔的測試環境要求如下表:

環境

參數

PolarDB-X版本

polarx-kernel_5.4.11-16282307_xcluster-20210805

節點規格

16核64 GB

節點個數

4個

測試用表如下:

CREATE TABLE `sbtest1` (
    `id` int(11) NOT NULL,
    `k` int(11) NOT NULL DEFAULT '0',
    `c` char(120) NOT NULL DEFAULT '',
    `pad` char(60) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `k_1` (`k`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 dbpartition by hash(`id`);

導入導出工具介紹

PolarDB-X常見的數據導出方法有:

  • mysql -e命令行導出數據

  • musqldump工具導出數據

  • select into outfile語句導出數據(默認關閉)

  • Batch Tool工具導出數據(PolarDB-X配套的導入導出工具)

PolarDB-X常見的數據導入方法有:

  • source語句導入數據

  • MySQL命令導入數據

  • 程序導入數據

  • load data語句導入數據

  • Batch Tool工具導入數據(PolarDB-X配套的導入導出工具)

MySQL原生命令使用示例

mysql -e命令可以連接本地或遠程服務器,通過執行SQL語句,例如select方式獲取數據,原始輸出數據以制表符方式分隔,可通過字符串處理改成','分隔,以csv文件方式存儲,方法示例:

mysql -h ip  -P port -u usr -pPassword db_name -N -e "SELECT id,k,c,pad FROM sbtest1;" >/home/data_1000w.txt
## 原始數據以制表符分隔,數據格式:188092293    27267211    59775766593-64673028018-...-09474402685    01705051424-...-54211554755

mysql -h ip  -P port -u usr -pPassword db_name -N -e "SELECT id,k,c,pad FROM sbtest1;" | sed 's/\t/,/g' >/home/data_1000w.csv
## csv文件以逗號分隔,數據格式:188092293,27267211,59775766593-64673028018-...-09474402685,01705051424-...-54211554755

原始數據格式適合load data語句導入數據,使用方法可參考:LOAD DATA 語句,示例如下:

LOAD DATA LOCAL INFILE '/home/data_1000w.txt' INTO TABLE sbtest1;
## LOCAL代表從本地文件導入,local_infile參數必須開啟

csv文件數據適合程序導入,具體方式可查看使用程序進行數據導入

mysqldump工具使用示例

mysqldump工具可以連接到本地或遠程服務器,詳細使用方法請參見使用mysqldump導入導出數據

  • 導出數據示例:

    mysqldump -h ip  -P port -u usr -pPassword --default-character-set=utf8mb4 --net_buffer_length=10240 --no-tablespaces --no-create-db --no-create-info --skip-add-locks --skip-lock-tables --skip-tz-utc --set-charset  --hex-blob db_name [table_name] > /home/dump_1000w.sql
                        

    mysqldump導出數據可能會出現的問題及解決方法,這兩個問題通常是mysql client和mysql server版本不一致導致的。

    1. 問題:mysqldump: Couldn't execute 'SHOW VARIABLES LIKE 'gtid\_mode''

      解決方法:添加--set-gtid-purged=OFF關閉gtid_mode。

    2. 問題:mysqldump: Couldn't execute 'SHOW VARIABLES LIKE 'ndbinfo\_version''

      解決方法:查看mysqldump --version和MySQL版本是否一致,使用和MySQL版本一致的mysql client。

    導出的數據格式是SQL語句方式,以Batch Insert語句為主體,包含多條SQL語句,INSERT INTO `sbtest1` VALUES (...),(...),“net_buffer_length”參數將影響batch size大小。

  • SQL語句格式合適的導入數據方式:

    方法一:souce語句導入數據
    source /home/dump_1000w.sql
    
    方法二:mysql命令導入數據
    mysql -h ip  -P port -u usr -pPassword --default-character-set=utf8mb4 db_name < /home/dump_1000w.sql

Batch Tool工具使用示例

Batch Tool是阿里云內部開發的數據導入導出工具,支持多線程操作。

  • 導出數據:

    ## 導出“默認值=分片數”個文件
    java -jar batch-tool.jar -h ip  -P port -u usr -pPassword -D db_name -o export -t sbtest1 -s ,
    
    ## 導出整合成一個文件
    java -jar batch-tool.jar -h ip  -P port -u usr -pPassword -D db_name -o export -t sbtest1 -s , -F 1
  • 導入數據:

    ## 導入32個文件
    java -jar batch-tool.jar -hpxc-spryb387va****.polarx.singapore.rds.aliyuncs.com  -P3306 -uroot -pPassword -D sysbench_db -o import -t sbtest1 -s , -f "sbtest1_0;sbtest1_1;sbtest1_2;sbtest1_3;sbtest1_4;sbtest1_5;sbtest1_6;sbtest1_7;sbtest1_8;sbtest1_9;sbtest1_10;sbtest1_11;sbtest1_12;sbtest1_13;sbtest1_14;sbtest1_15;sbtest1_16;sbtest1_17;sbtest1_18;sbtest1_19;sbtest1_20;sbtest1_21;sbtest1_22;sbtest1_23;sbtest1_24;sbtest1_25;sbtest1_26;sbtest1_27;sbtest1_28;sbtest1_29;sbtest1_30;sbtest1_31" -np -pro 64 -con 32
    
    ## 導入1個文件
    java -jar batch-tool.jar -h ip  -P port -u usr -p password -D db_name -o import -t sbtest1 -s , -f "sbtest1_0" -np

導出方法對比

測試方法以PolarDB-X導出1000萬行數據為例,數據量大概2GB左右。

方式

數據格式

文件大小

耗時

性能(行/每秒)

性能(MB/S)

mysql -e命令導出原始數據

原始數據格式

1998 MB

33.417s

299248

59.8

mysql -e命令導出csv格式

csv格式

1998 MB

34.126s

293031

58.5

mysqldump工具(net-buffer-length=10KB)

sql語句格式

2064 MB

30.223s

330873

68.3

mysqldump工具(net-buffer-length=200KB)

sql語句格式

2059 MB

32.783s

305036

62.8

batch tool工具文件數=32(分片數)

csv格式

1998 MB

4.715s

2120890

423.7

batch tool工具文件數=1

csv格式

1998 MB

5.568s

1795977

358.8

總結:

  1. mysql -e命令和mysqldump工具原理上主要是單線程操作,性能差別并不明顯。

  2. Batch Tool工具采用多線程方式導出,并發度可設置,能夠極大提高導出性能。

導入方法對比

測試方法以PolarDB-X導入1000萬行數據為例,源數據是上一個測試中導出的數據,數據量大概2 GB左右。

方式

數據格式

耗時

性能(行/每秒)

性能(MB/S)

source語句(net-buffer-length=10KB)

sql語句格式

10m24s

16025

3.2

source語句(net-buffer-length=200KB)

sql語句格式

5m37s

29673

5.9

mysql命令導入(net-buffer-length=10KB)

sql語句格式

10m27s

15948

3.2

mysql命令導入(net-buffer-length=200KB)

sql語句格式

5m38s

29585

5.9

load data語句導入

原始數據格式

4m0s

41666

8.3

程序導入batch-1000thread-1

csv格式

5m40s

29411

5.9

程序導入batch-1000thread-32

csv格式

19s

526315

105.3

batch tool工具文件數=32(分片數)

csv格式

19.836s

504133

100.8

batch tool工具文件數=1

csv格式

10.806s

925411

185.1

總結:

  1. source語句和mysql命令導入方式,都是單線程執行SQL語句導入,實際是Batch Insert語句的運用,Batch size大小會影響導入性能。Batch size和mysqldump導出數據時的net-buffer-length參數有關。建議優化點如下:

    • 推薦將net-buffer-length參數設置大,不超過256 KB,以增大batch size大小,來提高插入性能。

    • 使用第三方工具,例如mysqldump,進行mydumper(備份)和myloader(導入)等,可多線程操作。

  2. load data語句是單線程操作,性能優于mysql命令和source語句。

  3. 程序導入靈活性較好,可自行設置合適的batch size和并發度,可以達到較好性能。推薦batch大小為1000,并發度為16~32。

  4. Batch Tool工具支持多線程導入,且貼合分布式多分片的操作方式,性能優異。

總結

  1. PolarDB-X兼容MySQL運維上常用的數據導入導出方法,但這些方法大多為MySQL單機模式設計,只支持單線程操作,性能上無法充分利用所有分布式資源。

  2. PolarDB-X提供Batch Tool工具,非常貼合分布式場景,在多線程操作下,能夠達到極快的數據導入導出性能。