diff --git a/develop/dev-guide-transaction-overview.md b/develop/dev-guide-transaction-overview.md index 65355daad5a0d..914bf09d62f47 100644 --- a/develop/dev-guide-transaction-overview.md +++ b/develop/dev-guide-transaction-overview.md @@ -130,10 +130,10 @@ SELECT * FROM `users`; SQL-92 標準では、次の4つの分離レベルが定義されています。 -- コミットされていない読み取り ( `READ UNCOMMITTED` ) -- コミットされた読み取り ( `READ COMMITTED` ) -- 繰り返し読み取り ( `REPEATABLE READ` ) -- シリアル化可能( `SERIALIZABLE` )。 +- read uncommitted ( `READ UNCOMMITTED` ) +- read committed ( `READ COMMITTED` ) +- repeatable read ( `REPEATABLE READ` ) +- serializable ( `SERIALIZABLE` )。 詳細については、以下の表を参照してください。 @@ -159,7 +159,7 @@ mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ERROR 8048 (HY000): The isolation level 'SERIALIZABLE' is not supported. Set tidb_skip_isolation_level_check=1 to skip this error ``` -TiDBは、MySQLとの整合性を確保するために、スナップショット分離(SI)レベルの整合性(「繰り返し読み取り」とも呼ばれます)を実装しています。この分離レベルは[ANSI繰り返し読み取り分離レベル](/transaction-isolation-levels.md#difference-between-tidb-and-ansi-repeatable-read)および[MySQL 繰り返し読み取り分離レベル](/transaction-isolation-levels.md#difference-between-tidb-and-mysql-repeatable-read)とは異なります。詳細については、 [TiDBトランザクション分離レベル](/transaction-isolation-levels.md)を参照してください。 +TiDBは、MySQLとの整合性を確保するために、スナップショット分離(SI)レベルの整合性(「repeatable read」とも呼ばれます)を実装しています。この分離レベルは[ANSI Repeatable Read Isolation Level](/transaction-isolation-levels.md#difference-between-tidb-and-ansi-repeatable-read)および[MySQL Repeatable Read Isolation Level](/transaction-isolation-levels.md#difference-between-tidb-and-mysql-repeatable-read)とは異なります。詳細については、 [TiDBトランザクション分離レベル](/transaction-isolation-levels.md)を参照してください。 ## ヘルプが必要ですか? {#need-help} diff --git a/pessimistic-transaction.md b/pessimistic-transaction.md index e4757a5c2d035..347cd7fa41ed7 100644 --- a/pessimistic-transaction.md +++ b/pessimistic-transaction.md @@ -132,13 +132,13 @@ TiDB の悲観的なトランザクションは、MySQL のトランザクショ TiDBは、悲観的トランザクションモードにおいて、以下の2つの分離レベルをサポートしています。 -- デフォルトでは[繰り返し読み取り可能](/transaction-isolation-levels.md#repeatable-read-isolation-level)、これは MySQL と同じです。 +- デフォルトでは[Repeatable Read](/transaction-isolation-levels.md#repeatable-read-isolation-level)、これは MySQL と同じです。 > **Note:** > - > この分離レベルでは、最新のコミットされたデータに基づいて DML 操作が実行されます。動作は MySQL と同じですが、TiDB の楽観的トランザクションモードとは異なります。 [TiDBとMySQLのリピータブルリードの違い](/transaction-isolation-levels.md#difference-between-tidb-and-mysql-repeatable-read)を参照してください。 + > この分離レベルでは、最新のコミットされたデータに基づいて DML 操作が実行されます。動作は MySQL と同じですが、TiDB の楽観的トランザクションモードとは異なります。 [TiDBとMySQLのRepeatable Readの違い](/transaction-isolation-levels.md#difference-between-tidb-and-mysql-repeatable-read)を参照してください。 -- [コミット済みを読む](/transaction-isolation-levels.md#read-committed-isolation-level)。この分離レベルは[`SET TRANSACTION`](/sql-statements/sql-statement-set-transaction.md)ステートメントを使用して設定できます。 +- [Read Committed](/transaction-isolation-levels.md#read-committed-isolation-level)。この分離レベルは[`SET TRANSACTION`](/sql-statements/sql-statement-set-transaction.md)ステートメントを使用して設定できます。 ## 悲観的なトランザクションコミットプロセス {#pessimistic-transaction-commit-process} diff --git a/system-variables.md b/system-variables.md index 5c1eb02e9172b..b635aa73a0cc4 100644 --- a/system-variables.md +++ b/system-variables.md @@ -6971,7 +6971,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 型: Enumeration - デフォルト値: `REPEATABLE-READ` - 指定可能な値: `READ-UNCOMMITTED` 、 `READ-COMMITTED` 、 `REPEATABLE-READ` 、 `SERIALIZABLE` -- この変数はトランザクションの分離を設定します。 TiDB は MySQL との互換性のために`REPEATABLE-READ`を宣伝していますが、実際の分離レベルはスナップショット分離です。詳細については、[トランザクション分離レベル](/transaction-isolation-levels.md)を参照してください。 +- この変数はトランザクションの分離レベルを設定します。MySQLとの互換性のため、この変数の値は`REPEATABLE-READ`と表示されますが、実際の分離レベルはスナップショット分離です。詳細については、[トランザクション分離レベル](/transaction-isolation-levels.md)を参照してください。 ### tx_isolation diff --git a/tidb-cloud/transaction-concepts.md b/tidb-cloud/transaction-concepts.md index 2483ea196ab78..bba4f5a993a2c 100644 --- a/tidb-cloud/transaction-concepts.md +++ b/tidb-cloud/transaction-concepts.md @@ -27,7 +27,7 @@ TiDBでは、悲観的トランザクションモードはMySQLとほぼ同じ トランザクション分離は、データベーストランザクション処理の基盤の一つです。分離は、トランザクションの4つの主要な特性(一般的に[ACID](/tidb-cloud/tidb-cloud-glossary.md#acid)と呼ばれます)の一つです。 -TiDBはスナップショット分離(SI)一貫性を実装しており、MySQLとの互換性のために`REPEATABLE-READ`として宣伝されています。これは[ANSI繰り返し読み取り分離レベル](/transaction-isolation-levels.md#difference-between-tidb-and-ansi-repeatable-read)や[MySQL 繰り返し読み取りレベル](/transaction-isolation-levels.md#difference-between-tidb-and-mysql-repeatable-read)とは異なります。 +TiDBはスナップショット分離(SI)一貫性を実装しており、この一貫性レベルはMySQLとの互換性のために`REPEATABLE-READ`として表示されます。これは[ANSI Repeatable Read isolation level](/transaction-isolation-levels.md#difference-between-tidb-and-ansi-repeatable-read)や[MySQL Repeatable Read level](/transaction-isolation-levels.md#difference-between-tidb-and-mysql-repeatable-read)とは異なります。 詳細については[TiDBトランザクション分離レベル](/transaction-isolation-levels.md)を参照してください。 diff --git a/tidb-performance-tuning-config.md b/tidb-performance-tuning-config.md index 207cac83fcd9d..e90c9185cdff7 100644 --- a/tidb-performance-tuning-config.md +++ b/tidb-performance-tuning-config.md @@ -67,7 +67,7 @@ SET GLOBAL tidb_opt_fix_control = '44262:ON,44389:ON,44823:10000,44830:ON,44855: | [`tidb_opt_derive_topn`](/system-variables.md#tidb_opt_derive_topn-new-in-v700) | 最適化ルール[ウィンドウ関数からTopNまたはLimitを導出する](/derive-topn-from-window.md)を有効にします。 | これは`ROW_NUMBER()`ウィンドウ機能に限定されます。 | | [`tidb_runtime_filter_mode`](/system-variables.md#tidb_runtime_filter_mode-new-in-v720) | ハッシュ結合の効率を向上させるには、ローカルモードで[ランタイムフィルタ](/runtime-filter.md#runtime-filter-mode)を有効にしてください。 | この変数はバージョン7.2.0で導入され、安全上の理由からデフォルトでは無効になっています。 | | [`tidb_opt_enable_mpp_shared_cte_execution`](/system-variables.md#tidb_opt_enable_mpp_shared_cte_execution-new-in-v720) | TiFlashへの非再帰的な[共通テーブル式(CTE)](/sql-statements/sql-statement-with.md)プッシュダウンを有効にします。 | これは実験的機能です。 | -| [`tidb_rc_read_check_ts`](/system-variables.md#tidb_rc_read_check_ts-new-in-v600) | 読み取りコミット分離レベルの場合、この変数を有効にすると、グローバルタイムスタンプを取得する際のレイテンシーとコストが回避され、トランザクションレベルの読み取りレイテンシーが最適化されます。 | この機能は、リピータブルリード分離レベルとは互換性がありません。 | +| [`tidb_rc_read_check_ts`](/system-variables.md#tidb_rc_read_check_ts-new-in-v600) | Read Committed分離レベルの場合、この変数を有効にすると、グローバルタイムスタンプを取得する際のレイテンシーとコストが回避され、トランザクションレベルの読み取りレイテンシーが最適化されます。 | この機能は、Repeatable Read分離レベルとは互換性がありません。 | | [`tidb_guarantee_linearizability`](/system-variables.md#tidb_guarantee_linearizability-new-in-v50) | PDサーバーからのコミットタイムスタンプの取得をスキップすることでパフォーマンスを向上させます。 | これは、線形化可能性を犠牲にしてパフォーマンスを優先するものです。因果的一貫性のみが保証されます。厳密な線形化可能性が求められるシナリオには適していません。 | | [`pd_enable_follower_handle_region`](/system-variables.md#pd_enable_follower_handle_region-new-in-v760) | PDFollower機能を有効にすると、PDフォロワーがリージョン要求を処理できるようになります。これにより、すべてのPDサーバーに負荷が均等に分散され、PDリーダーのCPU負荷が軽減されます。 | 該当なし | | [`tidb_opt_fix_control`](/system-variables.md#tidb_opt_fix_control-new-in-v653-and-v710) | 高度なクエリ最適化戦略を有効にすることで、追加の最適化ルールとヒューリスティックを通じてパフォーマンスを向上させることができます。 | ワークロードによってパフォーマンスの向上度合いが異なるため、ご使用の環境で十分にテストを行ってください。 | diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md index b942953770cda..1f430f17c1d1f 100644 --- a/tikv-configuration-file.md +++ b/tikv-configuration-file.md @@ -115,7 +115,7 @@ TiKV の設定ファイルは、コマンドラインパラメータよりも多 ### `advertise-addr` {#advertise-addr} -- クライアント通信のためのリスニングアドレスを宣伝する +- クライアント通信のためのリスニングアドレスをアドバタイズする - この設定項目が設定されていない場合、 `addr`の値が使用されます。 - デフォルト値: `""` diff --git a/transaction-isolation-levels.md b/transaction-isolation-levels.md index a49d0146c2343..1499ddd66f99d 100644 --- a/transaction-isolation-levels.md +++ b/transaction-isolation-levels.md @@ -26,21 +26,21 @@ SQL-92標準では、トランザクション分離レベルとして、Read Unc | REPEATABLE READ | 不可能 | 不可能 | 不可能 | 可能 | | SERIALIZABLE | 不可能 | 不可能 | 不可能 | 不可能 | -TiDBはスナップショット分離(SI)一貫性を実装しており、MySQLとの互換性のために`REPEATABLE-READ`として宣伝されています。これはSI [ANSI繰り返し読み取り分離レベル](#difference-between-tidb-and-ansi-repeatable-read)やSI [MySQL 繰り返し読み取りレベル](#difference-between-tidb-and-mysql-repeatable-read)とは異なります。 +TiDBはスナップショット分離(SI)一貫性を実装しており、この一貫性レベルはMySQLとの互換性のために`REPEATABLE-READ`として表示されます。これは[ANSI Repeatable Read isolation level](#difference-between-tidb-and-ansi-repeatable-read)や[MySQL Repeatable Read level](#difference-between-tidb-and-mysql-repeatable-read)とは異なります。 > **Note:** > -> TiDB v3.0以降、トランザクションの自動再試行はデフォルトで無効になっています。自動再試行を有効にすると**、トランザクション分離レベルが損なわれる**可能性があるため、有効にすることは推奨されません。詳細は[トランザクションの再試行](/optimistic-transaction.md#automatic-retry)を参照してください。 +> TiDB v3.0以降、トランザクションの自動再試行はデフォルトで無効になっています。自動再試行を有効にすると、**トランザクション分離レベルが損なわれる**可能性があるため、有効にすることは推奨されません。詳細は[トランザクションの再試行](/optimistic-transaction.md#automatic-retry)を参照してください。 > -> TiDB v3.0.8以降、新規に作成されたTiDBクラスタはデフォルトで[悲観的トランザクションモード](/pessimistic-transaction.md)を使用します。現在の読み取り( `for update`読み取り)**は繰り返し不可能な読み取り**です。詳細は[悲観的トランザクションモード](/pessimistic-transaction.md)を参照してください。 +> TiDB v3.0.8以降、新規に作成されたTiDBクラスタはデフォルトで[悲観的トランザクションモード](/pessimistic-transaction.md)を使用します。現在の読み取り( `for update`読み取り)は**繰り返し不可能な読み取り**です。詳細は[悲観的トランザクションモード](/pessimistic-transaction.md)を参照してください。 -## 繰り返し読み取り分離レベル {#repeatable-read-isolation-level} +## Repeatable Read分離レベル {#repeatable-read-isolation-level} -リピータブルリード分離レベルでは、トランザクション開始前にコミットされたデータのみが参照され、コミットされていないデータや、トランザクション実行中に同時実行トランザクションによってコミットされた変更は参照されません。ただし、トランザクション文は、自身のトランザクション内で実行された以前の更新の影響を参照します。これらの更新は、まだコミットされていない場合でも参照されます。 +Repeatable Read分離レベルでは、トランザクション開始前にコミットされたデータのみが参照され、コミットされていないデータや、トランザクション実行中に同時実行トランザクションによってコミットされた変更は参照されません。ただし、トランザクション文は、自身のトランザクション内で実行された以前の更新の影響を参照します。これらの更新は、まだコミットされていない場合でも参照されます。 異なるノードで実行されているトランザクションの場合、開始順序とコミット順序は、PD からタイムスタンプが取得される順序によって異なります。 -反復可能読み取り分離レベルのトランザクションは、同じ行を同時に更新できません。コミット時に、トランザクション開始後に別のトランザクションによってその行が更新されたことがわかった場合、トランザクションはロールバックされます。例: +Repeatable Read分離レベルのトランザクションは、同じ行を同時に更新できません。コミット時に、トランザクション開始後に別のトランザクションによってその行が更新されたことがわかった場合、トランザクションはロールバックされます。例: ```sql create table t1(id int); @@ -53,25 +53,25 @@ commit; | | commit; -- The transaction commit fails and rolls back. Pessimistic transactions can commit successfully. ``` -### TiDBとANSI繰り返し読み取りの違い {#difference-between-tidb-and-ansi-repeatable-read} +### TiDBとANSI Repeatable Readの違い {#difference-between-tidb-and-ansi-repeatable-read} -TiDBのRepeatable Read分離レベルは、ANSIのRepeatable Read分離レベルとは同じ名前ですが、異なります。1番目の[ANSI SQL分離レベルの批評](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf)に記載されている標準によると、TiDBはスナップショット分離レベルを実装しています。この分離レベルでは、厳密なファントム(A3)は許可されませんが、広範囲のファントム(P3)とライトスキューは許可されます。一方、ANSIのRepeatable Read分離レベルでは、ファントムリードは許可されますが、ライトスキューは許可されません。 +TiDBのRepeatable Read分離レベルは、ANSIのRepeatable Read分離レベルとは同じ名前ですが、異なります。[ANSI SQL分離レベルの批評](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf)に記載されている標準によると、TiDBはスナップショット分離レベルを実装しています。この分離レベルでは、厳密なファントム(A3)は許可されませんが、広範囲のファントム(P3)とライトスキューは許可されます。一方、ANSIのRepeatable Read分離レベルでは、ファントムリードは許可されますが、ライトスキューは許可されません。 -### TiDBとMySQLの繰り返し読み取りの違い {#difference-between-tidb-and-mysql-repeatable-read} +### TiDBとMySQLのRepeatable Readの違い {#difference-between-tidb-and-mysql-repeatable-read} TiDBのRepeatable Read分離レベルは、MySQLのそれとは異なります。MySQLのRepeatable Read分離レベルでは、更新時に現在のバージョンが可視かどうかがチェックされないため、トランザクション開始後に行が更新された場合でも更新を続行できます。一方、TiDBの楽観的トランザクションでは、トランザクション開始後に行が更新された場合、ロールバックされて再試行されます。TiDBの楽観的同時実行制御ではトランザクションの再試行が失敗し、最終的にトランザクションが失敗する可能性がありますが、TiDBの悲観的同時実行制御とMySQLでは、更新トランザクションが成功する可能性があります。 -## コミット読み取り分離レベル {#read-committed-isolation-level} +## Read Committed分離レベル {#read-committed-isolation-level} -TiDB v4.0.0-beta 以降、TiDB は Read Committed 分離レベルをサポートします。 +TiDB v4.0.0-beta 以降、TiDB は Read Committed分離レベルをサポートします。 歴史的な理由により、現在主流のデータベースのRead Committed分離レベルは基本的に[Oracleが定義する一貫性読み取り分離レベル](https://docs.oracle.com/cd/B19306_01/server.102/b14220/consist.htm)です。この状況に対応するため、TiDBの悲観的トランザクションにおけるRead Committed分離レベルも、本質的には一貫性のある読み取り動作となっています。 > **Note:** > -> Read Committed 分離レベルは[悲観的トランザクションモード](/pessimistic-transaction.md)でのみ有効になります。 [楽観的トランザクションモード](/optimistic-transaction.md)では、トランザクション分離レベルを`Read Committed`に設定しても有効にならず、トランザクションは引き続き Repeatable Read 分離レベルを使用します。 +> Read Committed分離レベルは[悲観的トランザクションモード](/pessimistic-transaction.md)でのみ有効になります。 [楽観的トランザクションモード](/optimistic-transaction.md)では、トランザクション分離レベルを`Read Committed`に設定しても有効にならず、トランザクションは引き続き Repeatable Read分離レベルを使用します。 -v6.0.0以降、TiDBは、読み取り/書き込み競合が稀なシナリオにおいて、タイムスタンプ取得を最適化するためにシステム変数[`tidb_rc_read_check_ts`](/system-variables.md#tidb_rc_read_check_ts-new-in-v600)使用をサポートします。この変数を有効にすると、TiDBは`SELECT`実行時に、前回の有効なタイムスタンプを使用してデータを読み取ろうとします。この変数の初期値は、トランザクションの`start_ts`です。 +v6.0.0以降、TiDBは、読み取り/書き込み競合が稀なシナリオにおいて、タイムスタンプ取得を最適化するためにシステム変数[`tidb_rc_read_check_ts`](/system-variables.md#tidb_rc_read_check_ts-new-in-v600)の使用をサポートします。この変数を有効にすると、TiDBは`SELECT`実行時に、前回の有効なタイムスタンプを使用してデータを読み取ろうとします。この変数の初期値は、トランザクションの`start_ts`です。 - TiDB は読み取りプロセス中にデータ更新が発生しなかった場合、結果をクライアントに返し、 `SELECT`ステートメントが正常に実行されます。 - TiDB が読み取りプロセス中にデータ更新を検出した場合: @@ -80,7 +80,7 @@ v6.0.0以降、TiDBは、読み取り/書き込み競合が稀なシナリオに 分離レベル`READ-COMMITTED`が使用され、ステートメントが`SELECT`多く、読み取り/書き込みの競合がまれなシナリオでは、この変数を有効にすると、グローバル タイムスタンプを取得する際のレイテンシーとコストを回避できます。 -v6.3.0以降、TiDBはポイント書き込みの競合が少ないシナリオにおいて、システム変数[`tidb_rc_write_check_ts`](/system-variables.md#tidb_rc_write_check_ts-new-in-v630)有効にすることでタイムスタンプ取得の最適化をサポートします。この変数を有効にすると、ポイント書き込みステートメントの実行中に、TiDBは現在のトランザクションの有効なタイムスタンプを使用してデータの読み取りとロックを試みます。[`tidb_rc_read_check_ts`](/system-variables.md#tidb_rc_read_check_ts-new-in-v600)が有効になっている場合も、TiDBは同様にデータを読み取ります。 +v6.3.0以降、TiDBはポイント書き込みの競合が少ないシナリオにおいて、システム変数[`tidb_rc_write_check_ts`](/system-variables.md#tidb_rc_write_check_ts-new-in-v630)を有効にすることでタイムスタンプ取得の最適化をサポートします。この変数を有効にすると、ポイント書き込みステートメントの実行中に、TiDBは現在のトランザクションの有効なタイムスタンプを使用してデータの読み取りとロックを試みます。[`tidb_rc_read_check_ts`](/system-variables.md#tidb_rc_read_check_ts-new-in-v600)が有効になっている場合も、TiDBは同様にデータを読み取ります。 現在、適用可能なポイント書き込みステートメントの種類は`UPDATE` 、 `DELETE` 、 `SELECT ...... FOR UPDATE`です。ポイント書き込みステートメントとは、主キーまたは一意キーをフィルター条件として使用し、最終実行演算子に`POINT-GET`含まれる書き込みステートメントを指します。現在、3種類のポイント書き込みステートメントに共通するのは、まずキー値に基づいてポイントクエリを実行することです。キーが存在する場合は、キーをロックします。キーが存在しない場合は、空のセットを返します。