pt-fifo-split
前言
相信大多数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