CData SQL Gateway で SQL Server Linked Server の効率を最大化



SQL Server Linked Server は、Microsoft SQL Server の機能で、データベースエンジンが外部データソースからデータを読み取ったり、リモートデータベースに対してコマンドを実行したりできるようにするものです。一方、CData SQL Gateway は、SQL Server やその他のデータベースシステムが、リモートの SaaS、ビッグデータ、NoSQL データソースをネイティブのリレーショナルデータベースのようにアクセスできるようにすることで、データベース接続性を強化します。

CData SQL Gateway は TDS リモーティングを使用して SQL Server Linked Server を最適化し、効率的な ODBC 通信を直接実現することで、クエリ実行の改善、インプロセス実行の削減、パフォーマンスの向上を可能にします。

CData SQL Gateway の最新アップデートにより、読み書き速度のパフォーマンスが大幅に向上しました。270 を超えるサポート対象データソースすべてにおいて、最大 8 倍のパフォーマンス向上を体験できます。

この記事では、大規模なデータセットを扱う際の SQL Server Linked Server 環境で、2 つのバージョン(旧版 [Build 8957] と新版 [Build 9165])の CData SQL Gateway リモーティングサービスを使用した Snowflake ODBC ドライバーの読み書きパフォーマンスを比較します。さまざまなパフォーマンステストを通じて、CData SQL Gateway の最新バージョンが旧バージョンよりも大幅に高速で大規模データセットを SQL Server に読み書きできることを実証します。

テストデータ

SQL Gateway リモーティングサービスを介した Snowflake ODBC ドライバーの読み書き速度をテストするために、さまざまなサイズのデータセットを使用しました。

スキーマ テーブル名 テーブルサイズ 行数 カラム数
TPCH_SF100 SUPPLIER 65.6 MB 100 万 7
TPCH_SF1 ORDERS 40.3 MB 150 万 9
TPCH_SF10 PARTSUPP 356 MB 800 万 5
TPCH_SF10 ORDERS 426 MB 1500 万 9

CData SQL Gateway を使用した読み書きパフォーマンス

この調査の主な目的は、SQL Gateway 2024 [Build 8957](旧版)と SQL Gateway 2024 [Build 9165](新版)の 2 つのバージョンにおける SQL Gateway リモーティングサービスのパフォーマンスを比較することでした。Snowflake ODBC ドライバーを使用して同一のクエリセットを実行することで検証を行いました。サイズ、行数、カラム構造が異なる複数の Snowflake データベースでクエリパフォーマンスをテストし、その結果を以下のセクションで紹介します。

テストは以下の構成のシステムで実施しました:

  • プロセッサ:第 11 世代 Intel Core i5-1135G7 @ 2.40GHz(8 CPU)、約 1.4GHz
  • メモリ:16GB RAM

パフォーマンステスト

100 万行

2 つのバージョンの SQL Gateway を再現可能な形で比較するために、Snowflake の TPCH_SF100 スキーマにある Supplier テーブルをソースとして、SQL Server データベースを宛先として使用しました。リモーティングサービスは SQL Server Linked Server でデータの読み書きを行うように構成しました。Supplier テーブルの詳細は以下のとおりです:

スキーマテーブル名テーブルサイズ行数カラム数
TPCH_SF100SUPPLIER65.6 MB100 万7

読み取りパフォーマンス(SQL Gateway 2024 [Build 8957]):

旧バージョンの SQL Gateway を使用した場合、100 万行の SELECT クエリ実行時間は 1 分 10 秒でした。

SQL Server でデータを読み取るために使用したクエリ:

SELECT [S_SUPPKEY]
	  ,[S_NAME]
	  ,[S_ADDRESS]
	  ,[S_NATIONKEY]
	  ,[S_PHONE]
	  ,[S_ACCTBAL]
	  ,[S_COMMENT]
FROM [SNOWFLAKE].[CData.Snowflake.Sys].[Snowflake].[SUPPLIER]
GO

読み取りパフォーマンス(SQL Gateway 2024 [Build 9165]):

新バージョンの SQL Gateway を使用した場合、100 万行の SELECT クエリ実行時間は 43 秒でした。なお、テスト用のデータ読み取りには旧ビルドと同じクエリを使用しています。

