1.1.1 服务器
CPU | Kunpeng-920 |
Architecture | aarch64 |
On-line CPU(s) list | 0-7 |
CPU主频 | 2600MHz |
1.1.2 操作系统
1.NAME="openEuler"2.VERSION="20.03 (LTS-SP2)"3.ID="openEuler"4.VERSION_ID="20.03"5.PRETTY_NAME="openEuler 20.03 (LTS-SP2)"6.ANSI_COLOR="0;31"
1.1.3 系统性能
以下是unixbench跑分,供对比参考
1.------------------------------------------------------------------------2.Benchmark Run: Wed Dec 07 2022 15:48:16 - 15:57:143.8 CPUs in system; running 1 parallel copy of tests4.5.Dhrystone 2 using register variables 40999324.8 lps (10.0 s, 2 samples)6.Double-Precision Whetstone 4314.8 MWIPS (9.3 s, 2 samples)7.Execl Throughput 3762.5 lps (29.8 s, 1 samples)8.File Copy 1024 bufsize 2000 maxblocks 685100.0 KBps (30.0 s, 1 samples)9.File Copy 256 bufsize 500 maxblocks 189282.0 KBps (30.0 s, 1 samples)10.File Copy 4096 bufsize 8000 maxblocks 1992147.0 KBps (30.0 s, 1 samples)11.Pipe Throughput 1231178.1 lps (10.0 s, 2 samples)12.Pipe-based Context Switching 105636.0 lps (10.0 s, 2 samples)13.Process Creation 8963.6 lps (30.0 s, 1 samples)14.Shell Scripts (1 concurrent) 7087.6 lpm (60.0 s, 1 samples)15.Shell Scripts (8 concurrent) 3055.4 lpm (60.0 s, 1 samples)16.System Call Overhead 907956.1 lps (10.0 s, 2 samples)17.18.System Benchmarks Index Values BASELINE RESULT INDEX19.Dhrystone 2 using register variables 116700.0 40999324.8 3513.220.Double-Precision Whetstone 55.0 4314.8 784.521.Execl Throughput 43.0 3762.5 875.022.File Copy 1024 bufsize 2000 maxblocks 3960.0 685100.0 1730.123.File Copy 256 bufsize 500 maxblocks 1655.0 189282.0 1143.724.File Copy 4096 bufsize 8000 maxblocks 5800.0 1992147.0 3434.725.Pipe Throughput 12440.0 1231178.1 989.726.Pipe-based Context Switching 4000.0 105636.0 264.127.Process Creation 126.0 8963.6 711.428.Shell Scripts (1 concurrent) 42.4 7087.6 1671.629.Shell Scripts (8 concurrent) 6.0 3055.4 5092.430.System Call Overhead 15000.0 907956.1 605.331. ========32.System Benchmarks Index Score 1258.033.34.------------------------------------------------------------------------35.Benchmark Run: Wed Dec 07 2022 15:57:14 - 16:06:1836.8 CPUs in system; running 16 parallel copies of tests37.38.Dhrystone 2 using register variables 326630138.1 lps (10.0 s, 2 samples)39.Double-Precision Whetstone 35757.3 MWIPS (8.7 s, 2 samples)40.Execl Throughput 23047.5 lps (29.7 s, 1 samples)41.File Copy 1024 bufsize 2000 maxblocks 525702.0 KBps (30.0 s, 1 samples)42.File Copy 256 bufsize 500 maxblocks 139688.0 KBps (30.0 s, 1 samples)43.File Copy 4096 bufsize 8000 maxblocks 1834232.0 KBps (30.0 s, 1 samples)44.Pipe Throughput 9754452.8 lps (10.0 s, 2 samples)45.Pipe-based Context Switching 1181849.8 lps (10.0 s, 2 samples)46.Process Creation 42295.7 lps (30.0 s, 1 samples)47.Shell Scripts (1 concurrent) 32399.6 lpm (60.0 s, 1 samples)48.Shell Scripts (8 concurrent) 4529.9 lpm (60.1 s, 1 samples)49.System Call Overhead 3386402.8 lps (10.0 s, 2 samples)50.51.System Benchmarks Index Values BASELINE RESULT INDEX52.Dhrystone 2 using register variables 116700.0 326630138.1 27988.953.Double-Precision Whetstone 55.0 35757.3 6501.354.Execl Throughput 43.0 23047.5 5359.955.File Copy 1024 bufsize 2000 maxblocks 3960.0 525702.0 1327.556.File Copy 256 bufsize 500 maxblocks 1655.0 139688.0 844.057.File Copy 4096 bufsize 8000 maxblocks 5800.0 1834232.0 3162.558.Pipe Throughput 12440.0 9754452.8 7841.259.Pipe-based Context Switching 4000.0 1181849.8 2954.660.Process Creation 126.0 42295.7 3356.861.Shell Scripts (1 concurrent) 42.4 32399.6 7641.462.Shell Scripts (8 concurrent) 6.0 4529.9 7549.863.System Call Overhead 15000.0 3386402.8 2257.664. ========65.System Benchmarks Index Score 4252.8
1.2 数据准备
使用benchmarksql-5.0中的历史表作为被测表,建表脚本如下:
1.create table bmsql_history (2. hist_id integer,3. h_c_id integer,4. h_c_d_id integer,5. h_c_w_id integer,6. h_d_id integer,7. h_w_id integer,8. h_date timestamp,9. h_amount decimal(6,2),10. h_data varchar(24)11.);
1.3 测试数据生成脚本
根据字段类型写了一个生成测试数据的脚本,代码如下:
1.# -*- coding=utf-8 -*-2.3.import csv4.import random5.import time6.import string7.8.# 创建列表,保存header内容9.header_list = ["hist_id", "h_c_id", "h_c_d_id", "h_c_w_id", "h_d_id", "h_w_id", "h_date", "h_amount", "h_data"]10.11.g_count = 012.13.def random_list(n):14. data_list = []15. global g_count16. for i in range(n):17. g_count = g_count + 118. l = [g_count,19. random.randint(0,1000),20. random.randint(0,1000),21. random.randint(0,1000),22. random.randint(0,1000),23. random.randint(0,1000),24. time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),25. #random.randint(0,1000),26. round(random.uniform(0, 9999.0), 2),27. ''.join(random.sample(string.ascii_letters + string.digits, 20))28. ]29. data_list.append(l)30.31. return data_list32.33.# 以写方式打开文件。注意添加 newline="",否则会在两行数据之间都插入一行空白。34.with open("bmsql_history.csv", mode="w", encoding="utf-8", newline="") as f:35.36. # 基于打开的文件,创建 csv.writer 实例37. writer = csv.writer(f)38.39. # 写入 header。40. # writerow() 一次只能写入一行。41. writer.writerow(header_list)42.43. # 写入数据。44. # writerows() 一次写入多行。45. for i in range(10000):46. writer.writerows(random_list(1000))
1.4 测试数据
执行脚本后会生成10000000行测试数据,具体如下图:

