すべてのプロダクト
Search
ドキュメントセンター

PolarDB:地域性

最終更新日:May 27, 2024

このトピックでは、LOCALITY属性を使用してデータノードを指定する方法について説明します。

AUTOモードのデータベースのLOCALITY属性を使用して、データベース、テーブル、またはパーティションのデータノードを指定できます。 これにより、データを分離し、データノードに均等に分散できます。

LOCALITY属性は、次のシナリオで使用できます。

  • LOCALITY属性を使用して、データベース、テーブル、およびパーティションのデータノードを指定できます。 データベース、テーブル、またはパーティションにLOCALITY属性を指定した後、データ分散を変更するために実行される操作は、LOCALITY属性の値によって制限されます。 データノードを削除するために実行される削除操作は、LOCALITY属性の値によって制限されません。

  • テーブルグループおよびパーティショングループのLOCALITY属性の値を変更できます。 LOCALITY属性の値を変更すると、非同期データ移行タスクが自動的にトリガーされます。

前提条件

  • PolarDB-Xインスタンスのカーネルバージョンは5.4.14以降です。

  • 論理データベースはAUTOモードでパーティション分割されます。

説明

PolarDB-Xインスタンスのカーネルバージョンを表示する方法については、「インスタンスのバージョンの表示と更新」をご参照ください。

注意事項

  • データノードを削除すると、データノードのIDを含むLOCALITY属性が自動的に無効になります。

  • LOCALITY属性は、データノードのIDを用いて指定される。 バックアップからデータノードのデータを復元すると、データベースオブジェクトの元のLOCALITY属性が自動的に無効になります。

データベースオブジェクトのLOCALITY属性を定義する

PolarDB-Xインスタンスのデータノードに関する情報の表示

次のステートメントを実行して、PolarDB-Xインスタンスのデータノードに関する情報を表示できます。

ショーストレージ;

サンプル結果:

---------- ----------------------------------------------------------------------------------
| STORAGE_INST_ID | LEADER_NODE | IS_HEALTHY | INST_KIND | DB_COUNT | GROUP_COUNT | STATUS | DELETABLE | DELAY | ACTIVE |
---------- -----------------------------------------------------------------------------------
| polardbx-ng28-dn-0 | polardbx-ng28-dn-0-cands-0:14289 | true | MASTER | 1 | 2 | 0 | false | null |
| polardbx-ng28-dn-1 | polardbx-ng28-dn-1-cands-0:14176 | true | MASTER | 1 | 1 | 0 | true | null |
| polardbx-ng28-dn-2 | polardbx-ng28-dn-2-cands-0:14568 | true | MASTER | 1 | 1 | 0 | true | null |
| polardbx-ng28-dn-3 | polardbx-ng28-dn-3-cands-0:16796 | true | MASTER | 1 | 1 | 0 | true | null |
| polardbx-ng28-gms | polardbx-ng28-dn-0-cands-0:14289 | true | META_DB | 2 | 2 | 0 | false | null |
----------- ---------------------------------------------------------------------------------- 
説明
  • STORAGE_INST_ID: データノードのID。 LOCALITY属性は、データノードのIDを用いて指定される。

  • INST_KIND: データノードのタイプ。 値がMETA_DBの場合、データノードはメタデータノードであり、ビジネスデータの保存には使用できません。

  • STATUS: データノードのステータス。 値が0の場合、データノードは使用可能です。

  • DELTETABLE: データノードを削除できるかどうかを示します。 値がfalseの場合、データノードは削除できません。 上記の例では、メタデータノードとIDがpolardbx-ng28-dn-0のデータノードは削除できません。

データベースを作成するときにLOCALITY属性を指定する

データベースを作成するときに、データベースにデータを格納するデータノードを指定できます。 これにより、データベース内のデータは、同じPolarDB-Xインスタンス内の他のデータベース内のデータから分離されます。

構文:

CREATE DATABASE database_name databse [database_option_list];

