如何在MySQL中查看.csv上传的进度

Tuc*_*ker 10 mysql csv load-data-infile

我有一个非常大的.csv文件,我用LOAD DATA INFILE命令将它加载到mysql中.因为它花了这么长时间,我想看看上传进展的程度.

到目前为止,我已经尝试了两种方法 - 首先,我只是执行了一个SELECT COUNT(*)命令来查看在上载过程中插入了多少行,但是总是返回0的计数.
其次,我尝试了SHOW PROCESSLIST并查看查询运行了多长时间.有时候状态会说"释放数据"或其他类似的东西.

有没有人知道跟踪LOAD DATA INFILE命令进度的好方法?此外,有谁知道如何跟踪插入率?

谢谢

krz*_*-wa 26

在Linux上,您可以打印有关文件描述符(ls -l/proc // fd)和文件位置读取器(cat/proc // fdinfo)的信息.所以:

  1. 找到mysqld pid(在这个例子中:1234):

    $ ps -ef | grep mysqld

    mysql 1234 1 0 feb12 ? 00:00:55 /usr/sbin/mysqld

  2. 查找已加载文件的文件描述符编号(在此示例中为:45):

    $ sudo ls -l /proc/1234/fd

    lr-x------ 1 root root 64 Feb 13 10:56 45 -> /var/lib/mysql/db/Loaded_file.txt

  3. 打印有关该文件描述符的信息并检查已读取的字节数(在此示例中为:494927872):

    $ cat /proc/1234/fdinfo/45

    pos: 494927872

    flags: 0100000

您可以将此进度指示器(以字节为单位)与正在加载的实际文件大小进行比较.

您也可以使用'lsof'命令代替第1步和第2步:

$ lsof /var/lib/mysql/db/Loaded_file.txt | grep mysql

COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME

mysqld    1234 youknowwho    45r   REG  252,0   190312 5505353 /var/lib/mysql/db/Loaded_file.txt
Run Code Online (Sandbox Code Playgroud)

  • 这在许多其他"大文件读取"场景中非常棒且有用!! (3认同)
  • 这对我来说不是很有效。我必须使用lsof来获取相关的进程和fd。读取文件的是我的mysql客户端,而不是mysqld。但这是一个非常有用的提示! (2认同)

dmc*_*lis 8

http://www.stephenchu.com/2008/12/speed-up-your-mysql-data-load.html,你可以使用 SHOW INNODB STATUS IF你的表是Innodb类型,你没碰巧提到.

我链接到的页面也有一些很好的调整建议,可以通过这种方式加载数据来提高整体性能.


小智 5

这里有几种方法......

  1. set session transaction isolation level read uncommitted; 然后count(*)将起作用
  2. select rows_read as 'Read', round((rows_read/{linecount})*100, 2) as 'Complete', round(time/60, 2) as 'Elapsed', round(time * 100 / round((rows_read/<line count>)*100, 2) / 60, 2) as 'ETA' from INFORMATION_SCHEMA.PROCESSLIST where id = <id>;