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

PolarDB:共通のテーブルのsharding

最終更新日:Jan 23, 2025

概要

PolarDB-Xの透過的分散共通テーブルシャーディング機能は、MySQLパーティション構文がテーブルの作成に明示的に使用されているかどうかに基づいて、論理データベース内のすべてのテーブルをシャードします。 次のリストと図は、一般的なテーブルシャーディングの仕組みを示しています。

  • 論理テーブルのパーティション定義がMySQLで明示的に指定されていない場合、テーブルはパーティション分割されていないテーブルとして使用され、負荷のバランスを取るためにPolarDB-Xの異なるデータノードにランダムに分散されます。

  • 論理テーブルのパーティション定義がMySQLで明示的に指定されている場合、テーブルはパーティションテーブルとして使用され、異なるデータノードに均等に分散されます。

シナリオ

この機能は、元のサービスのすべてのMySQLテーブルをシャードし、テーブルをデータノードに自動的に割り当てます。 これにより、単一サーバーリソースのボトルネックが解決され、負荷が分散されます。 この機能は、アプリケーションで多数のデータベースとテーブルが使用されているシナリオに適しています。 この機能は、結合関係が少ないテーブルに適しています。

共通テーブルシャーディング機能を使用するデータベースの作成

PolarDB-Xで共通のテーブルシャーディング機能を使用する場合は、次のSQL文を使用してデータベースを作成できます。

CREATE DATABASE autodb1 MODE='auto' DEFAULT_SINGLE='on';
説明

PolarDBコンソールでAUTOモードでデータベースを作成する場合、システム生成SQLにDEFAULT_SINGLE='on' パラメーターが自動的に含まれることはありません。 共通のテーブルシャーディング機能を使用するデータベースを作成する場合は、上記のSQL文を手動で実行します。 詳細については、「CREATE DATABASE」をご参照ください。

共通のテーブルシャーディング機能を使用するデータベースを作成するための完全なステートメントを表示します。

mysql> show create database autodb1;
+----------+------------------------------------------------------------------------------------------------------------------+
| DATABASE | CREATE DATABASE                                                                                                  |
+----------+------------------------------------------------------------------------------------------------------------------+
| autodb1  | CREATE DATABASE `autodb1` CHARSET = `utf8mb4` COLLATE = `utf8mb4_general_ci` MODE = 'auto' DEFAULT_SINGLE = 'on' |
+----------+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

パーティション化されていない複数のMySQLテーブルを作成し、テーブルを自動的にシャードします

次のSQL文を使用して、my_autodbデータベースに複数のテーブルを作成できます。

CREATE TABLE sin_t1(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime,
 primary key(id)
);

CREATE TABLE sin_t2(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime,
 primary key(id)
);

CREATE TABLE sin_t3(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime,
 primary key(id)
);

CREATE TABLE sin_t4(
 id bigint not null auto_increment, 
 bid int, 
 name varchar(30),
 birthday datetime,
 primary key(id)
);

シャードテーブルのトポロジの表示

SHOW TOPOLOGY FROM #tableNameステートメントを使用して、テーブルの分布を表示できます。

sin_t1:

SHOW TOPOLOGY FROM sin_t1\G
               ID: 0
       GROUP_NAME: AUTODB1_P00000_GROUP
       TABLE_NAME: sin_t1_HnMx
   PARTITION_NAME: p1
SUBPARTITION_NAME: 
      PHY_DB_NAME: autodb1_p00000
            DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default

sin_t2:

SHOW TOPOLOGY FROM sin_t2\G
              ID: 0
       GROUP_NAME: AUTODB1_P00001_GROUP
       TABLE_NAME: sin_t2_IT7l
   PARTITION_NAME: p1
SUBPARTITION_NAME: 
      PHY_DB_NAME: autodb1_p00001
            DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default

sin_t3:

SHOW TOPOLOGY FROM sin_t3\G
               ID: 0
       GROUP_NAME: AUTODB1_P00000_GROUP
       TABLE_NAME: sin_t3_HmtN
   PARTITION_NAME: p1
SUBPARTITION_NAME: 
      PHY_DB_NAME: autodb1_p00000
            DN_ID: polardbx-storage-0-master
STORAGE_POOL_NAME: _default

sin_t4:

SHOW TOPOLOGY FROM sin_t4\G
               ID: 0
       GROUP_NAME: AUTODB1_P00001_GROUP
       TABLE_NAME: sin_t4_ab7e
   PARTITION_NAME: p1
SUBPARTITION_NAME: 
      PHY_DB_NAME: autodb1_p00001
            DN_ID: polardbx-storage-1-master
STORAGE_POOL_NAME: _default

上記の表のSHOW TOPOLOGY文の結果に従って、sin_t1とsin_t3がpolardbx-storage-0-masterデータノードに配布されます。 sin_t2とsin_t4はpolardbx-storage-1-masterデータノードに分配される。

使用上の注意

複数のデータノード間で共通のテーブルがシャードされると、テーブルに関連するJOIN操作のパフォーマンスが影響を受ける可能性があります。 JOIN動作のためのデータは、異なるDNにわたって分散され得る。 その結果、JOIN動作はもはやDNに効率的にプッシュダウンされない可能性がある。

論理テーブルにMySQLパーティーニングスキームを明示的に指定しない場合、テーブルはPolarDB-Xインスタンスの異なるノードにランダムに分散されます。 各テーブルシャードのデータ量はさまざまです。 その結果、各ノードで使用されるストレージスペースが異なる可能性があります。