AUTOパーティショニングモードを使用するデータベースを作成し、データベースのLOCALITY属性を指定します。 構文の詳細については、「CREATE DATABASE」をご参照ください。

例:

CREATE DATABASE db1 LOCALITY='dn=polardbx-ng28-dn-0、polardbx-ng28-dn-1、polardbx-ng28-dn-2 'MODE = 'auto';

データベースの作成後、SHOW CREATE databaseステートメントを実行して、データベースに関する情報を表示できます。 データベースにデータを格納するために使用されるデータノードを表示するには、SHOW DSステートメントを実行します。

mysql> SHOW CREATE DATABASE 'db1';
+ ---------- + -------------------------------------------------------------------------------------------------------------------- +
| データベース | データベースの作成 |
+ ---------- + -------------------------------------------------------------------------------------------------------------------- +
| db1 | データベース 'db1' /* MODE = 'auto' LOCALITY = "dn=polardbx-ng28-dn-0、polardbx-ng28-dn-1、polardbx-ng28-dn-2" */ |
+ ---------- + -------------------------------------------------------------------------------------------------------------------- +
セットの1列 (0.04秒)

mysql> ショーDS;
+ ---- -------------------- + -------------------- + --------------------------------- + ---------------------- + -------
| ID | STORAGE_INST_ID | DB | グループ | PHY_DB | 移動可能 |
+ ---- -------------------- + -------------------- + --------------------------------- + ---------------------- + -------
| 0 | polardbx-ng28-dn-0 | db1 | DB1_P00000_GROUP | db1_p00000 | 1 |
| 1 | polardbx-ng28-dn-1 | db1 | DB1_P00001_GROUP | db1_p00001 | 1 |
| 2 | polardbx-ng28-dn-2 | db1 | DB1_P00002_GROUP | db1_p00002 | 1 |
| 3 | polardbx-ng28-gms | information_schema | INFORMATION_SCHEMA_SINGLE_GROUP | polardbx_info_schema | 0 |
+ ---- -------------------- + -------------------- + --------------------------------- + ---------------------- + -------
セットの4列 (0.04秒) 
説明

データベースの格納場所には、シリアル番号が0のデータノードが含まれている必要があります。 この制限は、テーブルおよびパーティションの格納場所には課されない。

パーティション分割されていないテーブルを作成するときにLOCALITY属性を指定する

パーティション分割されていないテーブルを作成するときに、LOCALITY属性を指定して、複数のデータノード間でテーブルの自動シャーディングを有効にすることができます。 非パーティションテーブルのシャードは、非パーティションテーブルの数と各データノードのデータ量に基づいて、データノード上で自動的にバランスされます。

インスタンスに複数のパーティション分割されていないテーブルを作成し、テーブルのLOCALITY属性を "balance_single_table=on" として指定します。 構文の詳細については、「CREATE TABLE (AUTOモード) 」をご参照ください。

例:

テーブルの作成t_sgl1 (
  'id' bigint (11) NOT NULL AUTO_INCREMENT BY GROUP、
  'order_id' varchar(20) DEFAULT NULL、
  'buyer_id 'varchar(20) デフォルトNULL、
  'seller_id 'varchar(20) DEFAULT NULL、
  'order_snapshot' ロングテキストDEFAULT NULL、
  'order_detail' ロングテキストDEFAULT NULL、
  主要なキー ('id') 、
  KEY 'L_i_order ' ('order_id')
) SINGLE locality = 'balance_single_table=on';

テーブルt_sgl2の作成 (
  'id' bigint (11) NOT NULL AUTO_INCREMENT BY GROUP、
  'order_id' varchar(20) DEFAULT NULL、
  'buyer_id 'varchar(20) デフォルトNULL、
  'seller_id 'varchar(20) DEFAULT NULL、
  'order_snapshot' ロングテキストDEFAULT NULL、
  'order_detail' ロングテキストDEFAULT NULL、
  主要なキー ('id') 、
  KEY 'L_i_order ' ('order_id')
) SINGLE locality = 'balance_single_table=on';

