前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Percona Toolkit系列 — pt-fifo-split

Percona Toolkit系列 — pt-fifo-split

原创
作者头像
brightdeng@DBA
发布2021-05-10 10:44:47
6451
发布2021-05-10 10:44:47
举报

前言

相信大多数DBA都遇见过这样一个场景:开发同事给到一个非常大的SQL文件,里面包含了几千万甚至几亿行记录,这个时候我们应该怎么处理呢?如果直接导入的话,一方面串行执行效率比较低,另一方面大事务也可能导致主从复制延迟。pt-fifo-split这个工具,可以对大文件进行切割,就可以很好解决这个问题。

基本用法

(1)基本语法

pt-fifo-split [OPTIONS] [FILE]

(2)常见选项

--fifo:临时文件位置,默认是/tmp/pt-fifo-split
--force:当临时文件存在时,移除并重建临时文件
--lines:控制每次读取的行数
--offset:控制从第几行开始分割
--statistics:打印统计信息

场景模拟

(1)首先,有一个100w行记录的数据文件

$ wc -l sbtest1.txt 
1000000 sbtest1.txt

(2)其次,需要编写一个脚本,去获取数据

$ cat fifo_get.sh 
#!/bin/bash
filename=/tmp/sbtest1
n=1
while [ -e /tmp/pt-fifo-split ];
do 
        cat /tmp/pt-fifo-split > "$filename"_"$n".txt ;
        let n++
done

(3)会话1执行文件切割

$ pt-fifo-split --lines 10000 --statistics sbtest1.txt 
chunks     lines  time  overall  current
    1     10000    14 714.29 714.29
    2     20000    14 1428.57 10000.00
    3     30000    14 2142.86 10000.00
    4     40000    14 2857.14 10000.00
    5     50000    14 3571.43 10000.00
    6     60000    14 4285.71 10000.00
    7     70000    14 5000.00 10000.00
    8     80000    14 5714.29 10000.00
    9     90000    14 6428.57 10000.00
   10    100000    14 7142.86 10000.00
   11    110000    14 7857.14 10000.00
   12    120000    14 8571.43 10000.00
   13    130000    15 8666.67 10000.00
   14    140000    15 9333.33 10000.00
   15    150000    15 10000.00 10000.00
   16    160000    15 10666.67 10000.00
   17    170000    15 11333.33 10000.00
   18    180000    15 12000.00 10000.00
   19    190000    15 12666.67 10000.00
   20    200000    15 13333.33 10000.00
   21    210000    15 14000.00 10000.00
   22    220000    15 14666.67 10000.00
   23    230000    15 15333.33 10000.00
   24    240000    15 16000.00 10000.00
   25    250000    15 16666.67 10000.00
   26    260000    15 17333.33 10000.00
   27    270000    15 18000.00 10000.00
   28    280000    15 18666.67 10000.00
   29    290000    15 19333.33 10000.00
   30    300000    15 20000.00 10000.00
   31    310000    15 20666.67 10000.00
   32    320000    15 21333.33 10000.00
   33    330000    15 22000.00 10000.00
   34    340000    15 22666.67 10000.00
   35    350000    15 23333.33 10000.00
   36    360000    15 24000.00 10000.00
   37    370000    15 24666.67 10000.00
   38    380000    15 25333.33 10000.00
   39    390000    15 26000.00 10000.00
   40    400000    15 26666.67 10000.00
   41    410000    15 27333.33 10000.00
   42    420000    15 28000.00 10000.00
   43    430000    15 28666.67 10000.00
   44    440000    15 29333.33 10000.00
   45    450000    15 30000.00 10000.00
   46    460000    15 30666.67 10000.00
   47    470000    15 31333.33 10000.00
   48    480000    15 32000.00 10000.00
   49    490000    15 32666.67 10000.00
   50    500000    15 33333.33 10000.00
   51    510000    15 34000.00 10000.00
   52    520000    15 34666.67 10000.00
   53    530000    15 35333.33 10000.00
   54    540000    15 36000.00 10000.00
   55    550000    15 36666.67 10000.00
   56    560000    15 37333.33 10000.00
   57    570000    15 38000.00 10000.00
   58    580000    15 38666.67 10000.00
   59    590000    15 39333.33 10000.00
   60    600000    15 40000.00 10000.00
   61    610000    15 40666.67 10000.00
   62    620000    15 41333.33 10000.00
   63    630000    15 42000.00 10000.00
   64    640000    15 42666.67 10000.00
   65    650000    15 43333.33 10000.00
   66    660000    15 44000.00 10000.00
   67    670000    15 44666.67 10000.00
   68    680000    15 45333.33 10000.00
   69    690000    15 46000.00 10000.00
   70    700000    15 46666.67 10000.00
   71    710000    15 47333.33 10000.00
   72    720000    15 48000.00 10000.00
   73    730000    15 48666.67 10000.00
   74    740000    15 49333.33 10000.00
   75    750000    15 50000.00 10000.00
   76    760000    15 50666.67 10000.00
   77    770000    16 48125.00 10000.00
   78    780000    16 48750.00 10000.00
   79    790000    16 49375.00 10000.00
   80    800000    16 50000.00 10000.00
   81    810000    16 50625.00 10000.00
   82    820000    16 51250.00 10000.00
   83    830000    16 51875.00 10000.00
   84    840000    16 52500.00 10000.00
   85    850000    16 53125.00 10000.00
   86    860000    16 53750.00 10000.00
   87    870000    16 54375.00 10000.00
   88    880000    16 55000.00 10000.00
   89    890000    16 55625.00 10000.00
   90    900000    16 56250.00 10000.00
   91    910000    16 56875.00 10000.00
   92    920000    16 57500.00 10000.00
   93    930000    16 58125.00 10000.00
   94    940000    16 58750.00 10000.00
   95    950000    16 59375.00 10000.00
   96    960000    16 60000.00 10000.00
   97    970000    16 60625.00 10000.00
   98    980000    16 61250.00 10000.00
   99    990000    16 61875.00 10000.00
  100   1000000    16 62500.00 10000.00

