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

ApsaraDB for SelectDB:Star Schema Benchmark を使用したインスタンスのパフォーマンスのテスト

最終更新日:Dec 20, 2025

ApsaraDB for SelectDB は、パフォーマンス専有型で使いやすいデータ分析サービスを提供します。ワイドテーブル集約、複数テーブル結合、高同時実行ポイントクエリなどのシナリオで優れたパフォーマンスを発揮します。このトピックでは、SSB 標準テストと SSB フラットテストを使用して、1000 GB の Star Schema Benchmark (SSB) テストデータセットにおける SelectDB のパフォーマンスを評価する方法について説明します。

概要

Star Schema Benchmark (SSB) は、データウェアハウスシナリオ向けの軽量なパフォーマンステストデータセットです。SSB は、Transaction Processing Performance Council - H (TPC-H) ベンチマークに基づいた、簡略化されたスタースキーマデータセットを提供します。主にスタースキーマにおける複数テーブル結合クエリのパフォーマンスをテストします。業界では、クエリエンジンのパフォーマンスをテストするために、SSB をフラット化してワイドテーブルモデル (SSB フラット) にすることも一般的です。

重要

SSB を含む標準テストデータセットは、実際のビジネスシナリオとは大きく異なることがよくあります。一部のテストでは、特定のデータセットに対するパラメーターチューニングも行われます。したがって、標準テストの結果は、特定のシナリオにおけるデータベースのパフォーマンスを反映するにすぎません。実際のビジネスデータを使用して、さらなるテストを実施する必要があります。

事前準備

ステップ 1:宛先インスタンスの準備

  1. インスタンスの準備

    宛先インスタンスがすでにある場合は、その構成が次の要件を満たしていることを確認してください。

    宛先インスタンスがない場合は、インスタンスを作成します。

    このトピックのパフォーマンステストで使用されるインスタンスは、次の要件を満たしています。

    • カーネルバージョンが 4.1 以降であること。

      宛先インスタンスのカーネルバージョンが 4.1 より前の場合は、インスタンスをアップグレードする必要があります。詳細については、「カーネルバージョンのアップグレード」をご参照ください。

    • 仕様は 96 コア、384 GB メモリ以上である必要があります。このテストでは、96 コア、384 GB メモリのインスタンスを使用します。

    • クラスターキャッシュ領域は 1200 GB 以上である必要があります。このテストでは、1200 GB のキャッシュ領域を使用します。

  2. streaming_load_max_mb パラメーターを最大値に設定します。

    テスト中、ツールはストリームロードを使用して SelectDB にデータをアップロードします。このテストのデータ量は、デフォルトのストリームロードの上限である 10,240 MB を超えます。BE の streaming_load_max_mb パラメーターを最大値の 10,240,000 MB に設定する必要があります。パラメーターの変更方法の詳細については、「パラメーター設定」をご参照ください。

  3. テストデータ用のターゲットデータベースを作成します。

    ターゲットデータベースがすでにある場合は、この操作をスキップできます。

    1. インスタンスに接続します。詳細については、「MySQL クライアントを使用した ApsaraDB for SelectDB インスタンスへの接続」をご参照ください。

    2. データベースを作成します。

      このテストでは、test_db という名前のターゲットデータベースを使用します。次の文を実行します。

      CREATE DATABASE test_db;

ステップ 2:テストサーバーの準備

重要

以下の依存関係インストールスクリプトは Linux サーバー用です。サーバーが異なるオペレーティングシステムを使用している場合は、インストールスクリプトを適宜変更する必要があります。

注意事項

サーバーに関する以下の点にご注意ください。

  • サーバー上で Git を使用して SSB テストツールをダウンロードする予定の場合は、サーバーのパブリックエンドポイントを有効にする必要があります。

    • 新しい Elastic Compute Service (ECS) インスタンス:ECS インスタンスを購入する際に、[パブリック IP][パブリック IPv4 アドレスの割り当て] を選択します。

    • パブリックエンドポイントのない既存の ECS インスタンス:ECS インスタンスのパブリックエンドポイントを有効にする方法については、「パブリックエンドポイントの有効化」をご参照ください。

  • このテストでは約 1000 GB のデータファイルが生成されます。サーバーに十分なディスク領域があることを確認してください。

