tencent cloud

TDSQL-C for MySQL

ETLライトバックの高速化

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2025-12-30 16:46:24
TDSQL-C for MySQLは読み取り専用分析エンジンによるデータクエリの高速化と読み書きインスタンスへのライトバックを実現します。この機能により、INSERT…SELECT… ステートメント内のSELECTクエリを列ストレージで高速化し、結果を内部ネットワーク経由で読み書きインスタンスに転送して対象テーブルに書き込むことが可能です。詳細な機能説明はETLライトバックの高速化をご参照ください。

使用シナリオ

注意:
読み取り専用分析エンジンは非同期レプリケーションモードであるため、読み取り専用分析エンジンに遅延が発生している場合、クエリ結果と読み書きインスタンスの間には一定の時間差が生じます。この機能はデータ遅延の影響を受けないシナリオにのみ適用されます。
現在、INSERT...SELECT...の高速化のみサポートしており、UPDATE...SELECT...およびDELETE...SELECT...などのシナリオの高速化はサポートしていません。
この機能の使用が推奨されるシナリオは以下の通りです:クエリ条件が複雑でSQL文の実行時間が長いが、クエリ結果セットのデータ量が小さい場合。このようなシナリオでは、読み取り専用分析エンジンがSELECTクエリの実行効率を加速するため、本機能を使用することでパフォーマンスを大幅に向上させることができます。
この機能を使用しても、すべてのシナリオでパフォーマンスの向上をもたらすわけではなく、特定の状況ではパフォーマンスが低下する場合があります。例:
INSERT…SELECT…文のSELECTクエリが比較的単純な場合、読み取り専用分析エンジンからデータを読み取って読み書きインスタンスにライトバックすると、追加のネットワークオーバーヘッドが発生します。読み書きインスタンスから直接データを読み取る場合と比較して、その利点はあまり顕著ではありません。
INSERT…SELECT…文のSELECTクエリ結果セットのデータ量が大きい場合、主なパフォーマンスボトルネックは結果セットがネットワーク経由で転送され、読み書きインスタンスに書き込まれるプロセスにあります。このシナリオでは、本機能を使用してパフォーマンスを最適化することはできません。

前提条件

読み取り専用分析エンジンインスタンスと読み書きインスタンスの稼働状態は、いずれも正常に稼働中です。
実行ユーザーは対応するオブジェクトに対するINSERT権限を所有している必要があります。
INSERT…SELECT… のSQL実行シナリオのみサポートしています。

機能パラメータ説明

パラメータ名
パラメータ説明
既定値
パラメータ値
libra_etl_to_rw
ライトバック機能を有効にするかどうかを制御します。
off
on:ライトバック機能を有効にします。実行を意味します。
off:ライトバック機能を無効にします。値がoffの場合、INSERT…SELECT…文を実行すると権限が不足しているというエラーが発生します。
libra_concurrent_etl
読み書きインスタンスへのライトバック時に並行書き込みを有効にするかどうかを制御します。
off
on: 並行ライトバックを有効にします。並行ライトバックは結果のライトバック効率を向上させますが、マルチスレッド間での書き込みのトランザクション一貫性は保証できません。
off:コンカレントライトバックを無効にします。この値に設定すると、読み書きインスタンスへのライトバックデータは単一のトランザクション内で実行されます。
libra_etl_concurrency
読み書きインスタンスへのライトバックにおけるコンカレントスレッド数を制御します。libra_concurrent_etl が on に設定されている場合にのみ有効になります。
1
設定可能な範囲:[1 - 読み書きインスタンスのCPUコア数]。整数値で設定可能で、最大値は読み書きインスタンスのCPUコア数です。
注意:
マルチコンカレントライトバックを使用すると実行速度が向上しますが、コンカレント数が過度に高いと読み書きインスタンスが書き込み負荷に耐えられず、インスタンスのパフォーマンスが低下する可能性があります。

実行サンプル

1. クライアントツールを使用して読み取り専用分析エンジンにログインします。例:MySQLクライアントを使用し、データベースアカウントとパスワードで読み取り専用分析エンジンにログインします。
2. 以下のSQLを実行すると、ETLライトバック機能(読み取り専用分析エンジンによる読み書きインスタンスへのライトバック機能)が有効になります。
seesion内でパラメータを設定することによって実行します:
set libra_etl_to_rw=on;
set libra_concurrent_etl=on;
set libra_etl_concurrency=4;
INSERT INTO database1.table1 select a.t1,b.t2,a.t2,b.t3 from a,b where a.t1=b.t1 and a.t5='x';
set libra_concurrent_etl=off;
set libra_etl_to_rw=off;
SQLにHintパラメータを追加することによって実行します:
INSERT /*+ SET_VAR(libra_etl_to_rw=ON) SET_VAR(libra_concurrent_etl=ON) SET_VAR(libra_etl_concurrency=4)*/ INTO database1.table1 select a.t1,b.t2,a.t2,b.t3 from a,b where a.t1=b.t1 and a.t5='x';
注意:
MySQLクライアントで「ヒントパラメータを追加する方法で実行」する場合、読み取り専用分析エンジンにログインする際に-cパラメータを追加する必要があります。そうでないと、ヒントが機能しません。

