このトピックでは、HASH、LIST DEFAULT HASH、または RANGE パーティション分割メソッドを使用してパーティション分割されたテーブルのパーティション数を決定する方法について説明します。
HASH パーティション分割
パーティションテーブルを作成する場合は、異なるパーティション数を作成してみて、できるだけ均等にデータを分散できる最適な数を選択できます。次のサンプルコマンドは、異なるパーティション数を評価するのに役立ちます。
テーブルが ID によって 10 個のパーティションに分割された後、各パーティションのデータ量を表示するには、次のコマンドを実行します。
select id%10 as part_id , count(1) from table_name group by id%10;各 ID に対応するデータ量を表示するには、次のコマンドを実行します。
select id, count(1) as cnt from table_name group by shop_id order by cnt desc;
これらのテーブルの結合を容易にするために、異なるパーティションテーブルに同じパーティション構造を使用できます。
テーブルパーティション構造を計画する際には、ビジネスボリュームの増加に伴うシナリオでのパーティションテーブルの要件を考慮してください。
パーティションテーブルの各パーティションのおおよそのデータ量を表示するには、次のコマンドを実行できます。
select * from mysql.innodb_table_stats where table_name like 'table_name#%' order by n_rows desc;
LIST DEFAULT HASH パーティション分割
SaaS のマルチテナントビジネステーブルなどのリストデフォルトハッシュパーティションテーブルの場合、パーティション数を決定するために、次のソリューションを参照できます。
1 つのテナントが 1 つのリストパーティションを使用するか、複数のテナントが 1 つのリストパーティションを共有します。
データ量を評価します。テーブルが 10 億行または 1 TB のデータを超える場合は、テーブルをパーティション分割することをお勧めします。単一パーティションのサイズが 64 TB を超えないようにし、将来のビジネスの成長に対応できるようにパーティションを計画します。
大規模なテナントには専用の LIST パーティションを割り当て、データサイズが類似しているテナントは共有 LIST パーティションにグループ化し、残りのテナントは DEFAULT HASH パーティションを使用して処理できます。たとえば、テナント 1 のデータ量が 10 億行の場合は、専用の LIST パーティションを割り当てます。テナント 2 ~ 11 のデータ量は、1 億行、8,000 万行など、比較的小さいです。これらの 10 個のテナントは、単一の LIST パーティションを共有できます。小規模なテナントの場合、たとえば、合計データ量が 90 億行の 10,000 個のテナントのデータは、DEFAULT HASH パーティションに格納できます。 DEFAULT HASH パーティションは、さらに 9、11、または 13 のサブパーティションに分割できます。
異なるパーティション数を作成してみて、最適な数を選択します。
パーティション数として使用される整数がデータの均等な分散の要件を満たせない場合は、7 や 13 などの素数を使用できます。
これらのテーブルの結合を容易にするために、異なるパーティションテーブルに同じパーティション構造を使用できます。
テーブルパーティション構造を計画する際には、ビジネスボリュームの増加に伴うシナリオでのパーティションテーブルの要件を考慮してください。
パーティションテーブルの各パーティションのおおよそのデータ量を表示するには、次のコマンドを実行できます。
select * from mysql.innodb_table_stats where table_name like 'table_name#%' order by n_rows desc;
RANGE パーティション分割
ほとんどの場合、RANGE パーティション分割は、日、月、年によって実装されます。各パーティションのデータ量は厳密には必要ではなく、主に実際のビジネス要件によって決定されます。