# オンラインDDL関連モジュール

![`smart`](OnlineDDLRelatedModules_aa_002_20220509.png)

------------------------------------------------------------
TiDBはオンラインDDLをサポートしており、つまりDDL操作はテーブルをロックしないということです。

TiDBクラスタ全体では、同時にDDL操作を行うTiDBサーバーは1つだけです。 すべてのTiDBサーバーには、DDL操作を処理する`Worker`モジュールがあり、現在のTiDBサーバーの役割が`Owner`の場合にのみ有効になります。

TiDBクラスタ内に複数のTiDBサーバーがある場合、これらのTiDBサーバーは固定時間（選挙による）に交代して`Owner`の役割を果たします。 TiDBサーバーが`Owner`の役割を果たしている場合、その`Worker`モジュールはDDL操作を処理できます。

クラスタの現在の`Owner`ロール情報はPDに格納されており、`Woker`モジュールは、それが配置されているTiDBサーバーが現在`Owner`ロールかどうかを確認できます。`Owner`の期限が切れると、PDは新しい`Owner`の選挙を開始します。

`Worker`モジュールに加えて、`Load Schema`モジュールもあります。これは、現在のTiDBサーバーが`Owner`ロールになった後に最新のスキーマ情報をロードするために使用されます。そのため、現在の`Owner`ロールを持つTiDBサーバーには最新のスキーマ情報があります。

最後に、`Start Job`モジュールはDDLリクエストを受け取り、DDL操作にユニークなIDを割り当てる責任があります。ここでは、割り当てられたIDを持つ各DDL操作をジョブと呼びます。`Start Job`モジュールは、TiKVクラスタ内のジョブキューにジョブを入れます。