読み取りパフォーマンス比較(両バージョン)
Build 8957 Build 9165 パフォーマンス向上率
1 分 10 秒 43 秒 +38.57%

書き込みパフォーマンス(SQL Gateway 2024 [Build 8957]):

旧バージョンの SQL Gateway を使用した場合、100 万行の INSERT クエリ実行時間は 1 分 22 秒でした。

SQL Server でデータを書き込むために使用したクエリ:

USE SQLServerTables;
GO

CREATE TABLE dbo.Supplier (
    Supplier_Key INT,
    Supplier_Name NVARCHAR(50),
	Supplier_Address NVARCHAR(200),
	Supplier_NationKey INT,
	Supplier_Phone NVARCHAR(50),
	Supplier_AccountBal INT,
    Supplier_Comment NVARCHAR(255),
);
GO

INSERT INTO [SQLServerTables].[dbo].[Supplier] ([Supplier_Key],[Supplier_Name],[Supplier_Address],[Supplier_NationKey],[Supplier_Phone],[Supplier_AccountBal],[Supplier_Comment])

SELECT [S_SUPPKEY]
      ,[S_NAME]
      ,[S_ADDRESS]
      ,[S_NATIONKEY]
      ,[S_PHONE]
      ,[S_ACCTBAL]
      ,[S_COMMENT]
  FROM [SNOWFLAKE].[CData Snowflake Sys].[Snowflake].[SUPPLIER]
GO

書き込みパフォーマンス(SQL Gateway 2024 [Build 9165]):

新バージョンの SQL Gateway を使用した場合、100 万行の INSERT クエリ実行時間は 51 秒でした。なお、テスト用のデータ書き込みには旧ビルドと同じクエリを使用しています。

書き込みパフォーマンス比較(両バージョン)
Build 8957 Build 9165 パフォーマンス向上率
1 分 22 秒 51 秒 +37.80%

結果が示すように、最近の改善により、CData SQL Gateway の新バージョン [Build 9165] は旧バージョン [Build 8957] を常に上回るパフォーマンスを発揮しています。

150 万行

次に、Snowflake の TPCH_SF1 スキーマにある 150 万行のデータを持つ Orders テーブルをソースとして、SQL Server データベースを宛先として使用しました。リモーティングサービスは SQL Server Linked Server でデータの読み書きを行うように構成しました。Orders テーブルの詳細は以下のとおりです:

スキーマテーブル名テーブルサイズ行数カラム数
TPCH_SF1ORDERS40.3 MB150 万9

読み取りパフォーマンス(SQL Gateway 2024 [Build 8957]):

旧バージョンの SQL Gateway を使用した場合、150 万行の SELECT クエリ実行時間は 21 分 22 秒でした。

SQL Server でデータを読み取るために使用したクエリ:

SELECT [O_ORDERKEY]
      ,[O_CUSTKEY]
      ,[O_ORDERSTATUS]
      ,[O_TOTALPRICE]
      ,[O_ORDERDATE]
      ,[O_ORDERPRIORITY]
      ,[O_CLERK]
      ,[O_SHIPPRIORITY]
      ,[O_COMMENT]
  FROM [SNOWFLAKE].[CData Snowflake Sys].[Snowflake].[ORDERS]
GO

読み取りパフォーマンス(SQL Gateway 2024 [Build 9165]):

新バージョンの SQL Gateway を使用した場合、150 万行の SELECT クエリ実行時間は 4 分 48 秒でした。なお、テスト用のデータ読み取りには旧ビルドと同じクエリを使用しています。

読み取りパフォーマンス比較(両バージョン)
Build 8957 Build 9165 パフォーマンス向上率
21 分 22 秒 4 分 48 秒 +77.55%

書き込みパフォーマンス(SQL Gateway 2024 [Build 8957]):

旧バージョンの SQL Gateway を使用した場合、150 万行の INSERT クエリ実行時間は 15 分 55 秒でした。

SQL Server でデータを書き込むために使用したクエリ:

USE SQLServerTables;
GO

CREATE TABLE dbo.Orders (
    Order_Key INT,
    Order_Customer_Key INT,
	Order_Status NVARCHAR(100),
	Order_Total_Price INT,
	Order_Date date,
	Order_Priority INT,
    Order_Clerk NVARCHAR(200),
	Order_Ship_Priority INT,
	Order_Comment NVARCHAR(255),
);
GO

