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

PolarDB:IMCIの作成に使用されるDDLステートメントのバッチ取得

最終更新日:May 27, 2024

シナリオによっては、1つ以上のSELECTステートメントに含まれる列だけでなく、サービスまたはモジュールのIMCIを作成する必要があります。 この場合、IMCIを繰り返し作成しないようにするには、最初にdbms_imci.columnar_advise_begin() ストアドプロシージャを呼び出し、次にdbms_imci.columnar_advise() ストアドプロシージャをバッチで呼び出します。 最後に、dbms_imci.columnar_advise_show() ストアドプロシージャを呼び出して、DDLステートメントをバッチ取得できます。

前提条件

  • PolarDBクラスターでは、次のいずれかのバージョンを使用します。

    • リビジョンバージョンが8.0.1.1.30以降のPolarDB for MySQL 8.0.1のクラスター。

    • リビジョンバージョンが8.0.2.2.12以降のPolarDB for MySQL 8.0.2のクラスター。

  • 指定されたテーブルに対する読み取り (SELECT) 権限があること。

構文

  • dbms_imci.columnar_advise_begin()

    dbms_imci.columnar_advise_begin() ストアドプロシージャは、メソッドがDDLステートメントをバッチ取得できるようにするために使用されます。 dbms_imci.columnar_advise() ストアドプロシージャが呼び出されてもDDL文はすぐには表示されませんが、メモリにキャッシュされます。 キャッシュ処理中に重複するテーブル名と列名は記録されません。 最後に、ストアドプロシージャdbms_imci.columnar_advise_show() またはdbms_imci.columnar_advise_show_by_columns() を呼び出して、DDLステートメントを明示的に取得できます。

    説明

    dbms_imci.columnar_advise_begin() およびdbms_imci.columnar_advise_by_columns() ストアドプロシージャを順番に呼び出すことは、dbms_imci.columnar_advise() ストアドプロシージャを呼び出すことと同じです。

  • dbms_imci.columnar_advise_show()

    dbms_imci.columnar_advise() ストアドプロシージャを呼び出して取得したDDLステートメントをテーブルごとに表示します。 重複したテーブル名は表示されません。

  • dbms_imci.columnar_advise_show_by_columns()

    dbms_imci.columnar_advise() ストアドプロシージャを呼び出して取得したDDLステートメントを列ごとに表示します。 重複する列名は表示されません。

  • dbms_imci.columnar_advise_end()

    DDL文をバッチ取得するメソッドを終了し、キャッシュをクリアします。 dbms_imci.columnar_advise_show() およびdbms_imci.columnar_advise_show_by_columns() ストアドプロシージャを繰り返し呼び出してから、dbms_imci.columnar_advise_end() ストアドプロシージャを呼び出します。 dbms_imci.columnar_advise_show() ストアドプロシージャの後にdbms_imci.columnar_advise_end() ストアドプロシージャを呼び出すと、エラーメッセージが返されます。

注意事項

  • dbms_imci.columnar_advise() 中間結果のキャッシュに使用される最大メモリは、imci_columnar_advise_buffer_sizeパラメーターによって決まります。 デフォルト値は8 MBで、通常、数千のテーブルのDDL文をキャッシュできます。 DDLステートメントをさらにキャッシュする場合は、SETステートメントを実行してimci_columnar_advise_buffer_sizeパラメーターを変更できます。 例: SET imci_columnar_advise_buffer_size = 16777216;

  • dbms_imci.columnar_advise_end() ストアドプロシージャが呼び出されない場合でも、リンクが切断されるとdbms_imci.columnar_advise() キャッシュはクリアされます。

t1およびt2の表は、以下の実施例で使用される。

  1. 次のステートメントを実行して、testデータベースに切り替えます。

    使用テスト;
  2. 次のステートメントを実行して、t1およびt2テーブルを作成します。

    create table t1 (a int, b int) engine = innodb;
    作成テーブルt2 (a int, b int) engine = innodb; 
  3. メソッドを有効にして、DDLステートメントをバッチ取得します。

    dbms_imci.columnar_advise_begin();
  4. dbms_imci.columnar_advise() ストアドプロシージャを一括実行します。

    dbms_imci.columnar_adviseを
    呼び出します (t1.a = t2.aグループby t1.b 'のt1 inner join t2から 'select count(t1.a)');
    dbms_imci.columnar_adviseを呼び出します (t1.a = t2.aグループby t1.bのt1 inner join t2から 'select count(t1.a) ');
    dbms_imci.columnar_adviseを呼び出します (t1.a = t2.aグループby t1.bのt1 inner join t2から 'select count(t1.a) ');
    dbms_imci.columnar_adviseを呼び出します ('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b '); 
  5. DDLステートメントを明示的に取得します。

    • dbms_imci.columnar_advise() ストアドプロシージャを呼び出して取得したDDLステートメントをテーブルごとに表示します。

      dbms_imci.columnar_advise_show();

      サンプル結果:

      + ------------------------------------------- +
      | DDL_STATEMENT |
      + ------------------------------------------- +
      | ALTER TABLE test.t1 COMMENT='COLUMNAR=1 '; |
      | ALTER TABLE test.t2 COMMENT='COLUMNAR=1 '; |
      + ------------------------------------------- +
      セットの2列 (0.00秒) 
    • dbms_imci.columnar_advise() ストアドプロシージャを呼び出して取得したDDLステートメントをテーブルごとに表示します。

      call dbms_imci.columnar_advise_show_by_columns();

      サンプル結果:

      + ------------------------------------------------------------------------------------------------------------------------------------------- +
      | DDL_STATEMENT |
      + ------------------------------------------------------------------------------------------------------------------------------------------- +
      | ALTER TABLE test.t1 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1 ', MODIFY COLUMN b int(11) DEFAULT NULL COMMENT 'COLUMNAR=1'; |
      | ALTER TABLE test.t2 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1 '; |
      + ------------------------------------------------------------------------------------------------------------------------------------------- +
      セットの2列 (0.00秒) 
  6. メソッドを終了して、DDL文をバッチ取得し、キャッシュをクリアします。

    dbms_imci.columnar_advise_end() を呼び出します。

    サンプル結果:

    クエリOK、影響を受ける0行 (0.11秒)