Eu sempre escrevo mensagens em uma tabela "EventLog". Ao processar grandes quantidades de dados, gerencio os dados em partes e escrevo atualizações de status no EventLog após cada parte.
Quando quero verificar o andamento do processo de longa execução, basta consultar a tabela EventLog.
Exemplo de saída:
-------------------
- Minha grande atualização -
-------------------
Início: 2011-05-03 10:00:00
Registros a serem processados: 1.000.000
Pedaços: 200
--- Pedaço 1 ---
Tentando atualizar MyTable
Registros atualizados: 5000
Registros restantes: 995.000
Rendimento: 4210 registros por segundo
--- Pedaço 2--
Tentando atualizar MyTable
Registros atualizados: 5000
Registros restantes: 990.000
Rendimento: 3555 registros por segundo
--- Pedaço 3--
etc.
Também tenho colunas na tabela EventLog para rastrear quando a mensagem foi gravada, qual processo a gravou etc. Desculpe por não incluir essas informações no meu exemplo.