Verticaで利用できるトランザクション分離レベル
Verticaはトランザクションをサポートしているデータベースです。Verticaでは、標準のANSI SQL-92の分離レベルの内、以下を使用できます。
分離レベル | ダーティリード | ファジーリード | ファントムリード |
---|---|---|---|
READ COMMITTED | 発生しない | 発生する | 発生する |
SERIALIZABLE | 発生しない | 発生しない | 発生しない |
残りの分離レベルについても指定することは可能ですが、それぞれ別の分離レベルに自動で置き換えられますのでご注意ください。
READ UNCOMMITTED | READ COMMITTEDに置き換えられます |
REPEATABLE READ | SERIALIZABLEに置き換えられます |
トランザクション分離レベルの変更方法
デフォルトのトランザクション分離レベルはREAD COMMITTEDですが、必要に応じて変更が可能です。セッション単位で分離レベルを変更する方法
1 |
dbadmin=> SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL トランザクションモード ; |
例)トランザクション分離レベルをSERIALIZABLEに変更する場合
1 |
dbadmin=> SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE; |
データベース単位で分離レベルを変更する方法
1 |
dbadmin=>ALTER DATABASE データベース名 SET TransactionIsolationLevel = 'トランザクションモード' |
例)testデータベースのトランザクション分離レベルをSERIALIZABLEに変更する場合
1 |
dbadmin=> ALTER DATABASE test SET TransactionIsolationLevel = 'SERIALIZABLE'; |
現在のトランザクション分離レベルはSHOW TRANSACTION_ISOLATIONコマンドで確認できます。
1 2 3 4 |
dbadmin=> SHOW TRANSACTION_ISOLATION; name | setting -----------------------+---------------- transaction_isolation | READ COMMITTED |
AUTO COMMITについて
VerticaはデフォルトではAUTO COMMIT(自動コミット)は無効になっています。そのため、更新した内容を確定させたい場合は明示的にCOMMITを実行する必要があります。
※ただし、COPYコマンドについてはデフォルトでAUTO COMMITになります。
なお、AUTO COMMITの設定を変更したい場合は、以下のコマンドを実行することでセッションレベルでオン/オフを切り替えることができます。
1 |
dbadmin=> \set AUTOCOMMIT on |
1 |
dbadmin=> \set AUTOCOMMIT off |
※大文字小文字の表記は上記例の通りに入力してください。
検証バージョンについて
この記事の内容はVertica 9.1で確認しています。- 投稿タグ
- transaction, AUTOCOMMIT