手順

  1. 宛先サーバーを作成します。

    宛先サーバーがすでにある場合は、このステップをスキップできます。

    宛先サーバーがない場合は、カスタム ECS インスタンスを作成し、イメージに Alibaba Cloud Linux を選択します。

  2. MySQL クライアントの依存関係をインストールします。

    yum install mysql
  3. (オプション) Git をインストールします。

    このテストでは、Git を使用して SSB ツールをダウンロードします。他の方法で SSB ツールをすでに入手しており、手動でサーバーにアップロードする予定の場合は、このステップをスキップできます。

    yum install git

ステップ 3:ネットワーク接続の確保

SSB テストツールがインストールされる宛先サーバーが SelectDB インスタンスに接続できることを確認してください。

  1. SelectDB インスタンスのパブリックエンドポイントを申請します。詳細については、「パブリックエンドポイントの申請と解放」をご参照ください。

    SSB テストツールの宛先サーバーが、ApsaraDB for SelectDB インスタンスと同じ VPC 内にある Alibaba Cloud サーバーである場合は、このステップをスキップできます。

  2. SSB テストツールの宛先サーバーの IP アドレスを ApsaraDB for SelectDB インスタンスのホワイトリストに追加します。詳細については、「ホワイトリストの設定」をご参照ください。

ステップ 4:テストデータセットの理解

このテストでは、SSB は 1000 GB のデータを生成し、それを SelectDB にインポートして SelectDB のパフォーマンスをテストします。次のセクションでは、1000 GB のテストデータセット内のデータテーブルについて説明します。

SSB テーブル名

行数

注釈

lineorder

5999989709

注文詳細テーブル。

customer

30000000

顧客情報テーブル。

part

2000000

部品情報テーブル。

supplier

2000000

サプライヤー情報テーブル。

dates

2556

日付テーブル。

lineorder_flat

5999989709

フラット化されたワイドテーブル。

操作手順

重要

以下のスクリプトは Linux サーバー用です。サーバーが異なるオペレーティングシステムを使用している場合は、スクリプトを適宜変更する必要があります。

ステップ 1:宛先サーバーへのログイン

ご利用のサーバーが Alibaba Cloud ECS インスタンスである場合、ログイン方法については「ECS インスタンスへの接続」をご参照ください。

他の種類のサーバーについては、関連するプロダクトドキュメントをご参照ください。

ステップ 2:SSB データ生成ツールのダウンロードとインストール

  1. ツールをダウンロードします。

    このテストでは、Git を使用してツールをダウンロードします。次のスクリプトを実行します。

    git clone https://github.com/apache/doris.git && cd ./doris/tools/ssb-tools

    また、ssb-tools からツールをダウンロードし、手動で宛先サーバーにアップロードすることもできます。

  2. コンパイルツール

    次のスクリプトを実行してツールをコンパイルします。

    sh bin/build-ssb-dbgen.sh

ステップ 3:SSB テストデータセットの生成

重要

大量のデータを生成するには時間がかかります。実際の所要時間はサーバーのパフォーマンスによって異なります。

テストツールのインストールディレクトリでスクリプトを実行して、テストデータセットを生成します。

構文:

sh bin/gen-ssb-data.sh -s <yourAimDataNum>

パラメーターの説明:

yourAimDataNum:

  • 意味:SSB を使用して生成するデータのサイズ。

  • 単位:GB

これは中規模のテストであり、1000 GB (1 TB) のテストデータセットを生成する必要があります。このステップには時間がかかる場合があります。タスクをバックグラウンドで実行します。

nohup sh bin/gen-ssb-data.sh -s 1000 > gen-ssb-data.log 2>&1 &

実行結果は、ツールのインストールディレクトリにある gen-ssb-data.log ファイルに保存されます。このファイルを表示して、プロセスが正しく実行されたことを確認できます。

テストデータセットは、ツールのインストールパスの bin ディレクトリ内にある ssb-data ディレクトリに保存されます。データファイルには .tbl という接尾辞が付いています。

説明

データ生成中に「bang!」という警告が表示され、テストデータ用のディスク領域が十分であることを確認した場合、これは生成ツールの同時実行制御の問題が原因である可能性があります。この警告は無視してかまいません。

