日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

本文介紹了PolarDB PostgreSQL版的并行INSERT功能。

前提條件

支持的PolarDB PostgreSQL版的版本如下:

  • PostgreSQL 11(內(nèi)核小版本1.1.17及以上)

  • PostgreSQL 14(內(nèi)核小版本14.8.12.0及以上)

說明

您可通過如下語句查看PolarDB PostgreSQL版的內(nèi)核小版本的版本號:

  • PostgreSQL 11

    show polar_version;
  • PostgreSQL 14

    select version();

簡介

PolarDB PostgreSQL版支持彈性跨機并行查詢(ePQ)特性,通過利用集群中多個計算節(jié)點來提升查詢性能。同時,ePQ也支持在讀寫節(jié)點上通過多進程并行寫入,實現(xiàn)對INSERT語句的加速。

ePQ的并行INSERT功能用于加速INSERT INTO ... SELECT ...這種讀寫兼?zhèn)涞腟QL。對于SQL中的SELECT部分,ePQ將啟動多個進程并行執(zhí)行查詢;對于SQL中的INSERT部分,ePQ將在讀寫節(jié)點上啟動多個進程并行執(zhí)行寫入。執(zhí)行寫入的進程與執(zhí)行查詢的進程之間通過Motion算子進行數(shù)據(jù)傳遞。

支持并行INSERT的表類型如下:

  • 普通表

  • 分區(qū)表

  • (部分)外部表

并行INSERT支持動態(tài)調(diào)整寫入并行度(寫入進程數(shù)量),在查詢不成為瓶頸的條件下性能最高能提升三倍。

原理介紹

并行查詢和并行寫入以流水線的形式同時進行。執(zhí)行過程如下圖所示:執(zhí)行過程ePQ 對并行INSERT的執(zhí)行過程如下:

  1. ePQ優(yōu)化器以查詢解析得到的語法樹作為輸入,產(chǎn)生計劃樹。

  2. ePQ執(zhí)行器將計劃樹分發(fā)到各計算節(jié)點,并創(chuàng)建并行查詢/并行寫入進程,開始執(zhí)行各自負責執(zhí)行的子計劃。

  3. 并行查詢進程從存儲中并行讀取各自負責的數(shù)據(jù)分片,并將數(shù)據(jù)發(fā)送到Motion算子。

  4. 并行寫入進程從Motion算子中獲取數(shù)據(jù),向存儲并行寫入數(shù)據(jù)。

參數(shù)說明

  • 通過polar_px_dop_per_node參數(shù)調(diào)整INSERT INTO ... SELECT ...中查詢的并行度。

  • 通過polar_px_insert_dop_num參數(shù)調(diào)整INSERT INTO ... SELECT ...中寫入的并行度。

當查詢并行度較低時,逐步提升寫入并行度,SQL執(zhí)行時間將會逐漸下降并趨于平緩,趨于平緩的原因是查詢速度跟不上寫入速度而成為瓶頸。

當查詢并行度較高時,逐步提升寫入并行度,SQL執(zhí)行時間將會逐漸下降并趨于平緩;趨于平緩的原因是并行寫入只能在讀寫節(jié)點上進行,寫入速度因多個寫入進程對表頁面擴展鎖的爭搶而跟不上查詢速度,成為瓶頸。

示例

  1. 創(chuàng)建兩張表t1t2,并向t1中插入數(shù)據(jù)。

    CREATE TABLE t1 (id INT);
    CREATE TABLE t2 (id INT);
    INSERT INTO t1 SELECT generate_series(1,100000);
  2. 開啟ePQ及并行INSERT功能。

    SET polar_enable_px TO ON;
    SET polar_px_enable_insert_select TO ON;
  3. 通過INSERT語句將t1表中的所有數(shù)據(jù)插入到t2表中。查看并行INSERT的執(zhí)行計劃。

    EXPLAIN INSERT INTO t2 SELECT * FROM t1;
                                           QUERY PLAN
    -----------------------------------------------------------------------------------------
     Insert on t2  (cost=0.00..952.87 rows=33334 width=4)
       ->  Result  (cost=0.00..0.00 rows=0 width=0)
             ->  PX Hash 6:3  (slice1; segments: 6)  (cost=0.00..432.04 rows=100000 width=8)
                   ->  Partial Seq Scan on t1  (cost=0.00..431.37 rows=16667 width=4)
     Optimizer: PolarDB PX Optimizer
    (5 rows)

    其中的PX Hash 6:3表示6個并行查詢t1的進程通過Motion算子將數(shù)據(jù)傳遞給3個并行寫入t2的進程。

  4. 通過參數(shù)polar_px_insert_dop_num動態(tài)調(diào)整寫入并行度,查看并行INSERT的執(zhí)行計劃。

    SET polar_px_insert_dop_num TO 12;
    EXPLAIN INSERT INTO t2 SELECT * FROM t1;
                                            QUERY PLAN
    ------------------------------------------------------------------------------------------
     Insert on t2  (cost=0.00..952.87 rows=8334 width=4)
       ->  Result  (cost=0.00..0.00 rows=0 width=0)
             ->  PX Hash 6:12  (slice1; segments: 6)  (cost=0.00..432.04 rows=100000 width=8)
                   ->  Partial Seq Scan on t1  (cost=0.00..431.37 rows=16667 width=4)
     Optimizer: PolarDB PX Optimizer
    (5 rows)

    通過執(zhí)行計劃中的PX Hash 6:12顯示,并行查詢t1的進程數(shù)量不變,并行寫入t2的進程數(shù)量變?yōu)?code data-tag="code" class="code">12。