OceanBase logo

OceanBase

トランザクション処理、分析、AIワークロードに最適な分散データベース

デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

ドキュメント

会社概要

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

法的情報

お問い合わせ

日本 - 日本語
International - English
中国站 - 简体中文
クラウドで始める

トランザクション処理、分析、AIワークロードに最適な分散データベース

デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

法的情報

お問い合わせ

クラウドで始める
编组
すべての製品
    • データベース
    • アイコンOceanBaseデータベース
アイコン

OceanBaseデータベース

V4.3.5

    OceanBase logo

    AI時代を支える分散データベース

    日本 - 日本語
    International - English
    中国站 - 简体中文
    プロダクト
    OceanBase Cloudエンタープライズ版コミュニティ版OceanBase seekdb
    会社概要
    OceanBaseについて法的情報お問い合わせ
    公式アカウント
    ConnpassXQiitaLumaGitHub

    © OceanBase 2026. All rights reserved

    クラウドサービス契約個人情報保護ポリシーセキュリティ
    お問い合わせ
    ドキュメントフィードバック
    1. ホーム
    2. OceanBaseデータベース
    3. V4.3.5
    アイコンOceanBaseデータベース
    V 4.3.5
    • V 4.3.5

    自動並列度 Auto DOP

    最終更新日:2026-04-09 02:53:56  更新
    シェア
    このページの内容
    Auto DOPとは
    なぜAUTO DOPを選択するのか?
    Auto DOPポリシーを有効にするにはどうすればよいですか?
    Auto DOPと他の並列化有効化方法との関係
    Auto DOPを有効にする必要があるかどうかを判断するにはどうすればよいでしょうか?
    Auto DOP戦略におけるDOP選択行動への介入方法は?
    parallel_min_scan_time_thresholdパラメータの設定
    parallel_degree_limitパラメータの設定
    Auto DOPの使用シナリオ
    シナリオ1:クエリ性能の極限までの最適化
    シナリオ2:システム全体の性能最適化
    関連ドキュメント

    折りたたみ

    シェア

    Auto DOPとは

    OceanBaseデータベースのオプティマイザーにおける並列度DOP(Degree of Parallel)の選択戦略は、現在AUTOモードとMANUALモードに分かれています。AUTOモードを選択することがAuto DOPです。

    なぜAUTO DOPを選択するのか?

    MANUAL モードでは、手動で並列度を指定できます。一つの方法として、システム変数を使用して現在のセッション内のすべての実行クエリに対してパラレル実行を有効にし、並列度を指定することができます。しかし、これは並列処理を必要としない、または高いDOPを使用する必要がないクエリに対しても余分なパラレル実行のオーバーヘッドをもたらし、パフォーマンスの低下を引き起こす可能性があります。もう一つの方法として、ヒントを使用して特定のクエリの並列度を指定することができますが、これには各業務クエリについて個別に検討する必要があり、多数の業務クエリが存在する場合には実行不可能です。

    手動で並列度を指定する際の不便さと制限に基づき、AUTO モードのオプティマイザーはクエリの実際の状況に応じて、自動的にパラレル実行を有効にし、並列度を決定することができます。

    OceanBaseデータベースのクエリオプティマイザーのAuto DOP機能は、クエリ計画を生成する際にクエリの実行に必要な時間を評価し、並列処理を有効にするかどうか、および現在のクエリに適した並列度を自動的に決定します。これにより、手動で並列度を指定することによって引き起こされるパフォーマンスの低下問題を回避できます。

    Auto DOPポリシーを有効にするにはどうすればよいですか?

    OceanBaseデータベースのオプティマイザーは、システム変数parallel_degree_policyを使用して、GLOBALおよびSESSIONレベルでのAuto DOP選択ポリシー設定を行うことができます。また、より高い優先順位を持つHintを使用して、クエリレベルでのDOP選択ポリシー設定も可能です。設定方法は以下のとおりです:

    /* GLOBALレベルでAuto DOPを有効にする */
    SET global parallel_degree_policy = AUTO;
    
    /* SESSIONレベルでAuto DOPを有効にする */
    SET session parallel_degree_policy = AUTO;
    SET parallel_degree_policy = AUTO;
    
    /* GLOBALレベルでAuto DOPを無効にする */
    SET global parallel_degree_policy = MANUAL;
    
    /* SESSIONレベルでAuto DOPを無効にする */
    SET session parallel_degree_policy = MANUAL;
    SET parallel_degree_policy = MANUAL;
    
    /* Hintを使用してクエリレベルでAuto DOPを有効にする */
    SELECT /*+PARALLEL(AUTO)*/ * FROM ...;
    
    /* Hintを使用してクエリレベルでAuto DOPを無効にする */
    SELECT /*+PARALLEL(MANUAL)*/ * FROM ...;
    SELECT /*+PARALLEL(8)*/ * FROM ...;
    

    Auto DOPと他の並列化有効化方法との関係

    並列化を有効にする複数の方法について、優先順位の詳細は並列化有効化方法と優先順位を参照してください。

    Auto DOPを有効にすると、オプティマイザーはSELECT/DELETE/UPDATE/INSERTなどのさまざまな操作で並列処理を有効にできます。また、DELETE/UPDATE/INSERTなどのデータメンテナンス操作では、並列処理を有効にすると自動的にPDMLが使用されるため、_enable_parallel_dmlを設定してPDMLを有効にする必要はありません。

    Auto DOPを有効にする必要があるかどうかを判断するにはどうすればよいでしょうか?

    Auto DOP機能を有効にするには、システムの業務負荷タイプを評価し、関連するシステム変数を適切に設定する必要があります。そうでない場合、有効化すると逆効果となり、システムに大きなリスクをもたらす可能性があります。

    Auto DOPは、クエリ実行コストに基づいて評価し、応答時間(RT)の短縮を目標に並列処理の有効化およびDOPの計算を決定します。業務負荷にユーザーが関心を持たない低速クエリが含まれている場合、この機能を有効にすると、これらのクエリが並列方式で実行され、高い同時実行度を得る可能性があります。これらのクエリのパラレル実行はシステムの並列リソースを占有し、通常の同時実行処理や応答時間の最適化が必要な他のクエリに干渉します。これらのクエリが過剰なリソースを占有すると、システムのCPU負荷が急激に上昇し、通常の業務クエリに深刻な影響を与えます。このような場合は、業務負荷を評価し、適切なリソース分離戦略を用いて対処する必要があります。リソース分離の概要のリソース分離の説明を参照してから、Auto DOP機能を使用するかどうかを決定してください。

    さらに、Auto DOPは現在のクエリ応答時間(RT)の目標のみを最適化し、システム内に多数の同時実行処理が必要なクエリシナリオが存在することを考慮しません。そのため、実際の業務システムでAuto DOP機能を使用する場合は、実際の最適化目標に基づいて関連するシステム変数を目的に応じて調整する必要があります。以下のAuto DOPの使用シナリオに記載されているシナリオ1:クエリパフォーマンスの極限までの最適化およびシナリオ2:システムパフォーマンスの最適化を参照してください。

    Auto DOP戦略におけるDOP選択行動への介入方法は?

    Auto DOP戦略では、2つの関連システム変数parallel_degree_limitとparallel_min_scan_time_thresholdの値が取得されるDOPサイズに影響を与えます。異なるデプロイメントリソースやビジネスワークロードの条件下で、必要に応じて調整する必要があります。

    parallel_min_scan_time_thresholdパラメータの設定

    システム変数parallel_min_scan_time_thresholdは、Auto DOP戦略において並列度を計算するためのパラメータであり、ベーステーブルスキャンで並列処理を有効にするための参照実行時間を示します。ベーステーブルスキャンの評価実行時間がこの設定値を超えると、ベーステーブルスキャンで並列処理が有効になり、この設定値を用いて適切な並列度が計算されます。変数のデフォルト値は1000で、単位はミリ秒、最小値は10です。

    parallel_min_scan_time_thresholdの値を小さくすることで、並列スキャンの有効化条件を緩和し、評価実行時間が短いベーステーブルスキャンでも並列処理を利用できるようになります。また、データ量が比較的固定されているテーブルに対して、より効率的な並列スキャンを実現できます。

    Auto DOPを有効にすると、多数のクエリが高い並列度で実行され、システムリソースを大量に消費する可能性があるため、このパラメータはデフォルトで慎重な設定が採用されています。そのため、Auto DOPを有効にする際には、システムの実際の負荷状況に応じてこのパラメータを適切に調整し、クエリの効率を向上させつつもシステムの安定性に影響を与えないようにする必要があります。例えば、parallel_min_scan_time_thresholdを20または10に調整することで、一部の単一テーブルスキャンクエリの並列度を4または6に引き上げ、クエリ性能を最適化できます。

    設定例は以下のとおりです:

    /* GLOBALレベルのAuto DOP戦略のDOP最大値を設定 */
    SET GLOBAL parallel_degree_limit = 64;
    
    /* SESSIONレベルのAuto DOP戦略のDOP最大値を設定 */
    SET SESSION parallel_degree_limit = 64;
    SET parallel_degree_limit = 64;
    
    /* GLOBALレベルのAuto DOP戦略のDOPを設定 */
    SET GLOBAL parallel_min_scan_time_threshold = 100;
    
    /* SESSIONレベルのAuto DOP戦略のDOPを設定 */
    SET SESSION parallel_min_scan_time_threshold = 100;
    SET parallel_min_scan_time_threshold = 100;
    

    適用例は以下のとおりです:

    explain select /*+parallel(auto)*/ * from t1;
    
    -- パラメータを20に設定すると、最終的に使用されるDOPは4で、並列処理を有効にした後のベーステーブルスキャンの評価コストは12msになります
    set parallel_min_scan_time_threshold = 20;
    =========================================================
    |ID|OPERATOR             |NAME    |EST.ROWS|EST.TIME(us)|
    ---------------------------------------------------------
    |0 |PX COORDINATOR       |        |512000  |619089      |
    |1 |└─EXCHANGE OUT DISTR |:EX10000|512000  |230501      |
    |2 |  └─PX BLOCK ITERATOR|        |512000  |12189       |
    |3 |    └─TABLE FULL SCAN|t1      |512000  |12189       |
    =========================================================
    Outputs & filters:
    -------------------------------------
      0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3, t1.c4)]), filter(nil), rowset=256
      1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3, t1.c4)]), filter(nil), rowset=256
          dop=4
    
    -- パラメータを10に設定すると、最終的に使用されるDOPは6で、並列処理を有効にした後のベーステーブルスキャンの評価コストは8msになります
    set parallel_min_scan_time_threshold = 10;
    =========================================================
    |ID|OPERATOR             |NAME    |EST.ROWS|EST.TIME(us)|
    ---------------------------------------------------------
    |0 |PX COORDINATOR       |        |512000  |542256      |
    |1 |└─EXCHANGE OUT DISTR |:EX10000|512000  |153667      |
    |2 |  └─PX BLOCK ITERATOR|        |512000  |8126        |
    |3 |    └─TABLE FULL SCAN|t1      |512000  |8126        |
    =========================================================
    Outputs & filters:
    -------------------------------------
      0 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3, t1.c4)]), filter(nil), rowset=256
      1 - output([INTERNAL_FUNCTION(t1.c1, t1.c2, t1.c3, t1.c4)]), filter(nil), rowset=256
          dop=6
    

    parallel_degree_limitパラメータの設定

    parallel_degree_limitシステム変数は、Auto DOPで許可される最大並列度を制限するために使用されます。この値を0に設定すると、自動的に取得される並列度に制限がかけられなくなり、これがデフォルト値でもあります。デフォルトでは、オプティマイザーはテナントのCPUおよびシステム変数parallel_servers_targetに基づいて最大並列度を制限します。

    システムでAuto DOPが有効になっている場合、大きな並列度を必要とするクエリが多数発生し、システム負荷が高くなると、parallel_degree_limitを設定して許可される最大並列度をさらに制限できます。この場合、必要に応じてparallel_degree_limitを特定のCPU値より小さい値に設定できます。

    parallel_min_scan_time_thresholdセクションで説明したクエリ例では、parallel_degree_limitを4に、parallel_min_scan_time_thresholdを10に設定しても、クエリは依然として最大並列度4しか使用できません。

    Auto DOPの使用シナリオ

    Auto DOP機能は、オプティマイザーがクエリ操作に対して並列処理を積極的に有効化し、実行効率を向上させることを可能にします。しかし、並列度の規模は特定のシステム変数によって制約されるため、異なる使用シナリオにおいては、パフォーマンスを最適化するためにこれらのパラメータを細かく調整する必要があります。

    シナリオ1:クエリ性能の極限までの最適化

    データベースの負荷が低く、他に顕著なクエリストレスがない場合、テナントで利用可能なすべての並列リソースを活用して最適なクエリ性能を実現したい場合は、Auto DOPの参照実行時間しきい値を最低に設定し、最大DOPに制限をかけないことを推奨します。対応するパラメータ設定は以下のとおりです:

    ALTER SYSTEM SET parallel_degree_policy = AUTO;
    ALTER SYSTEM SET parallel_degree_limit = 0; -- 最大DOPに制限をかけないことを意味します
    ALTER SYSTEM SET parallel_min_scan_time_threshold = 10; -- 10ミリ秒
    

    この構成により、オプティマイザーは十分に低い実行時間しきい値で並列処理を有効化し、可能な限り最大のDOPを使用してクエリを高速化します。

    シナリオ2:システム全体の性能最適化

    データベースに大量の同時クエリ負荷がある場合、多くのクエリが高いDOPを使用すると、システムの並列リソースが不足し、クエリキューの待機などの問題が発生します。大量の高並列度クエリによるシステムリソースの占有を避けるために、クエリメカニズムのパフォーマンス最適化に関するパラメータを調整できます:

    • parallel_degree_limit の値を低下させ(システムのCPUコア数より小さい値に設定)、Auto DOPが使用する最大DOPを制限します。
    • parallel_min_scan_time_threshold の値を増加させることで、パラレル実行のトリガー感度を低下させ、並列リソースの利用率を削減します。

    例えば、最大DOPを32に制限し、評価実行時間が20ミリ秒を超えるクエリに対してのみ並列処理を有効にする場合、パラメータ設定は以下のとおりです:

    ALTER SYSTEM SET parallel_degree_policy = AUTO;
    ALTER SYSTEM SET parallel_degree_limit = 32;
    ALTER SYSTEM SET parallel_min_scan_time_threshold = 20; -- 20ミリ秒
    

    上記の設定は、システムレベルでクエリ性能とリソース割り当てのバランスを取り、データベース全体の応答性と安定性を最適化するのに役立ちます。

    関連ドキュメント

    パラレル起動方法と優先順位

    前のトピック

    OceanBaseのパラレル実行構成方法と優先順位ルール
    最後

    次のトピック

    パラレルクエリ
    次
    このページの内容
    Auto DOPとは
    なぜAUTO DOPを選択するのか?
    Auto DOPポリシーを有効にするにはどうすればよいですか?
    Auto DOPと他の並列化有効化方法との関係
    Auto DOPを有効にする必要があるかどうかを判断するにはどうすればよいでしょうか?
    Auto DOP戦略におけるDOP選択行動への介入方法は?
    parallel_min_scan_time_thresholdパラメータの設定
    parallel_degree_limitパラメータの設定
    Auto DOPの使用シナリオ
    シナリオ1:クエリ性能の極限までの最適化
    シナリオ2:システム全体の性能最適化
    関連ドキュメント