テーブルt_sgl3の作成 (
  'id' bigint (11) NOT NULL AUTO_INCREMENT BY GROUP、
  'order_id' varchar(20) DEFAULT NULL、
  'buyer_id 'varchar(20) デフォルトNULL、
  'seller_id 'varchar(20) DEFAULT NULL、
  'order_snapshot' ロングテキストDEFAULT NULL、
  'order_detail' ロングテキストDEFAULT NULL、
  主要なキー ('id') 、
  KEY 'L_i_order ' ('order_id')
) SINGLE locality = 'balance_single_table=on';

テーブルt_sgl4の作成 (
  'id' bigint (11) NOT NULL AUTO_INCREMENT BY GROUP、
  'order_id' varchar(20) DEFAULT NULL、
  'buyer_id 'varchar(20) デフォルトNULL、
  'seller_id 'varchar(20) DEFAULT NULL、
  'order_snapshot' ロングテキストDEFAULT NULL、
  'order_detail' ロングテキストDEFAULT NULL、
  主要なキー ('id') 、
  KEY 'L_i_order ' ('order_id')
) SINGLE locality = 'balance_single_table=on'; 

パーティション分割されていないテーブルを作成したら、SHOW CREATE TABLEステートメントを実行してテーブルに関する情報を表示できます。 パーティション分割されていないテーブルのデータ分布を表示するには、SHOW TOPOLOGYステートメントを実行します。

mysql> SHOW CREATE TABLE 't_sgl1';
+ --------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| TABLE | テーブルの作成 |
+ --------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| t_order | CREATE TABLE 't_sgl1' (
'id' bigint(11) NOT NULL AUTO_INCREMENT、'order_id' varchar(20) DEFAULT NULL、'buyer_id 'varchar(20) デフォルトNULL、'seller_id 'varchar(20) DEFAULT NULL、'order_snapshot' ロングテキスト、'order_detail' ロングテキスト、主要なキー ('id') 、インデックス 'l_i_order ' ('order_id')
) エンジン=InnoDBデフォルト料金=utf8
/* LOCALITY='balance_single_table=on' */ |
+ --------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
セットの1列 (0.05秒)

mysql> SHOW TOPOLOGY 't_sgl1';
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
| 1 | DB1_P00001_GROUP | t_sgl1_92mv_00000 | p1 | db1_p00001 | polardbx-ng28-dn-1 |
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
セットの3列 (0.15秒)

mysql> SHOW TOPOLOGY 't_sgl2';
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
| 1 | DB1_P00002_GROUP | t_sgl2_87fg_00000 | p1 | db1_p00002 | polardbx-ng28-dn-2 |
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
セットの3列 (0.15秒)

mysql> SHOW TOPOLOGY 't_sgl3';
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
| 1 | DB1_P00002_GROUP | t_sgl3_64uj_00000 | p1 | db1_p00001 | polardbx-ng28-dn-1 |
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
セットの3列 (0.15秒)

mysql> SHOW TOPOLOGY 't_sgl4';
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
| 1 | DB1_P00001_GROUP | t_sgl4_71mb_00000 | p1 | db1_p00002 | polardbx-ng28-dn-2 |
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
セットの3列 (0.15秒) 

上記の結果は、パーティション分割されていないテーブルが複数のデータノードにわたって自動的にシャードされることを示しています。

論理テーブルを作成するときにLOCALITY属性を指定する

論理テーブルを作成するときに、テーブルにデータを格納するデータノードを指定できます。 このようにして、テーブル内のデータは、同じデータベース内の他のテーブル内のデータから分離される。 パーティション分割されていないテーブルと、RANGEパーティション分割方法、HASHパーティション分割方法、またはLISTパーティション分割方法を使用してパーティション分割されるテーブルには、LOCALITY属性を指定できます。

