Instead of batching in each worker, you can simply trigger a sidekiq worker for each batch and adjust sidekiq concurrency as per your machine specs. To signify batch boundaries prefer something other than limit+offset combination - eg. id range or date range (if indexed). If your ids are random/uuid/binary you may need to be more creative because you risk losing items that are inserted while the batch operations is underway.
If you are using sidekiq pro you can take advantage of its batch monitoring functionality.
For progress Sidekiq status looks promising.
Also instead of composing a SQL string through string concatenation consider using Arel to build a bulk insertion query or a higher level solution like activerecord-import.
Lorefnon
Open Web Enthusiast