ステップ 4:スクリプトを使用した SelectDB 用 SSB テストテーブルの作成

  1. SelectDB インスタンス情報の設定

    テーブル作成スクリプトを実行する前に、doris-cluster.conf ファイルで SelectDB インスタンス情報を設定します。このファイルは、ツールのインストールパスの ssb-tools/conf/ ディレクトリにあります。例:

    # Any of FE host
    export FE_HOST='selectdb-cn-****.selectdbfe.rds.aliyuncs.com'
    # http_port in fe.conf
    export FE_HTTP_PORT=8080
    # query_port in fe.conf
    export FE_QUERY_PORT=9030
    # Doris username
    export USER='admin'
    # Doris password
    export PASSWORD='****'
    # The database where SSB tables located
    export DB='test_db'

    パラメーターの説明:

    パラメーター

    説明

    FE_HOST

    SelectDB インスタンスのエンドポイント。

    SelectDB コンソールのインスタンス詳細ページの [ネットワーク情報] セクションから VPC エンドポイントまたはパブリックエンドポイントを取得します。

    FE_HTTP_PORT

    SelectDB インスタンスの HTTP プロトコルポート。

    SelectDB コンソールのインスタンス詳細ページの [ネットワーク情報] セクションから HTTP プロトコルポートを取得します。

    FE_QUERY_PORT

    SelectDB インスタンスの MySQL プロトコルポート。SelectDB コンソールのインスタンス詳細ページの [ネットワーク情報] セクションから MySQL プロトコルポートを取得します。

    USER

    SelectDB インスタンスのアカウント。

    SelectDB インスタンスを作成すると、システムはデフォルトで admin アカウントを作成します。

    PASSWORD

    SelectDB インスタンスアカウントのパスワード。

    USER を admin アカウントに設定したがパスワードを忘れた場合は、コンソールでアカウントのパスワードをリセットします。

    DB

    データインポート用の SelectDB インスタンス内のターゲットデータベースの名前。

  2. テーブルの作成

    ツールのインストールディレクトリで、次のスクリプトを実行してテストテーブルを作成します。スクリプトが実行されると、テストデータセットのテーブルが SelectDB インスタンスのターゲットデータベースに作成されます。

    sh bin/create-ssb-tables.sh -s 1000

ステップ 5:SelectDB へのデータのインポート

重要

大量のデータをインポートするには時間がかかります。実際の所要時間はサーバーのパフォーマンスによって異なります。

ツールのインストールディレクトリで、次のスクリプトを実行して、SSB テストセットと SSB フラットワイドテーブルのすべてのデータを SelectDB にインポートします。

sh bin/load-ssb-data.sh

これは中規模のテストであり、生成された 1000 GB (1 TB) のテストデータセットを SelectDB にインポートする必要があります。このステップには時間がかかる場合があります。タスクをバックグラウンドで実行します。

nohup sh bin/load-ssb-data.sh > load-ssb-data.log 2>&1 &

実行結果は、ツールのインストールディレクトリにある load-ssb-data.log ファイルに保存されます。このファイルを表示して、プロセスが正しく実行されたことを確認できます。

ステップ 6:クエリパフォーマンスのテスト

重要

大量のデータでバッチテストを実行するには時間がかかります。実際の所要時間はサーバーのパフォーマンスによって異なります。

SSB 標準テストは、複数テーブル結合、集約、フィルタリングなど、複雑なスタースキーマのクエリシナリオにおけるデータベースのパフォーマンスを評価します。