性能対比

テスト環境

読み書きインスタンス:16コア・64GB。
読み取り専用分析エンジン:16コア64GB。

テストデータ

TPC-H 10GBデータセットを使用します。

複雑なSQLのテストと結果

set libra_etl_to_rw=on;
set libra_concurrent_etl=off;
set libra_etl_concurrency=1;

create table t1 (
supp_nation VARCHAR(50),
cust_nation VARCHAR(50),
l_year INT,
revenue DECIMAL
);

INSERT INTO t1 SELECT
supp_nation, cust_nation, l_year, sum(volume) as revenue
from (select n1.n_name as supp_nation, n2.n_name as cust_nation,
extract(year from l_shipdate) as l_year,
l_extendedprice * (1 - l_discount) as volume
from supplier, lineitem, orders, customer, nation n1, nation n2
where s_suppkey = l_suppkey
and o_orderkey = l_orderkey
and c_custkey = o_custkey
and s_nationkey = n1.n_nationkey
and c_nationkey = n2.n_nationkey
and ((n1.n_name = 'JAPAN' and n2.n_name = 'INDIA')
or (n1.n_name = 'INDIA' and n2.n_name = 'JAPAN'))
and l_shipdate between '1995-01-01' and '1996-12-31') as shipping
group by supp_nation, cust_nation, l_year
order by supp_nation, cust_nation, l_year;
クエリ結果が4行の場合、テスト結果は以下の通りです(単位:秒)。
読み取り専用インスタンスにおけるSELECTの時間
ライトバック機能が有効になっていません。
読み書きインスタンスでのINSERT…SELECT…の実行時間
ライトバック機能を有効にする
読み取り専用分析エンジンにおけるINSERT…SELECT…の実行時間
0.57
232.77
0.61
set libra_etl_to_rw=on;
set libra_concurrent_etl=off;
set libra_etl_concurrency=1;

CREATE TABLE t2
(
p_brand VARCHAR(10),
p_type VARCHAR(25),
p_size INTEGER,
supplier_cnt INTEGER
);

INSERT INTO t2 SELECT
p_brand,
p_type,
p_size,
count(distinct ps_suppkey) as supplier_cnt
from
partsupp,
part
where
p_partkey = ps_partkey
and p_brand <> 'Brand#45'
and p_type not like 'MEDIUM POLISHED%'
and p_size in (49, 14, 23, 45, 19, 3, 36, 9)
and ps_suppkey not in (
select
s_suppkey
from
supplier
where
s_comment like '%Customer%Complaints%'
)
group by
p_brand,
p_type,
p_size
order by
supplier_cnt desc,
p_brand,
p_type,
p_size;
クエリ結果が27840行の場合、テスト結果は以下の通りです(単位:秒)。
読み取り専用インスタンスにおけるSELECTの時間
ライトバック機能が有効になっていません。
読み書きインスタンスでのINSERT…SELECT…の実行時間
ライトバック機能を有効にする
読み取り専用分析エンジンにおけるINSERT…SELECT…の実行時間
0.15
8.77
0.61

シンプルなSQLのテストおよび結果

set libra_etl_to_rw=on;
set libra_concurrent_etl=on;
set libra_etl_concurrency=8;

CREATE TABLE IF NOT EXISTS lineitem ( L_ORDERKEY INTEGER NOT NULL,
L_PARTKEY INTEGER NOT NULL,
L_SUPPKEY INTEGER NOT NULL,
L_LINENUMBER INTEGER NOT NULL,
L_QUANTITY DECIMAL(15,2) NOT NULL,
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
L_DISCOUNT DECIMAL(15,2) NOT NULL,
L_TAX DECIMAL(15,2) NOT NULL,
L_RETURNFLAG CHAR(1) NOT NULL,
L_LINESTATUS CHAR(1) NOT NULL,
L_SHIPDATE DATE NOT NULL,
L_COMMITDATE DATE NOT NULL,
L_RECEIPTDATE DATE NOT NULL,
L_SHIPINSTRUCT CHAR(25) NOT NULL,
L_SHIPMODE CHAR(10) NOT NULL,
L_COMMENT VARCHAR(44) NOT NULL , primary key(L_ORDERKEY, L_LINENUMBER));

INSERT INTO lineitem_t SELECT
*
from
lineitem;
クエリ結果が59986051行の場合、テスト結果は以下の通りです(単位:秒)。
コンカレンシーの実行をする
ライトバック機能が有効になっていません。
読み書きインスタンスでのINSERT…SELECT…の実行時間
ライトバック機能を有効にする
読み取り専用分析エンジンにおけるINSERT…SELECT…の実行時間
コンカレンシーの有効化しません。
622.7
1441.02
コンカレンシー数:8
259.20
コンカレンシー数:16
181.79
コンカレンシー数:32
185.64

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック