扱う案件に最近携わっていて、いろいろとドキュメントにないノウハウが溜まりつつあるのでここらでメモ書きしておきます。リクエストはもちろんのこと、非同期ジョブにおいてもトランザクションが自動的に提供されます。リクエスト処理・非同期ジョブに1つのトランザクションがあればそれで十分ですが、ちょっと込み入ったことをやろうとすると、例えば監査用の操作ログ・クエリログをテーブルに出力したい→コミットされるタイミングは後でもいいんだけど、本流の処理で転けてロールバックかけた場合に、操作ログまでなかったことになるのは避けたい。非同期ジョブなどで、ジョブ管理テーブルを随時監視・更新したい→本流の処理のトランザクションはコミットしたくないけど、ジョブ管理テーブルへの変更は即座にコミットして反映させたい。1つのトランザクションではちょっと実現が難しいこともあったりします。前者の例は、トランザクションを二つに分けたとして互いが重ならないように工夫できるでしょうが、後者はそう簡単にはいきません。互いのトランザクションが一部重なり、同時並列で存在しなければならない状況が発生し得ます。ドキュメント・リファレンスの類いに書かれているわけでもありません。標準では複数トランザクションを明示的にはサポートしていませんが、複数トランザクションを扱えないと困ることがあるのは事実なので、何とかしたいところです。どのようにトランザクションを提供してくれているかを把握する必要があります。実装、特にトランザクション周りをソースコードリーディングしていくことにします。周りの扱いを確認してみましょう。