INSERT INTO [SQLServerTables].[dbo].[Orders] ([Order_Key],[Order_Customer_Key],[Order_Status],[Order_Total_Price],[Order_Date],[Order_Priority],[Order_Clerk],[Order_Ship_Priority],[Order_Comment])

SELECT [O_ORDERKEY]
      ,[O_CUSTKEY]
      ,[O_ORDERSTATUS]
      ,[O_TOTALPRICE]
      ,[O_ORDERDATE]
      ,[O_ORDERPRIORITY]
      ,[O_CLERK]
      ,[O_SHIPPRIORITY]
      ,[O_COMMENT]
  FROM [SNOWFLAKE].[CData Snowflake Sys].[Snowflake].[ORDERS]
GO

書き込みパフォーマンス(SQL Gateway 2024 [Build 9165]):

新バージョンの SQL Gateway を使用した場合、150 万行の INSERT クエリ実行時間は 13 分 13 秒でした。なお、テスト用のデータ書き込みには旧ビルドと同じクエリを使用しています。

書き込みパフォーマンス比較(両バージョン)
Build 8957 Build 9165 パフォーマンス向上率
15 分 55 秒 13 分 13 秒 +16.96%

800 万行

次に、Snowflake の TPCH_SF10 スキーマにある 800 万行のデータを持つ Parts Supply テーブルをソースとして、SQL Server データベースを宛先として使用しました。リモーティングサービスは SQL Server Linked Server でデータの読み書きを行うように構成しました。Parts Supply テーブルの詳細は以下のとおりです:

スキーマテーブル名テーブルサイズ行数カラム数
TPCH_SF10PARTSUPP356 MB800 万5

読み取りパフォーマンス(SQL Gateway 2024 [Build 8957]):

旧バージョンの SQL Gateway を使用した場合、800 万行の SELECT クエリ実行時間は 5 分 39 秒でした。

SQL Server でデータを読み取るために使用したクエリ:

SELECT [PS_PARTKEY]
      ,[PS_SUPPKEY]
      ,[PS_AVAILQTY]
      ,[PS_SUPPLYCOST]
      ,[PS_COMMENT]
  FROM [SNOWFLAKE].[CData Snowflake Sys].[Snowflake].[PARTSUPP]
GO

読み取りパフォーマンス(SQL Gateway 2024 [Build 9165]):

新バージョンの SQL Gateway を使用した場合、800 万行の SELECT クエリ実行時間は 4 分 28 秒でした。なお、テスト用のデータ読み取りには旧ビルドと同じクエリを使用しています。

読み取りパフォーマンス比較(両バージョン)
Build 8957 Build 9165 パフォーマンス向上率
5 分 39 秒 4 分 28 秒 +20.94%

書き込みパフォーマンス(SQL Gateway 2024 [Build 8957]):

旧バージョンの SQL Gateway を使用した場合、800 万行の INSERT クエリ実行時間は 4 分 52 秒でした。

SQL Server でデータを書き込むために使用したクエリ:

USE SQLServerTables;
GO

CREATE TABLE dbo.PartsSupply (
    Parts_Part_Key INT,
    Parts_Supply_Key INT,
	Parts_Supply_Available_Qty INT,
	Parts_Supply_Cost INT,
	Parts_Supply_Comments VARCHAR(255),
);
GO

INSERT INTO [SQLServerTables].[dbo].[Orders] ([Order_Key],[Order_Customer_Key],[Order_Status],[Order_Total_Price],[Order_Date],[Order_Priority],[Order_Clerk],[Order_Ship_Priority],[Order_Comment])

SELECT [PS_PARTKEY]
      ,[PS_SUPPKEY]
      ,[PS_AVAILQTY]
      ,[PS_SUPPLYCOST]
      ,[PS_COMMENT]
  FROM [SNOWFLAKE].[CData Snowflake Sys].[Snowflake].[PARTSUPP]
GO

書き込みパフォーマンス(SQL Gateway 2024 [Build 9165]):

新バージョンの SQL Gateway を使用した場合、800 万行の INSERT クエリ実行時間は 4 分 40 秒でした。なお、テスト用のデータ書き込みには旧ビルドと同じクエリを使用しています。