SSB フラットテストは、ワイドテーブル構造でのデータベースのパフォーマンスを評価し、フラット化されたデータモデルがクエリ効率に与える影響をテストします。

  • バッチテストによる SQL パフォーマンスのクエリ

    SSB 標準テスト

    SSB 標準テスト用の SQL スクリプトを実行して、テストセット内の SQL 文をバッチ実行します。

    構文:

    sh bin/run-ssb-queries.sh -s <yourAimDataNum>

    パラメーターの説明:

    yourAimDataNum:クエリが正しいデータセットスケールに対して実行されることを保証します。この値は、データ生成に使用されたスケールと一致する必要があります。たとえば、-s 1000 を使用してデータを生成した場合、クエリを実行する際にも -s 1000 を使用する必要があります。

    スクリプトが実行されると、コンソールウィンドウに、テストセットの各 SQL 文の SelectDB でのパフォーマンスが表示されます。

    これは中規模のテストであり、1000 GB (1 TB) のテストデータセットをクエリします。このステップには時間がかかる場合があります。タスクをバックグラウンドで実行します。

    nohup sh bin/run-ssb-queries.sh -s 1000 > run-ssb-queries.log 2>&1 &

    バッチテスト用の SQL 文の詳細については、「ssb-queries」をご参照ください。

    クエリパフォーマンスの結果は、ツールのインストールディレクトリにある run-ssb-queries.log ファイルに保存されます。このファイルを表示して、クエリプロセスに関する情報とテスト結果を取得できます。このドキュメントの 1000 GB のデータに関するテスト結果については、「テスト結果」をご参照ください。

    SSB フラットテスト

    SSB フラットテスト用の SQL スクリプトを実行して、テストセット内の SQL 文をバッチ実行します。

    構文:

    sh bin/run-ssb-flat-queries.sh -s <yourAimDataNum>

    パラメーター:

    yourAimDataNum:クエリが正しいデータセットスケールに対して実行されることを保証します。この値は、データ生成に使用されたスケールと一致する必要があります。たとえば、-s 1000 を使用してデータを生成した場合、クエリを実行する際にも -s 1000 を使用する必要があります。

    スクリプトが実行されると、コンソールウィンドウに、テストセットの各 SQL 文の SelectDB でのパフォーマンスが表示されます。

    この中規模テストでは、1000 GB (1 TB) のテストデータセットをクエリします。このステップには時間がかかる場合があるため、タスクをバックグラウンドで実行できます。

    nohup sh bin/run-ssb-flat-queries.sh -s 1000 > run-ssb-flat-queries.log 2>&1 &

    バッチテスト用の SQL 文の詳細については、「ssb-flat-queries」をご参照ください。

    クエリパフォーマンスの結果とクエリプロセスに関する情報は、ツールのインストールディレクトリにある run-ssb-flat-queries.log ファイルに保存されます。1000 GB のデータに関するテスト結果については、「テスト結果」をご参照ください。

  • 単一クエリの SQL パフォーマンスのテスト

    また、次のように SelectDB で単一の SQL 文のパフォーマンスをテストすることもできます。

    1. SelectDB インスタンスに接続します。詳細については、「DMS を使用した ApsaraDB for SelectDB インスタンスへの接続」をご参照ください。

    2. ターゲット SQL 文を実行します。

      SSB 標準テスト

      SSB 標準テストクエリ文」からターゲット SQL 文を取得して実行します。

      また、このテストで使用された SQL 文のいずれかを選択して実行することもできます。

      --Q1.1
      SELECT SUM(lo_extendedprice * lo_discount) AS REVENUE
      FROM lineorder, dates
      WHERE
          lo_orderdate = d_datekey
        AND d_year = 1993
        AND lo_discount BETWEEN 1 AND 3
        AND lo_quantity < 25;
      
      --Q1.2
      SELECT SUM(lo_extendedprice * lo_discount) AS REVENUE
      FROM lineorder, dates
      WHERE
          lo_orderdate = d_datekey
        AND d_yearmonth = 'Jan1994'
        AND lo_discount BETWEEN 4 AND 6
        AND lo_quantity BETWEEN 26 AND 35;
          
      --Q1.3
      SELECT
          SUM(lo_extendedprice * lo_discount) AS REVENUE
      FROM lineorder, dates
      WHERE
          lo_orderdate = d_datekey
        AND d_weeknuminyear = 6
        AND d_year = 1994
        AND lo_discount BETWEEN 5 AND 7
        AND lo_quantity BETWEEN 26 AND 35;
          
      --Q2.1
      SELECT SUM(lo_revenue), d_year, p_brand
      FROM lineorder, dates, part, supplier
      WHERE
          lo_orderdate = d_datekey
        AND lo_partkey = p_partkey
        AND lo_suppkey = s_suppkey
        AND p_category = 'MFGR#12'
        AND s_region = 'AMERICA'
      GROUP BY d_year, p_brand
      ORDER BY p_brand;
      
      --Q2.2
      SELECT SUM(lo_revenue), d_year, p_brand
      FROM lineorder, dates, part, supplier
      WHERE
          lo_orderdate = d_datekey
        AND lo_partkey = p_partkey
        AND lo_suppkey = s_suppkey
        AND p_brand BETWEEN 'MFGR#2221' AND 'MFGR#2228'
        AND s_region = 'ASIA'
      GROUP BY d_year, p_brand
      ORDER BY d_year, p_brand;
      
      --Q2.3
      SELECT SUM(lo_revenue), d_year, p_brand
      FROM lineorder, dates, part, supplier
      WHERE
          lo_orderdate = d_datekey
        AND lo_partkey = p_partkey
        AND lo_suppkey = s_suppkey
        AND p_brand = 'MFGR#2239'
        AND s_region = 'EUROPE'
      GROUP BY d_year, p_brand
      ORDER BY d_year, p_brand;
      
      --Q3.1
      SELECT
          c_nation,
          s_nation,
          d_year,
          SUM(lo_revenue) AS REVENUE
      FROM customer, lineorder, supplier, dates
      WHERE
          lo_custkey = c_custkey
        AND lo_suppkey = s_suppkey
        AND lo_orderdate = d_datekey
        AND c_region = 'ASIA'
        AND s_region = 'ASIA'
        AND d_year >= 1992
        AND d_year <= 1997
      GROUP BY c_nation, s_nation, d_year
      ORDER BY d_year ASC, REVENUE DESC;
      
      --Q3.2
      SELECT
          c_city,
          s_city,
          d_year,
          SUM(lo_revenue) AS REVENUE
      FROM customer, lineorder, supplier, dates
      WHERE
          lo_custkey = c_custkey
        AND lo_suppkey = s_suppkey
        AND lo_orderdate = d_datekey
        AND c_nation = 'UNITED STATES'
        AND s_nation = 'UNITED STATES'
        AND d_year >= 1992
        AND d_year <= 1997
      GROUP BY c_city, s_city, d_year
      ORDER BY d_year ASC, REVENUE DESC;
      
      --Q3.3
      SELECT
          c_city,
          s_city,
          d_year,
          SUM(lo_revenue) AS REVENUE
      FROM customer, lineorder, supplier, dates
      WHERE
          lo_custkey = c_custkey
        AND lo_suppkey = s_suppkey
        AND lo_orderdate = d_datekey
        AND (
                  c_city = 'UNITED KI1'
              OR c_city = 'UNITED KI5'
          )
        AND (
                  s_city = 'UNITED KI1'
              OR s_city = 'UNITED KI5'
          )
        AND d_year >= 1992
        AND d_year <= 1997
      GROUP BY c_city, s_city, d_year
      ORDER BY d_year ASC, REVENUE DESC;
      
      --Q3.4
      SELECT
          c_city,
          s_city,
          d_year,
          SUM(lo_revenue) AS REVENUE
      FROM customer, lineorder, supplier, dates
      WHERE
          lo_custkey = c_custkey
        AND lo_suppkey = s_suppkey
        AND lo_orderdate = d_datekey
        AND (
                  c_city = 'UNITED KI1'
              OR c_city = 'UNITED KI5'
          )
        AND (
                  s_city = 'UNITED KI1'
              OR s_city = 'UNITED KI5'
          )
        AND d_yearmonth = 'Dec1997'
      GROUP BY c_city, s_city, d_year
      ORDER BY d_year ASC, REVENUE DESC;
      
      --Q4.1
      SELECT
          d_year,
          c_nation,
          SUM(lo_revenue - lo_supplycost) AS PROFIT
      FROM dates, customer, supplier, part, lineorder
      WHERE
          lo_custkey = c_custkey
        AND lo_suppkey = s_suppkey
        AND lo_partkey = p_partkey
        AND lo_orderdate = d_datekey
        AND c_region = 'AMERICA'
        AND s_region = 'AMERICA'
        AND (
                  p_mfgr = 'MFGR#1'
              OR p_mfgr = 'MFGR#2'
          )
      GROUP BY d_year, c_nation
      ORDER BY d_year, c_nation;
      
      --Q4.2
      SELECT
          d_year,
          s_nation,
          p_category,
          SUM(lo_revenue - lo_supplycost) AS PROFIT
      FROM dates, customer, supplier, part, lineorder
      WHERE
          lo_custkey = c_custkey
        AND lo_suppkey = s_suppkey
        AND lo_partkey = p_partkey
        AND lo_orderdate = d_datekey
        AND c_region = 'AMERICA'
        AND s_region = 'AMERICA'
        AND (
                  d_year = 1997
              OR d_year = 1998
          )
        AND (
                  p_mfgr = 'MFGR#1'
              OR p_mfgr = 'MFGR#2'
          )
      GROUP BY d_year, s_nation, p_category
      ORDER BY d_year, s_nation, p_category;
      
      --Q4.3
      SELECT
          d_year,
          s_city,
          p_brand,
          SUM(lo_revenue - lo_supplycost) AS PROFIT
      FROM dates, customer, supplier, part, lineorder
      WHERE
          lo_custkey = c_custkey
        AND lo_suppkey = s_suppkey
        AND lo_partkey = p_partkey
        AND lo_orderdate = d_datekey
        AND s_nation = 'UNITED STATES'
        AND (
                  d_year = 1997
              OR d_year = 1998
          )
        AND p_category = 'MFGR#14'
      GROUP BY d_year, s_city, p_brand
      ORDER BY d_year, s_city, p_brand;
      

      SSB フラットテスト

      SSB フラットテストクエリ文」からターゲット SQL 文を取得して実行します。

      また、このテストで使用された SQL 文のいずれかを選択して実行することもできます。

      --Q1.1
      SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
      FROM lineorder_flat
      WHERE
          LO_ORDERDATE >= 19930101
          AND LO_ORDERDATE <= 19931231
          AND LO_DISCOUNT BETWEEN 1 AND 3
          AND LO_QUANTITY < 25;
      
      --Q1.2
      SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
      FROM lineorder_flat
      WHERE
          LO_ORDERDATE >= 19940101
        AND LO_ORDERDATE <= 19940131
        AND LO_DISCOUNT BETWEEN 4 AND 6
        AND LO_QUANTITY BETWEEN 26 AND 35;
      
      --Q1.3
      SELECT SUM(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
      FROM lineorder_flat
      WHERE
          weekofyear(LO_ORDERDATE) = 6
        AND LO_ORDERDATE >= 19940101
        AND LO_ORDERDATE <= 19941231
        AND LO_DISCOUNT BETWEEN 5 AND 7
        AND LO_QUANTITY BETWEEN 26 AND 35;
      
      --Q2.1
      SELECT
          SUM(LO_REVENUE), (LO_ORDERDATE DIV 10000) AS YEAR,
          P_BRAND
      FROM lineorder_flat
      WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'
      GROUP BY YEAR, P_BRAND
      ORDER BY YEAR, P_BRAND;
      
      --Q2.2
      SELECT
          SUM(LO_REVENUE), (LO_ORDERDATE DIV 10000) AS YEAR,
          P_BRAND
      FROM lineorder_flat
      WHERE
          P_BRAND >= 'MFGR#2221'
        AND P_BRAND <= 'MFGR#2228'
        AND S_REGION = 'ASIA'
      GROUP BY YEAR, P_BRAND
      ORDER BY YEAR, P_BRAND;
      
      --Q2.3
      SELECT
          SUM(LO_REVENUE), (LO_ORDERDATE DIV 10000) AS YEAR,
          P_BRAND
      FROM lineorder_flat
      WHERE
          P_BRAND = 'MFGR#2239'
        AND S_REGION = 'EUROPE'
      GROUP BY YEAR, P_BRAND
      ORDER BY YEAR, P_BRAND;
      
      --Q3.1
      SELECT
          C_NATION,
          S_NATION, (LO_ORDERDATE DIV 10000) AS YEAR,
          SUM(LO_REVENUE) AS revenue
      FROM lineorder_flat
      WHERE
          C_REGION = 'ASIA'
        AND S_REGION = 'ASIA'
        AND LO_ORDERDATE >= 19920101
        AND LO_ORDERDATE <= 19971231
      GROUP BY C_NATION, S_NATION, YEAR
      ORDER BY YEAR ASC, revenue DESC;
      
      --Q3.2
      SELECT
          C_CITY,
          S_CITY, (LO_ORDERDATE DIV 10000) AS YEAR,
          SUM(LO_REVENUE) AS revenue
      FROM lineorder_flat
      WHERE
          C_NATION = 'UNITED STATES'
        AND S_NATION = 'UNITED STATES'
        AND LO_ORDERDATE >= 19920101
        AND LO_ORDERDATE <= 19971231
      GROUP BY C_CITY, S_CITY, YEAR
      ORDER BY YEAR ASC, revenue DESC;
      
      --Q3.3
      SELECT
          C_CITY,
          S_CITY, (LO_ORDERDATE DIV 10000) AS YEAR,
          SUM(LO_REVENUE) AS revenue
      FROM lineorder_flat
      WHERE
          C_CITY IN ('UNITED KI1', 'UNITED KI5')
        AND S_CITY IN ('UNITED KI1', 'UNITED KI5')
        AND LO_ORDERDATE >= 19920101
        AND LO_ORDERDATE <= 19971231
      GROUP BY C_CITY, S_CITY, YEAR
      ORDER BY YEAR ASC, revenue DESC;
      
      --Q3.4
      SELECT
          C_CITY,
          S_CITY, (LO_ORDERDATE DIV 10000) AS YEAR,
          SUM(LO_REVENUE) AS revenue
      FROM lineorder_flat
      WHERE
          C_CITY IN ('UNITED KI1', 'UNITED KI5')
        AND S_CITY IN ('UNITED KI1', 'UNITED KI5')
        AND LO_ORDERDATE >= 19971201
        AND LO_ORDERDATE <= 19971231
      GROUP BY C_CITY, S_CITY, YEAR
      ORDER BY YEAR ASC, revenue DESC;
      
      --Q4.1
      SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
          C_NATION,
          SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
      FROM lineorder_flat
      WHERE
          C_REGION = 'AMERICA'
        AND S_REGION = 'AMERICA'
        AND P_MFGR IN ('MFGR#1', 'MFGR#2')
      GROUP BY YEAR, C_NATION
      ORDER BY YEAR ASC, C_NATION ASC;
      
      --Q4.2
      SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
          S_NATION,
          P_CATEGORY,
          SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
      FROM lineorder_flat
      WHERE
          C_REGION = 'AMERICA'
        AND S_REGION = 'AMERICA'
        AND LO_ORDERDATE >= 19970101
        AND LO_ORDERDATE <= 19981231
        AND P_MFGR IN ('MFGR#1', 'MFGR#2')
      GROUP BY YEAR, S_NATION, P_CATEGORY
      ORDER BY
          YEAR ASC,
          S_NATION ASC,
          P_CATEGORY ASC;
      
      --Q4.3
      SELECT (LO_ORDERDATE DIV 10000) AS YEAR,
          S_CITY,
          P_BRAND,
          SUM(LO_REVENUE - LO_SUPPLYCOST) AS profit
      FROM lineorder_flat
      WHERE
          S_NATION = 'UNITED STATES'
        AND LO_ORDERDATE >= 19970101
        AND LO_ORDERDATE <= 19981231
        AND P_CATEGORY = 'MFGR#14'
      GROUP BY YEAR, S_CITY, P_BRAND
      ORDER BY YEAR ASC, S_CITY ASC, P_BRAND ASC;

テスト結果

次の表は、SSB 標準テストと SSB フラットテストの 1000 GB のクエリパフォーマンス結果を示しています。テストは、カーネルバージョン 4.1.1、96 コア、384 GB メモリ、1200 GB のクラスターキャッシュ領域を備えた SelectDB インスタンスで実行されました。

クエリ

SSB 1000

SSB-Flat 1000

Q1.1

0.14

0.07

Q1.2

0.08

0.03

Q1.3

0.08

0.08

Q2.1

0.56

0.36

Q2.2

0.65

0.33

Q2.3

0.43

0.25

Q3.1

1.46

0.62

Q3.2

0.55

0.38

Q3.3

0.42

0.23

Q3.4

0.12

0.04

Q4.1

1.64

0.9

Q4.2

0.5

0.17

Q4.3

0.27

0.12

合計

6.9

3.58