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

PolarDB:高速な TRUNCATE/DROP TABLE

最終更新日:Oct 11, 2026

PolarDB は、バッファープール内のデータページをクリーンアップするメカニズムを最適化します。これにより、MySQL Community Edition における TRUNCATE TABLE や DROP TABLE といった DDL 操作の実行が遅いという問題が解決され、フルスキャンによるパフォーマンスのボトルネックが回避されます。大容量メモリを搭載した、または高負荷のクラスターでは、この最適化によって DDL 実行時間が大幅に短縮され、システムのパフォーマンスと安定性が向上します。

制約事項

お使いの PolarDB for MySQL クラスターは、次のいずれかの条件を満たす必要があります。

  • MySQL 5.7、リビジョンバージョン 5.7.1.0.19 以降。

  • MySQL 8.0.1、リビジョンバージョン 8.0.1.1.50 以降。

  • MySQL 8.0.2、リビジョンバージョン 8.0.2.2.30.1 以降。

説明

クラスターのバージョンを確認するには、「PolarDB for MySQL エンジンバージョンのリリースノート」をご参照ください。

使用方法

loose_innodb_flush_pages_using_space_id パラメーターを使用して、TRUNCATE/DROP TABLE の高速化機能を有効にできます。手順については、「クラスターパラメーターとノードパラメーターの設定」をご参照ください。次の表に、このパラメーターについて説明します。

パラメーター

レベル

説明

loose_innodb_flush_pages_using_space_id

グローバル

TRUNCATE/DROP TABLE の高速化機能を有効にするかどうかを指定します。有効値:

  • ON:TRUNCATE/DROP TABLE の高速化機能を有効にします。

  • OFF:TRUNCATE/DROP TABLE の高速化機能を無効にします。

パフォーマンス テスト

このトピックでは、MySQL 5.7 を使用して、TRUNCATE/DROP TABLE の高速化機能を有効にした場合と無効にした場合で、仕様の異なるクラスターにおける TRUNCATE TABLE 操作の実行効率にどのような影響があるかを比較します。

テスト方法

  1. 次のコマンドを実行して、仕様の異なるクラスターのバッファープールを埋めます。これにより、バッファープールが TRUNCATE TABLE 操作の実行効率に影響を与えるのを防ぎます。

    ip=<cluster_endpoint>
    user=<database_account>
    psw=<database_password>
    port=<database_port>
    MYSQL="mysql -h $ip -P $port -u$user -p$psw -vvv -e"
    $MYSQL "create database test;"
    $MYSQL "use test;create table if not exists t3 (a bigint,b char(250),c char(250),d char(250),e char(250)) charset=latin1;"
    $MYSQL "use test;insert into t3 values(1,repeat('x', 255),repeat('x', 255),repeat('x', 255),repeat('x', 255));"
    for ((i=1; i<=32; i+=1))
    do
       $MYSQL --host=$ip -p$psw --port=$port -u$user -vvv -e "use test;insert into t3 select * from t3;"
    done
    $MYSQL "use test; select count(*) from t3;"
  2. 切り捨てるテーブル t1 と t2 を作成し、それぞれに 8,192 行と 2,097,152 行のデータを挿入します。

    # t1 テーブルを作成し、8,192 行のデータを挿入します。
    row_num=13
    ip=<cluster_endpoint>
    user=<database_account>
    psw=<database_password>
    port=<database_port>
    MYSQL="mysql -h $ip -P $port -u$user -p$psw -vvv -e"
    $MYSQL "use test;create table if not exists t1 (a bigint,b char(250),c char(250),d char(250),e char(250)) charset=latin1;"
    $MYSQL "use test;insert into t1 values(1,repeat('x', 255),repeat('x', 255),repeat('x', 255),repeat('x', 255));"
    for ((i=1; i<=$row_num; i+=1))
    do
       $MYSQL "use test;insert into t1 select * from t1;"
    done
    # t2 テーブルを作成し、2,097,152 行のデータを挿入します。
    row_num=21
    ip=<cluster_endpoint>
    user=<database_account>
    psw=<database_password>
    port=<database_port>
    MYSQL="mysql -h $ip -P $port -u$user -p$psw -vvv -e"
    $MYSQL "use test;create table if not exists t2 (a bigint,b char(250),c char(250),d char(250),e char(250)) charset=latin1;"
    $MYSQL "use test;insert into t2 values(1,repeat('x', 255),repeat('x', 255),repeat('x', 255),repeat('x', 255));"
    for ((i=1; i<=$row_num; i+=1))
    do
       $MYSQL "use test;insert into t2 select * from t2;"
    done
  3. 仕様の異なるクラスターで、TRUNCATE/DROP TABLE の高速化機能を有効または無効にし、テーブル t1 と t2 に対して TRUNCATE TABLE 操作を実行します。

テスト結果

仕様の異なるクラスターで、TRUNCATE/DROP TABLE の高速化機能を有効にした場合と無効にした場合のテーブル t1 と t2 の TRUNCATE TABLE 実行時間を記録します。次の表にテスト結果を示します。

クラスターの仕様

バッファープール (GB)

t1

t2

ON (秒)

OFF (秒)

改善率

ON (秒)

OFF (秒)

改善率

64 コア、512 GB

374

0.01

5.2

99.81%

0.11

9.48

98.84%

32 コア、256 GB

192

0.02

2.45

99.18%

0.1

2.65

96.23%

16 コア、128 GB

96

0.01

1.73

99.42%

0.12

1.86

93.55%

8 コア、64 GB

42

0.01

0.73

98.63%

0.12

0.79

84.81%

4 コア、32 GB

24

0.02

0.45

95.56%

0.13

0.53

75.47%

4 コア、16 GB

12

0.03

0.23

86.96%

0.12

0.35

65.71%

上記の表から、TRUNCATE/DROP TABLE の高速化機能を有効にすると、TRUNCATE TABLE 操作の実行効率が大幅に向上することがわかります。

お問い合わせ

DDL 操作についてご質問がある場合は、「お問い合わせ」をご利用ください。