(4)会话2执行数据获取

$ sh fifo_get.sh
$ wc -l sbtest1*
    10000 sbtest1_100.txt
    10000 sbtest1_10.txt
    10000 sbtest1_11.txt
    10000 sbtest1_12.txt
    10000 sbtest1_13.txt
    10000 sbtest1_14.txt
    10000 sbtest1_15.txt
    10000 sbtest1_16.txt
    10000 sbtest1_17.txt
    10000 sbtest1_18.txt
    10000 sbtest1_19.txt
    10000 sbtest1_1.txt
    10000 sbtest1_20.txt
    10000 sbtest1_21.txt
    10000 sbtest1_22.txt
    10000 sbtest1_23.txt
    10000 sbtest1_24.txt
    10000 sbtest1_25.txt
    10000 sbtest1_26.txt
    10000 sbtest1_27.txt
    10000 sbtest1_28.txt
    10000 sbtest1_29.txt
    10000 sbtest1_2.txt
    10000 sbtest1_30.txt
    10000 sbtest1_31.txt
    10000 sbtest1_32.txt
    10000 sbtest1_33.txt
    10000 sbtest1_34.txt
    10000 sbtest1_35.txt
    10000 sbtest1_36.txt
    10000 sbtest1_37.txt
    10000 sbtest1_38.txt
    10000 sbtest1_39.txt
    10000 sbtest1_3.txt
    10000 sbtest1_40.txt
    10000 sbtest1_41.txt
    10000 sbtest1_42.txt
    10000 sbtest1_43.txt
    10000 sbtest1_44.txt
    10000 sbtest1_45.txt
    10000 sbtest1_46.txt
    10000 sbtest1_47.txt
    10000 sbtest1_48.txt
    10000 sbtest1_49.txt
    10000 sbtest1_4.txt
    10000 sbtest1_50.txt
    10000 sbtest1_51.txt
    10000 sbtest1_52.txt
    10000 sbtest1_53.txt
    10000 sbtest1_54.txt
    10000 sbtest1_55.txt
    10000 sbtest1_56.txt
    10000 sbtest1_57.txt
    10000 sbtest1_58.txt
    10000 sbtest1_59.txt
    10000 sbtest1_5.txt
    10000 sbtest1_60.txt
    10000 sbtest1_61.txt
    10000 sbtest1_62.txt
    10000 sbtest1_63.txt
    10000 sbtest1_64.txt
    10000 sbtest1_65.txt
    10000 sbtest1_66.txt
    10000 sbtest1_67.txt
    10000 sbtest1_68.txt
    10000 sbtest1_69.txt
    10000 sbtest1_6.txt
    10000 sbtest1_70.txt
    10000 sbtest1_71.txt
    10000 sbtest1_72.txt
    10000 sbtest1_73.txt
    10000 sbtest1_74.txt
    10000 sbtest1_75.txt
    10000 sbtest1_76.txt
    10000 sbtest1_77.txt
    10000 sbtest1_78.txt
    10000 sbtest1_79.txt
    10000 sbtest1_7.txt
    10000 sbtest1_80.txt
    10000 sbtest1_81.txt
    10000 sbtest1_82.txt
    10000 sbtest1_83.txt
    10000 sbtest1_84.txt
    10000 sbtest1_85.txt
    10000 sbtest1_86.txt
    10000 sbtest1_87.txt
    10000 sbtest1_88.txt
    10000 sbtest1_89.txt
    10000 sbtest1_8.txt
    10000 sbtest1_90.txt
    10000 sbtest1_91.txt
    10000 sbtest1_92.txt
    10000 sbtest1_93.txt
    10000 sbtest1_94.txt
    10000 sbtest1_95.txt
    10000 sbtest1_96.txt
    10000 sbtest1_97.txt
    10000 sbtest1_98.txt
    10000 sbtest1_99.txt
    10000 sbtest1_9.txt
  1000000 sbtest1.txt
  2000000 total

(5)至此,文件切割完成,接下来可以将切割后的文件,并行导入到数据库中

总结

通过pt-fifo-split这个工具,可以快速将大文件进行切割,非常方便。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 基本用法
  • 场景模拟
  • 总结
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档