Here's what I would do: run the update as a queued task. Have a "progress" table in the db; it only needs to be 1 row. [Alternate idea; store progress in a file in the filesystem; I don't think you can update the session from the Scheduler environment, BICBW]. The page that starts the update goes to a status page which displays the current progress value and has refresh set to 10 seconds or such, or it has a javascript loop that fires an AJAX request off and sleeps for 10 seconds.
There have been some progress bars discussed here, and that should be searchable in the forum archives, but I think stupid.css (used in the current Welcome app) has that built-in; check out Massiomo's examples at <URL:
https://github.com/mdipierro/stupid.css>. (about halfway down on the examples page)
/dps