1.LOAD DATA2. [LOW_PRIORITY | CONCURRENT] [LOCAL]3. INFILE 'file_name'4. [REPLACE | IGNORE]5. INTO TABLE tbl_name6. [PARTITION (partition_name [, partition_name] ...)]7. [CHARACTER SET charset_name]8. [{FIELDS | COLUMNS}9. [TERMINATED BY 'string']10. [[OPTIONALLY] ENCLOSED BY 'char']11. [ESCAPED BY 'char']12. ]13. [LINES14. [STARTING BY 'string']15. [TERMINATED BY 'string']16. ]17. [IGNORE number {LINES | ROWS}]18. [(col_name_or_user_var19. [, col_name_or_user_var] ...)]20. [SET col_name={expr | DEFAULT},21. [, col_name={expr | DEFAULT}] ...]
2.3测试
1.-- LOAD DATA LOCAL INFILE '文件路径' INTO TABLE tableName FIELDS TERMINATED BY ',';2.3.LOAD DATA LOCAL INFILE '/root/bmsql_history.csv' INTO TABLE bmsql_history FIELDS TERMINATED BY ',';

耗时:69.58s.

dmfldr(DM Fast Loader)是 DM 提供的快速数据装载命令行工具。用户通过使用dmfldr 工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM 数据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。

