Possible to estimate completion status/percentage with following information in MySQL?

I am doing a large update and I was checking to see if there was some way I can evaluate how far along it is rather than just looking at the spinner.

For reference:

  1. The insert statement looks something like this:

    INSERT IGNORE INTO table_to SELECT * FROM table_from

  2. The table_to has about 2.8B rows.

  3. The table_from has about 157M rows.

In other words, I'm inserting 157M rows into a table that already has 2.8B rows.

The status when doing select * from information_schema.processlist where db='history' just says Sending data. When doing show engine innodb status; I get the following information:

2651250 lock struct(s), 
heap size 418554064, 
166033510 row lock(s), 
undo log entries 35625719
MySQL thread id 5271106, 
OS thread handle 47283734066944, 
query id 906968734 10.194.1.122 avails 
Sending data

It does say 166M rows locked -- does it have to lock every single row (2.8B) in order to do the insert? In other words, it's less than 10% done? Or is that a wrong reading of it? And is there any way to evaluate 'how far along the query is' ?

How many English words
do you know?
Test your English vocabulary size, and measure
how many words do you know
Online Test
Powered by Examplum