この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

バッチ処理の進捗度をリアルタイムで測定する

ちょっと小ネタ気味で恐縮ですが。


バッチ処理などで大量データ処理を行っているとき、
「いま、全体の何パーセントが終わったんだろう?」
と思うときがあります。


例えば、バッチ処理で100万件のINSERTが実行されることが予想されるとき、
それが1トランザクションで実行されるならば、コミットされるまで

select count(*) from XXX;

の結果はゼロのままです。

リアルタイムで「50万件、60万件、…」とレコード件数が増加していくのが見たいのに…!!


そんなときはこれを使えばOK。

set session transaction isolation level read uncommitted;

(MySQLの場合)


これで、まだコミットされていないけどINSERT済みなレコードを見ることができるようになります。
だから、select countを実行する毎に、リアルタイムでレコード件数が取得できるわけです。