書き込みパフォーマンス比較(両バージョン)
Build 8957 Build 9165 パフォーマンス向上率
4 分 52 秒 4 分 40 秒 +4.11%

1500 万行

次に、Snowflake の TPCH_SF10 スキーマにある 1500 万行のデータを持つ Orders テーブルをソースとして、SQL Server データベースを宛先として使用しました。リモーティングサービスは SQL Server Linked Server でデータの読み書きを行うように構成しました。Orders テーブルの詳細は以下のとおりです:

スキーマテーブル名テーブルサイズ行数カラム数
TPCH_SF10ORDERS426 MB1500 万9

読み取りパフォーマンス(SQL Gateway 2024 [Build 8957]):

旧バージョンの SQL Gateway を使用した場合、1500 万行の SELECT クエリ実行時間は 6 分 50 秒でした。

SQL Server でデータを読み取るために使用したクエリ:

SELECT [O_ORDERKEY]
      ,[O_CUSTKEY]
      ,[O_ORDERSTATUS]
      ,[O_TOTALPRICE]
      ,[O_ORDERDATE]
      ,[O_ORDERPRIORITY]
      ,[O_CLERK]
      ,[O_SHIPPRIORITY]
      ,[O_COMMENT]
  FROM [SNOWFLAKE].[CData Snowflake Sys].[Snowflake].[ORDERS]
GO

読み取りパフォーマンス(SQL Gateway 2024 [Build 9165]):

新バージョンの SQL Gateway を使用した場合、1500 万行の SELECT クエリ実行時間は 6 分 22 秒でした。なお、テスト用のデータ読み取りには旧ビルドと同じクエリを使用しています。

読み取りパフォーマンス比較(両バージョン)
Build 8957 Build 9165 パフォーマンス向上率
6 分 50 秒 6 分 22 秒 +6.83%

書き込みパフォーマンス(SQL Gateway 2024 [Build 8957]):

旧バージョンの SQL Gateway を使用した場合、1500 万行の INSERT クエリ実行時間は 9 分 3 秒でした。

SQL Server でデータを書き込むために使用したクエリ:

USE SQLServerTables;
GO

CREATE TABLE dbo.Orders (
    Order_Key INT,
    Order_Customer_Key INT,
	Order_Status NVARCHAR(100),
	Order_Total_Price INT,
	Order_Date date,
	Order_Priority INT,
    Order_Clerk NVARCHAR(200),
	Order_Ship_Priority INT,
	Order_Comment NVARCHAR(255),
);
GO

INSERT INTO [SQLServerTables].[dbo].[Orders] ([Order_Key],[Order_Customer_Key],[Order_Status],[Order_Total_Price],[Order_Date],[Order_Priority],[Order_Clerk],[Order_Ship_Priority],[Order_Comment])

SELECT [O_ORDERKEY]
      ,[O_CUSTKEY]
      ,[O_ORDERSTATUS]
      ,[O_TOTALPRICE]
      ,[O_ORDERDATE]
      ,[O_ORDERPRIORITY]
      ,[O_CLERK]
      ,[O_SHIPPRIORITY]
      ,[O_COMMENT]
  FROM [SNOWFLAKE].[CData Snowflake Sys].[Snowflake].[ORDERS]
GO

書き込みパフォーマンス(SQL Gateway 2024 [Build 9165]):

新バージョンの SQL Gateway を使用した場合、1500 万行の INSERT クエリ実行時間は 7 分 27 秒でした。なお、テスト用のデータ書き込みには旧ビルドと同じクエリを使用しています。

書き込みパフォーマンス比較(両バージョン)
Build 8957 Build 9165 パフォーマンス向上率
9 分 3 秒 7 分 27 秒 +17.68%

まとめ

CData SQL Gateway 2024 の新バージョン [Build 9165] は、旧バージョン [Build 8957] と比較して大規模データセットのクエリ処理に優れており、利用可能なクライアントリソースをより効率的に活用することで、最大のデータセットでも少なくとも 15-20% 高速に処理できます。

CData SQL Gateway ODBC リモーティングサービスの無料 30 日間トライアルをぜひお試しください。評価期間中にご質問がありましたら、いつでもお問い合わせください。CData サポートチームがお手伝いいたします。