構文:

CREATE [PARTITION] TABLE [存在しない場合] tbl_name
    (create_definition, ...)
    [table_options]
    [table_partition_definition]
    [local_partition_definition] 

インスタンスに論理テーブルを作成し、テーブルのLOCALITY属性を指定します。 構文の詳細については、「CREATE TABLE (AUTOモード) 」をご参照ください。

例:

CREATE TAB_order (
  'id' bigint (11) NOT NULL AUTO_INCREMENT BY GROUP、
  'order_id' varchar(20) DEFAULT NULL、
  'buyer_id 'varchar(20) デフォルトNULL、
  'seller_id 'varchar(20) DEFAULT NULL、
  'order_snapshot' ロングテキストDEFAULT NULL、
  'order_detail' ロングテキストDEFAULT NULL、
  主要なキー ('id') 、
  KEY 'L_i_order ' ('order_id')
) エンジン=InnoDBデフォルト料金セット=utf8地域='dn=polardbx-ng28-dn-1、polardbx-ng28-dn-2 '; 

論理テーブルの作成後、SHOW CREATE tableステートメントを実行して、テーブルに関する情報を表示できます。 論理テーブルのデータ分布を表示するには、SHOW TOPOLOGY文を実行します。

mysql> SHOW CREATE TABLE 't_order ';
+ --------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| TABLE | テーブルの作成 |
+ --------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
| t_order | CREATE TABLE 't_order' (
'id' bigint(11) NOT NULL AUTO_INCREMENT、'order_id' varchar(20) DEFAULT NULL、'buyer_id 'varchar(20) デフォルトNULL、'seller_id 'varchar(20) DEFAULT NULL、'order_snapshot' ロングテキスト、'order_detail' ロングテキスト、主要なキー ('id') 、インデックス 'l_i_order ' ('order_id')
) エンジン=InnoDBデフォルト料金=utf8
/* LOCALITY='dn=polardbx-ng28-dn-1、polardbx-ng28-dn-2 '*/ |
+ --------- + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +
セットの1列 (0.05秒)

mysql> SHOW TOPOLOGY 't_order ';
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
| 0 | DB1_P00002_GROUP | t_order_18dV_00001 | p2 | db1_p00002 | polardbx-ng28-dn-2 |
| 1 | DB1_P00001_GROUP | t_order_18dV_00000 | p1 | db1_p00001 | polardbx-ng28-dn-1 |
| 2 | DB1_P00001_GROUP | t_order_18dV_00002 | p3 | db1_p00001 | polardbx-ng28-dn-1 |
+ ---- ------------------ + -------------------- + ---------------- + ----------- -------------------- +
セットの3列 (0.15秒) 
説明
  • 論理テーブルのLOCALITY属性で指定されたデータノードは、論理テーブルを含むデータベースのデータノードセットに含まれている必要があります。

  • パーティション分割されていないテーブルを作成する場合は、論理テーブルのLOCALITY属性に指定できるデータノードは1つだけです。

  • 論理テーブルが論理テーブルグループに属する場合、論理テーブルのLOCALITY属性の値は、テーブルグループ、パーティション、およびパーティショングループのLOCALITY属性の値と同じである必要があります。

  • デフォルトでは、論理テーブル、論理テーブルグループ、論理テーブルのグローバルセカンダリインデックス (GSI) 、およびGSIテーブルグループは、同じLOCALITY属性値を共有します。

論理テーブルのパーティションのLOCALITY属性を指定する

論理テーブルを作成するときは、テーブルの各パーティションのデータノードを指定できます。 このようにして、論理テーブルの異なるパーティションが異なるデータノードに格納される。

例:

テーブルorders_regionを作成する (
 order_id int AUTO_INCREMENTプライマリキー、
 customer_id int,
 国varchar(64) 、
 都市varchar(64) 、
 order_time datetimeがnullではない)
