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

PolarDB:高速な TRUNCATE/DROP TABLE

最終更新日:Nov 09, 2025

PolarDB は、バッファープール内のデータページのクリーンアップメカニズムを最適化することで、コミュニティ版 MySQL における 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=<クラスターのエンドポイント>
    user=<データベースアカウント>
    psw=<データベースのパスワード>
    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 の 2 つのテーブルを作成します。t1 に 8,192 行のデータを挿入し、t2 に 2,097,152 行のデータを挿入します。

    # t1 テーブルを作成し、8,192 行のデータを挿入します。
    row_num=13
    ip=<クラスターのエンドポイント>
    user=<データベースアカウント>
    psw=<データベースのパスワード>
    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=<クラスターのエンドポイント>
    user=<データベースアカウント>
    psw=<データベースのパスワード>
    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 機能を有効にした場合と無効にした場合で、テーブル t1t2 に対して TRUNCATE TABLE 操作を実行します。

テスト結果

高速な TRUNCATE/DROP TABLE 機能を有効にした場合と無効にした場合で、仕様の異なるクラスターでテーブル t1t2 に対する 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 操作についてご質問がある場合は、テクニカルサポートにお問い合わせください。