質問: Node.jsのORMとしてTypeORMを使用しているのですが、ドキュメント()を確認すると ``` import {getManager} from "typeorm"; await getManager().transaction("SERIALIZABLE", transactionalEntityManager => { }); ``` のようにトランザクションごとに分離レベルを変更できる仕様になっていました。 クエリログを確認するとトランザクションを開始する前に毎回 ``` SET TRANSACTION ISOLATION LEVEL ... ``` で分離レベルを変更していたのですが、分離レベルはグローバルな設定と認識しています。 そんなに頻繁に変更してもよいものなのでしょうか?分離レベルを変えると更新時にDB内部で行うことがかなり変わると思うのですが...。
回答: > > 分離レベルはグローバルな設定と認識しています。 > > > MySQL 5.6 リファレンスマニュアル 13.3.6 SET TRANSACTION 構文によると、 「`SET TRANSACTION ISOLATION LEVEL ...`」は現在のセッション内で実行されるトランザクションが対象のようです。 ※ MySQLのバージョンによって異なるかもしれません > > そんなに頻繁に変更してもよいものなのでしょうか? > > > セッション毎の変更であれば「トランザクションごとに分離レベルを変更できる仕様」の想定内だと思います。 すべてのセッションに対してトランザクションレベルを変えるには次の条件が必要なので、頻繁に変更することはできないでしょう。 * SUPER 権限が必要 * アクティブなトランザクションが存在しない > > 分離レベルを変えると更新時にDB内部で行うことがかなり変わると思うのですが...。 > > > 残念ながら私の知識レベルではコメントできません。 外から見た振る舞いについて以下のページが参考になると思います。 トランザクション分離レベルについてのまとめ