リストコラムによるパーティー (国、都市)
(
  パーティションp1の値 ((「中国」、「上海」)) ローカル='dn=polardbx-ng28-dn-2 '、
  パーティションp2の値 ((「中国」、「北京」)) ローカル='dn=polardbx-ng28-dn-2 '、
  PARTITION p3 VALUES IN (('China a' 、'Hangzhou')) 、
  パートp4の値 ((「中国」、「南京」)) 、
  パートp5の値 ((「中国」、「光章」)) 、
  PARTITION p6 VALUES IN (('China' 、'Shenzhen')) 、
  PARTITION p7 VALUES IN (('China a' 、'Wuhan')) 、
  PARTITION p8 VALUES IN ((「アメリカ」、「ニューヨーク」))
) LOCALITY = 'dn=polardbx-ng28-dn-0、polardbx-ng28-dn-1 ';

論理テーブルの作成後、SHOW CREATE tableステートメントを実行して、テーブルに関する情報を表示できます。 論理テーブルのデータ分布を表示するには、SHOW TOPOLOGY文を実行します。

mysql> SHOW CREATE TABLE 'orders_region';
+ --------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------ +
| TABLE | テーブルの作成 |
+ --------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------ +
| orders_region | CREATE TABLE 'orders_region' (
'order_id' int (11) NOT NULL AUTO_INCREMENT、'customer_id' int (11) DEFAULT NULL、'country' varchar (64) DEFAULT NULL,
'cityy' varchar (64) DEFAULT NULL、'order_time' datetime NOT NULL、プライマリキー ('order_id') 、KEY 'auto_shard_key_country_city '使用するBTREE ('country' 、'city')
) エンジン=InnoDBデフォルト料金=utf8mb4
/* LOCALITY='dn=polardbx-ng28-dn-0、polardbx-ng28-dn-1 '* /
リストコラムによるパーティー (「国」、「都市」)
(PARTITION 'p1' VALUES IN (('China' 、'Shanghai'))) エンジン=InnoDB LOCALITY='dn=polardbx-ng28-dn-2 '、
 PARTITION 'p2' VALUES IN ((「中国」、「北京」)) エンジン=InnoDB LOCALITY='dn=polardbx-ng28-dn-2 '、
 PARTITION 'p3' VALUES IN (('China','Hangzhou')) ENGINE = InnoDB,
 PARTITION 'p4' VALUES IN (('China' 、'Nanj')) ENGINE = InnoDB、
 PARTITION 'p5' VALUES IN (('China a' 、'Guangzhou')) エンジン=InnoDB、
 PARTITION 'p6' VALUES IN (('China' 、'Shenzhen')) エンジン=InnoDB、
 PARTITION 'p7' VALUES IN (('China','Wuhan')) ENGINE = InnoDB,
 PARTITION 'p8' VALUES IN ((「アメリカ」、「ニューヨーク」)) エンジン=InnoDB) |
+ --------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------ +
セットの1列 (0.05秒)

mysql> SHOW TOPOLOGY 'orders_region';
+ ---- ------------------ + -------------------------- + ---------------- + ----------- -------------------- +
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+ ---- ------------------ + -------------------------- + ---------------- + ----------- -------------------- +
| 0 | DB1_P00002_GROUP | orders_region_RlsY_00000 | p1 | db1_p00002 | polardbx-ng28-dn-2 |
| 1 | DB1_P00002_GROUP | orders_region_RlsY_00001 | p2 | db1_p00002 | polardbx-ng28-dn-2 |
| 2 | DB1_P00001_GROUP | orders_region_RlsY_00003 | p4 | db1_p00001 | polardbx-ng28-dn-1 |
| 3 | DB1_P00001_GROUP | orders_region_RlsY_00004 | p5 | db1_p00001 | polardbx-ng28-dn-1 |
| 4 | DB1_P00001_GROUP | orders_region_RlsY_00006 | p7 | db1_p00001 | polardbx-ng28-dn-1 |
| 5 | DB1_P00000_GROUP | orders_region_RlsY_00002 | p3 | db1_p00000 | polardbx-ng28-dn-0 |
| 6 | DB1_P00000_GROUP | orders_region_RlsY_00005 | p6 | db1_p00000 | polardbx-ng28-dn-0 |
| 7 | DB1_P00000_GROUP | orders_region_RlsY_00007 | p8 | db1_p00000 | polardbx-ng28-dn-0 |
+ ---- ------------------ + -------------------------- + ---------------- + ----------- -------------------- +
セットの8行 (0.25秒) 
説明

論理テーブルのパーティションに指定されたデータノードは、テーブルパーティションを含むデータベースのデータノードセットに含まれている必要があります。 これらのデータノードは、論理テーブルのデータノードセットから除外することができる。

データベースオブジェクトのLOCALITY属性の変更

テーブルグループのLOCALITY属性の変更

ビジネス要件に基づいて、テーブルグループのLOCALITY属性を動的に変更できます。

構文:

ALTER TABLEGROUP識別子SET LOCALITY = locality_option
locality_option:
    'dn=storage_inst_id_list'
 |  ''

例:

たとえば、orders_regionテーブルがtg3テーブルグループに含まれている場合、次のステートメントを実行してtg3テーブルグループのLOCALITY属性を変更できます。

ALTER TABLEGROUP 'tg3' SET LOCALITY = 'dn=polardbx-ng28-dn-0 ';

tg3テーブルグループのLOCALITY属性を変更した後、SHOW TOPOLOGYステートメントを実行して、orders_regionテーブルのトポロジ関係を表示できます。

mysql> SHOW TOPOLOGY 'orders_region';
+ ---- ------------------ + -------------------------- + ---------------- + ----------- -------------------- +
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+ ---- ------------------ + -------------------------- + ---------------- + ----------- -------------------- +
| 0 | DB1_P00002_GROUP | orders_region_RlsY_00000 | p1 | db1_p00002 | polardbx-ng28-dn-2 |
| 1 | DB1_P00002_GROUP | orders_region_RlsY_00001 | p2 | db1_p00002 | polardbx-ng28-dn-2 |
| 2 | DB1_P00000_GROUP | orders_region_RlsY_00002 | p3 | db1_p00000 | polardbx-ng28-dn-0 |
| 3 | DB1_P00000_GROUP | orders_region_RlsY_00003 | p4 | db1_p00000 | polardbx-ng28-dn-0 |
| 4 | DB1_P00000_GROUP | orders_region_RlsY_00004 | p5 | db1_p00000 | polardbx-ng28-dn-0 |
| 5 | DB1_P00000_GROUP | orders_region_RlsY_00005 | p6 | db1_p00000 | polardbx-ng28-dn-0 |
| 6 | DB1_P00000_GROUP | orders_region_RlsY_00006 | p7 | db1_p00000 | polardbx-ng28-dn-0 |
| 7 | DB1_P00000_GROUP | orders_region_RlsY_00007 | p8 | db1_p00000 | polardbx-ng28-dn-0 |
+ ---- ------------------ + -------------------------- + ---------------- + ----------- -------------------- +
セットの8行 (0.17秒)

tg3テーブルグループのLOCALITY属性を変更すると、対応するテーブルの作成時にLOCALITY属性を指定しなかったテーブルパーティションのデータノードが変更されます。 対応するテーブルの作成時にLOCALITY属性を指定したテーブルパーティションのデータノードは変更されません。

説明

LOCALITY属性が変更されたテーブルグループまたはパーティショングループのメタデータを変更すると、新しいメタデータがすぐにバックエンドシステムに送信されます。 次に、バックエンドシステムは、テーブルグループ内のパーティションを非同期に移行する移行タスクを生成します。 この例では、バックエンドシステムはREBALANCE TABLEGROUP tg3タスクを実行してパーティションを移行します。 次のステートメントを実行して、information_schema.ddl_planから移行タスクの進行状況を照会できます。

mysql> select * from information_schema.ddl_plan where table_schema = "db1";
---- --------------------- --------------------- ----------- ------------------------------------------------------------------ ----------------------------------------------------------------------------------
| ID | plan_id | job_id | table_schema | ddl_stmt | state | ddl_type | progress | retry_count | result | extras | gmt_created | gmt_modified | resource |
---- --------------------- --------------------- ----------- ------------------------------------------------------------------ ----------------------------------------------------------------------------------
| 1 | 1465819565798723584 | 1465819579241467904 | db1 | REBALANCE TABLEGROUP 'tg3' EXPLAIN=false ASYNC=true DEBUG=false | 成功 | 100 | 0 | | | | 2022-05-24 14:37:58 | 2022-05-24 14:38:11 | tablegroup:tg3 |
---- --------------------- --------------------- ------------ ------------------------------------------------------------------ ---------------------------------------------------------------------------------- --------------------- --------------------- --------------------- --------------------- ---------------- ---------------- + ---------------- ---------------- ---------------- + ---------------- 

パーティショングループのLOCALITY属性の変更

ビジネス要件に基づいて、パーティショングループのLOCALITY属性を動的に変更できます。

構文:

ALTER TABLEGROUP識別子SET PARTITIONS part_name LOCALITY = locality_option
locality_option:
    'dn=storage_inst_id_list'
 |  ''

例:

たとえば、orders_regionテーブルがtg3テーブルグループに含まれ、p3パーティションがorders_regionテーブルに含まれている場合、次のステートメントを実行してp3パーティションのLOCALITY属性を変更できます。

ALTER TABLEGROUP 'tg3' SET PARTITIONS p3 LOCALITY = 'dn=polardbx-ng28-dn-1 ';

p3パーティションのLOCALITY属性を変更した後、SHOW TOPOLOGYステートメントを実行して、orders_regionテーブルのトポロジ関係を表示できます。

mysql> トポロジーorders_regionを表示します。+ ---- ------------------ + -------------------------- + ---------------- + ----------- -------------------- +
| ID | GROUP_NAME | TABLE_NAME | PARTITION_NAME | PHY_DB_NAME | DN_ID |
+ ---- ------------------ + -------------------------- + ---------------- + ----------- -------------------- +
| 0 | DB1_P00002_GROUP | orders_region_RlsY_00000 | p1 | db1_p00002 | polardbx-ng28-dn-2 |
| 1 | DB1_P00002_GROUP | orders_region_RlsY_00001 | p2 | db1_p00002 | polardbx-ng28-dn-2 |
| 2 | DB1_P00001_GROUP | orders_region_RlsY_00002 | p3 | db1_p00001 | polardbx-ng28-dn-1 |
| 3 | DB1_P00000_GROUP | orders_region_RlsY_00003 | p4 | db1_p00000 | polardbx-ng28-dn-0 |
| 4 | DB1_P00000_GROUP | orders_region_RlsY_00004 | p5 | db1_p00000 | polardbx-ng28-dn-0 |
| 5 | DB1_P00000_GROUP | orders_region_RlsY_00005 | p6 | db1_p00000 | polardbx-ng28-dn-0 |
| 6 | DB1_P00000_GROUP | orders_region_RlsY_00006 | p7 | db1_p00000 | polardbx-ng28-dn-0 |
| 7 | DB1_P00000_GROUP | orders_region_RlsY_00007 | p8 | db1_p00000 | polardbx-ng28-dn-0 |
+ ---- ------------------ + -------------------------- + ---------------- + ----------- -------------------- +
セットの8行 (0.11秒) 

テーブルのLOCALITY属性の変更

ビジネス要件に基づいて、テーブルのLOCALITY属性を動的に変更できます。 この操作はデータ移行をトリガーすることに注意してください。

LOCALITY属性が "balance_single_table=on" である非パーティションテーブルをパーティションテーブルに変更するには、再パーティションを実行してLOCALITY属性を明示的に削除する必要があります。 例:

ALTER TABLE t_sgl1 PARTITION BY HASH(ID) PARTITIONS 32 LOCALITY = "";

論理テーブルのLOCALITY属性を変更するには、再分割を実行してLOCALITY属性を直接変更します。 例:

ALTER TABLE t_sgl1 PARTITION BY HASH(ID) PARTITIONS 8 LOCALITY = "dn=dn1";

パーティション変更操作後のLOCALITY属性の値の変更

AUTOモードのデータベースは、ALTER TABLEGROUP操作、テーブルのタイプを変更するために実行される操作、およびテーブルのパーティション分割戦略を変更するために実行される操作を含むパーティション変更操作をサポートします。 詳細については、「ALTER TABLEGROUP」および「テーブルのタイプとパーティショニングルールの変更」をご参照ください。

パーティション変更操作が実行された後、新しいパーティショングループまたはテーブルグループはLOCALITY属性の元の値を継承し、システムはLOCALITY属性の元の値に基づいて新しいテーブルグループまたはパーティショングループのデータ分散を実行します。 LOCALITY属性の値は、次のシナリオで変更されます。

  • テーブルが非パーティションテーブルまたはブロードキャストテーブルに変換された後、テーブルのLOCALITY属性の値は空になります。

  • ホットデータを格納するパーティションが複数のパーティションに分割されると、新しいパーティションのLOCALITY属性値は空になります。

  • LOCALITY属性値が異なる複数のパーティションを1つのパーティションにマージした後、新しいパーティションのLOCALITY属性値は空になります。

パーティション変更操作後のLOCALITY属性の変更:

操作タイプ

オブジェクト

LOCALITY属性の変更

パーティション分割戦略の変更

テーブル

任意

テーブルタイプの変更

テーブル

LOCALITY属性は、非パーティションテーブルがパーティションテーブルに変換された場合にのみ変更されません。

パーティションの移行

パーティショングループ

任意

マージパーティション

パーティショングループ

新しいパーティションは、マージされたパーティションが同じLOCALITY属性値を共有する場合にのみ、マージされたパーティションのLOCALITY属性値を継承します。

パーティションを分割する

パーティショングループ

任意

ホット値でパーティションを分割

パーティショングループ

パーティションからホットデータを抽出

パーティショングループ

パーティションを削除するDrop a partition

パーティショングループ

-

パーティションを追加する

パーティショングループ

任意

LISTパーティション分割方法を使用したパーティションの変更

パーティショングループ

任意

パーティションの名前変更

パーティショングループ

任意

シナリオ

  • データベースを作成するときに、LOCALITY属性を使用して、データを分離する論理データベースのデータノードを指定できます。 データベース内のテーブルとパーティションは、指定されたデータノードに自動的に分散されます。

  • パーティション分割されていないテーブルを作成するときは、LOCALITY属性を使用してテーブルのデータノードを指定できます。 これは、多数の非区分テーブルが存在する場合に、シリアル番号が0であるデータノードに対する高い記憶負荷を回避するのに役立つ。

  • パーティションテーブルを作成するときに、LOCALITY属性を使用してパーティションのデータノードを指定できます。 このようにして、テーブルのパーティションを異なるデータノードに分散させることができる。 たとえば、LISTパーティション分割方法を使用して、データをパーティション分割し、異なるデータノードの異なるリージョンで生成されたデータを格納できます。 詳細については、このトピックの「論理テーブルのパーティションのLOCALITY属性の指定」をご参照ください。

  • データパーティションにホットデータが含まれている場合、パーティションを分割し、LOCALITY属性を使用して、ホットデータパーティションを格納するデータノードを指定できます。 このように、ホットデータは非ホットデータから物理的に分離される。 詳細については、このトピックの「テーブルのLOCALITY属性の変更」をご参照ください。