1. [dmdba@host-10-208-227-136 ~]$ dmfldr help2. version: 03134283938-20221019-172201-200183. 格式: ./dmfldr KEYWORD=value4.5. 例程: ./dmfldr SYSDBA/SYSDBA CONTROL='/opt/data/fldr.ctl'6.7. USERID 必须是命令行中的第一个参数8. 字符串类型参数必须以引号封闭9.10. 关键字 说明(默认值)11. --------------------------------------------------------------------------------12. USERID 用户名/口令, 格式:{[/] | /}[@][13. : [ | host[:port] | ]14.: #{=[,=]...}15. --此行外层{}是为了封装参数之用,书写时需要保留16. : AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO}17. CONTROL 控制文件,字符串类型18. LOG 日志文件,字符串类型 (fldr.log)19. BADFILE 错误数据记录文件,字符串类型 (fldr.bad)20. SKIP 初始忽略逻辑行数 (0)21. LOAD 需要装载的行数 (ALL)22. ROWS 提交频次 (50000), DIRECT为FALSE有效23. DIRECT 是否使用快速方式装载 (TRUE)24. SET_IDENTITY 是否插入自增列 (FALSE)25. SORTED 数据是否已按照聚集索引排序 (FALSE)26. INDEX_OPTION 索引选项 (1)27. 1 不刷新二级索引,数据按照索引先排序,装载完后再28. 将排序的数据插入索引29. 2 不刷新二级索引,数据装载完成后重建所有二级索引30. 3 刷新二级索引, 数据装载的同时将数据插入二级索引31. ERRORS 允许的最大数据错误数 (100)32. CHARACTER_CODE 字符编码,字符串类型 (GBK, UTF-8, SINGLE_BYTE, EUC-KR)33. MODE 装载方式,字符串类型 IN表示载入,OUT表示载出,34. OUTORA表示载出ORACLE (IN)35. CLIENT_LOB 大字段目录是否在本地 (FALSE)36. LOB_DIRECTORY 大字段数据文件存放目录37. LOB_FILE_NAME 大字段数据文件名称,仅导出有效 (dmfldr.lob)38. BUFFER_NODE_SIZE 读入文件缓冲区的大小 (10),有效值范围1~204839. LOG_SIZE 日志信息缓冲区的大小 (1),有效值范围1~10040. READ_ROWS 工作线程一次最大处理的行数 (100000),最大支持2^26-1000041. NULL_MODE 载入时NULL字符串是否处理为NULL42. 载出时空值是否处理为NULL字符串 (FALSE)43. NULL_STR 载入时视为NULL值处理的字符串44. SEND_NODE_NUMBER 运行时发送节点的个数 (20),有效值范围16~6553545. TASK_THREAD_NUMBER 处理用户数据的线程数目,默认与处理器核数量相同,有效值范围1~12846. BLDR_NUM 服务器BLDR数目 (64),有效值范围1~102447. BDTA_SIZE bdta的大小 (5000),有效值范围100~1000048. COMPRESS_FLAG 是否压缩bdta (FALSE)49. MPP_CLIENT MPP环境,是否本地分发 (TRUE)50. SINGLE_FILE MPP/DPC环境,是否只生成单个数据文件(FALSE)51. LAN_MODE MPP/DPC环境,是否以内网模式装载数据(FALSE)52. UNREP_CHAR_MODE 非法字符处理选项(0),为0时表示跳过该数据行,为1时表示使用(*)替换错误字节53. SILENT 是否静默方式装载数据(FALSE)54. BLOB_TYPE BLOB类型字段数据值的实际类型,字符串类型 (HEX_CHAR)55. HEX表示值为十六进制,HEX_CHAR表示值为十六进制字符类型56. 仅在direct=FALSE有效57. OCI_DIRECTORY OCI动态库所在的目录58. DATA 指定数据文件路径59. ENABLE_CLASS_TYPE 允许用户导入CLASS类型数据 (FALSE)60. FLUSH_FLAG 提交时是否立即刷盘 (FALSE)61. IGNORE_BATCH_ERRORS 是否忽略错误数据继续导入 (FALSE)62. SINGLE_HLDR_HP 是否使用单个HLDR装载HUGE水平分区表 (TRUE)63. EP 指定需要发送数据的站点序号列表,仅向MPP/DPC环境导入数据时有效64. PARALLEL 是否开启并行装载(FALSE)65. SQL 使用自定义查询语句,仅导出模式有效66. SQLFILE 自定义查询语句所在文件,仅导出模式有效67. TABLE 导入/出表68. ROW_SEPERATOR 行分隔符69. FIELD_SEPERATOR 列分隔符70. COMMIT_OPTION 提交选项(0), 0:每发送一批数据后提交, 1:发送完所有数据后提交71. APPEND_OPTION 追加选项(0), 0: 追加方式, 1: 替代方式, 2: 插入方式72. COLNAME_HEADING 是否在导出文件头中打印列名(FALSE)73. IGNORE_AIMLESS_DATA 是否忽略无目标数据(FALSE)74. LOB_AS_VARCHAR 是否将CLOB作为VARCHAR进行导入导出(FALSE)75. LOB_AS_VARCHAR_SIZE 将CLOB作为VARCHAR进行导入导出时, lob数据最大大小(10)MB76. LOG_LEVEL 记录错误数据信息级别(3), 0: 不记录 1: 只记录到log文件 2: 只记录到bad文件 3: 记录到log和bad文件77. FLDR_INI 配置文件路径,字符串类型78. RECONN 自动重连次数(0)79. RECONN_TIME 自动重连等待时间(5), 单位(s), 有效值范围(1~10000)80. WIDTH 设置列数据宽度81. SEDF 被替换的字符列表82. SEDT 用于替换的字符列表83. ESCAPE 转义符84. HELP 打印帮助信息
1. LOAD DATA2. INFILE '/home/dmdba/bmsql_history.csv'3. INTO TABLE bmsql_history4. FIELDS ','
1. [dmdba@host-10-208-227-136 ~]$ dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/home/dmdba/test.ctrl\'2. dmfldr V83. 控制文件:4.5. 加载行数:全部6.7. 每次提交服务器行数:500008.9. 跳过行数:010.11. 允许错误数:10012.13. 是否直接加载:Yes14.15. 是否插入自增列:No16.17. 数据是否已按照聚集索引排序:No18.19. 字符集:UTF-820.21.22.23. 数据文件共1个:24. /home/dmdba/bmsql_history.csv25.26. 错误文件:fldr.bad27.28. 目标表:BMSQL_HISTORY29.30. 列名 包装数据类型 终止31. HIST_ID CHARACTER ,32. H_C_ID CHARACTER ,33. H_C_D_ID CHARACTER ,34. H_C_W_ID CHARACTER ,35. H_D_ID CHARACTER ,36. H_W_ID CHARACTER ,37. H_DATE CHARACTER ,38. H_AMOUNT CHARACTER ,39. H_DATA CHARACTER ,40.41. 行缓冲区数量: 842. 任务线程数量: 843.44. 100000行记录已提交45. 200000行记录已提交46. ……47. ……48. 10000000行记录已提交49.50. 目标表:BMSQL_HISTORY51. load success.52. 10000000 行加载成功。53. 0 行由于数据格式错误被丢弃。54. 0 行由于数据错误没有加载。55.56. 跳过的逻辑记录总数:057. 读取的逻辑记录总数:1000000058. 拒绝的逻辑记录总数:059.60. 6503.826(ms)已使用

| MySQL | 69.58s |
| DM8 | 6.504s |

(2)DM8
如下图可以看到达梦的dmfldr采用多线程处理,任务线程数量: 8,该线程数可以配置。TASK_THREAD_NUMBER 处理用户数据的线程数目,默认与处理器核数量相同,有效值范围1~128
注意:即使将TASK_THREAD_NUMBER配置为1,达梦导入性能仍然可以在20s左右。

对比
CPU使用率,多线程并行处理,可以充分利用CPU。
I/O延时,MySQL在终端返回结果后,仍会有很长时间的IO使用,应该是异步的落盘操作。


文章转载自达梦E学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




