このトピックでは、自動パーティショニングの仕組みとこの機能の使用方法について説明します。
仕組み
PolarDB-X の透過分散共通テーブルシャーディング機能は、論理データベース内の、MySQL パーティション構文を明示的に使用せずに作成された、パーティション化されていないすべてのテーブルをパーティション化します。次のリストは、自動パーティショニングの仕組みを示しています。
テーブルは、テーブルのプライマリキーによって水平方向にパーティション化されます。プライマリキーが指定されていない場合は、デフォルトのプライマリキー
_drds_implicit_id_が自動的に作成されて使用されます。すべてのインデックスは、自動パーティショニングルールに基づいてグローバルインデックスに変換され、テーブルはインデックスキー列によって水平方向にパーティション化されます。
自動パーティショニング後のデフォルトのパーティション数は、手動で変更することはできません。
シナリオ
この機能は、通常のインデックスをグローバルインデックスに変換します。書き込み操作の場合、グローバルインデックステーブルとプライマリテーブル間のデータ整合性を維持するために分散トランザクションが実行されるため、これによりテーブルの書き込みパフォーマンスが低下する可能性があります。したがって、この機能は、パフォーマンス要件が低く、スタンドアロンの MySQL データベースに基づいて開発されたアプリケーション(迅速なリリースが必要な新しいアプリケーションなど)に適しています。ほとんどの場合、このタイプのサービスでは、少数のデータベースとテーブル、および単純なクエリ(プライマリキーによるポイントクエリなど)が必要です。
自動パーティショニング機能の適切なシナリオの詳細については、「ベストプラクティス」をご参照ください。
前提条件
AUTO データベースのみが、透過分散自動パーティショニング機能をサポートしています。データベースを作成するための SQL 文で
MODE='AUTO'を指定する必要があります。CREATE DATABASE db_name MODE='AUTO';デフォルトでは、AUTO モードのデータベースは手動パーティショニングを使用します。自動パーティショニングを有効にするには、次のグローバルパラメーターを手動で設定する必要があります。
SET GLOBAL AUTO_PARTITION = true;
例
自動パーティショニング機能を使用するデータベースを作成する
PolarDB-X で自動パーティショニング機能を使用する場合は、次の SQL 文を使用してデータベースを作成できます。
CREATE DATABASE autodb2 MODE='AUTO';AUTO ライブラリ透過分散のデフォルトの動作モードは手動パーティショニングです。自動パーティショニング機能を有効にするには、次のグローバルスイッチを手動で実行する必要があります。
SET GLOBAL AUTO_PARTITION=true;複数のパーティション化されていない MySQL テーブルを作成し、テーブルを自動的にパーティション化する
次の SQL 文を実行して、プライマリキーインデックス(idx_name)を含むテーブルを作成します。
CREATE TABLE auto_t1(
id BIGINT NOT NULL auto_increment,
bid INT,
name VARCHAR(30),
birthday datetime,
PRIMARY KEY(id),
INDEX idx_name(name)
);自動パーティショニング機能を使用するデータベースを作成するための完全な文を表示する:
SHOW FULL CREATE TABLE auto_t1;結果の例:
CREATE PARTITION TABLE `auto_t1` (
`id` bigint NOT NULL AUTO_INCREMENT,
`bid` int DEFAULT NULL,
`name` varchar(30) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
GLOBAL INDEX /* idx_name_$578c */ `idx_name` (`name`)
PARTITION BY KEY(`name`,`id`)
PARTITIONS 16,
LOCAL KEY `_local_idx_name` (`name`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 DEFAULT COLLATE = utf8mb4_0900_ai_ci
PARTITION BY KEY(`id`)
PARTITIONS 16結果は、通常のインデックス idx_name が自動パーティショニングルールに基づいてシステムによってグローバルインデックスに変換され、プライマリキー id がパーティショニングのパーティションキーとして使用されていることを示しています。