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

ePQ支持并行寫入及查詢OSS外部表

PolarDB PostgreSQL版的彈性跨機(jī)并行查詢(ePQ)支持并行寫入及查詢OSS外部表。

前提條件

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

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

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

說明

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

  • PostgreSQL 14

    select version();
  • PostgreSQL 11

    show polar_version;

背景信息

PolarDB PostgreSQL版支持通過oss_fdw插件創(chuàng)建OSS外部表,其物理存儲(chǔ)位于阿里云對(duì)象存儲(chǔ)OSS上,在數(shù)據(jù)庫(kù)內(nèi)僅保存表的元信息。數(shù)據(jù)庫(kù)中不常使用的歷史數(shù)據(jù)、冷數(shù)據(jù)可以以外部表的形式歸檔到OSS上,從而節(jié)省數(shù)據(jù)庫(kù)的存儲(chǔ)成本。PolarDB PostgreSQL版的FDW接口標(biāo)準(zhǔn)保證了OSS外部表依舊支持通過標(biāo)準(zhǔn)SQL進(jìn)行受限的讀寫訪問。

將本地表的數(shù)據(jù)通過寫入OSS外部表創(chuàng)建歸檔時(shí),PolarDB PostgreSQL版默認(rèn)將啟動(dòng)一個(gè)進(jìn)程寫入OSS外部表,其本質(zhì)上是單進(jìn)程上傳的網(wǎng)絡(luò)訪問模式。在歸檔數(shù)據(jù)量非常大的場(chǎng)景中,單進(jìn)程寫入OSS外部表無(wú)法有效利用OSS的網(wǎng)絡(luò)高帶寬,導(dǎo)致非常低效。

在查詢OSS外部表中的歷史歸檔數(shù)據(jù)時(shí),PolarDB PostgreSQL版默認(rèn)將啟動(dòng)一個(gè)進(jìn)程查詢OSS外表對(duì)應(yīng)的全量數(shù)據(jù),其本質(zhì)上也是單進(jìn)程下載的網(wǎng)絡(luò)訪問模式。當(dāng)歸檔數(shù)據(jù)量非常大時(shí),單進(jìn)程查詢OSS外部表無(wú)法有效利用OSS的網(wǎng)絡(luò)高帶寬,也相對(duì)低效。

PolarDB PostgreSQL版的彈性跨機(jī)并行查詢(ePQ)支持并行寫入及查詢OSS外部表:

  • ePQ優(yōu)化器能夠產(chǎn)生多進(jìn)程并行寫入OSS外部表的執(zhí)行計(jì)劃,ePQ執(zhí)行器將在讀寫節(jié)點(diǎn)上啟動(dòng)多個(gè)進(jìn)程并行寫入OSS外部表。

  • ePQ優(yōu)化器能夠產(chǎn)生多進(jìn)程并行查詢OSS外部表的執(zhí)行計(jì)劃,ePQ執(zhí)行器將在多個(gè)計(jì)算節(jié)點(diǎn)上啟動(dòng)多個(gè)進(jìn)程并行查詢OSS外部表。

ePQ對(duì)OSS外部表的并行化讀寫訪問能力將數(shù)據(jù)庫(kù)對(duì)OSS的網(wǎng)絡(luò)訪問模式從單進(jìn)程上傳/下載模式優(yōu)化為多進(jìn)程上傳/下載模式,從而能夠充分利用OSS的網(wǎng)絡(luò)帶寬資源,提升冷數(shù)據(jù)歸檔和冷數(shù)據(jù)查詢的性能。

使用指南

準(zhǔn)備數(shù)據(jù)

  1. 創(chuàng)建一張本地表t_local,并插入一定規(guī)模的數(shù)據(jù)。

    CREATE TABLE t_local (id INT, age INT, msg TEXT, detail TEXT);
    
    INSERT INTO t_local
    SELECT
        random() * 1000000,
        random() * 10000,
        md5(random()::TEXT),
        md5(random()::TEXT)
    FROM generate_series(1, 2000000);
  2. 創(chuàng)建一張與本地表t_local結(jié)構(gòu)相同的OSS外部表t_oss

    CREATE EXTENSION oss_fdw;
    
    CREATE SERVER ossserver FOREIGN DATA WRAPPER oss_fdw
    OPTIONS (host 'oss-cn-xxx.aliyuncs.com', bucket 'mybucket', id 'xxx', key 'xxx');
    
    CREATE FOREIGN TABLE t_oss (id INT, age INT, msg TEXT, detail TEXT)
    SERVER ossserver OPTIONS (dir 'archive/');

并行寫入OSS外部表

  1. 執(zhí)行以下命令,禁用ePQ。

    SET polar_enable_px TO OFF;
  2. 執(zhí)行以下命令,將本地表t_local中的數(shù)據(jù)導(dǎo)入到OSS外部表t_oss中。執(zhí)行計(jì)劃與時(shí)間如下。

    EXPLAIN (COSTS OFF) INSERT INTO t_oss SELECT * FROM t_local;
            QUERY PLAN
    ---------------------------
     Insert on t_oss
       ->  Seq Scan on t_local
    (2 rows)
    
    INSERT INTO t_oss SELECT * FROM t_local;
    INSERT 0 2000000
    Time: 8861.708 ms (00:08.862)

    根據(jù)上述執(zhí)行計(jì)劃顯示,執(zhí)行器將啟動(dòng)一個(gè)進(jìn)程來(lái)掃描本地表并同時(shí)寫入OSS外部表。總計(jì)用時(shí)為8861.708ms。

  3. 執(zhí)行以下命令,啟用ePQ以及ePQ并行INSERT功能,設(shè)置并行查詢本地表的并行度為16,設(shè)置并行寫入OSS外部表的并行度為16。

    SET polar_enable_px TO ON;
    SET polar_px_enable_insert_select TO ON;
    SET polar_px_dop_per_node TO 16;
    SET polar_px_insert_dop_num TO 16;
  4. 再次執(zhí)行以下命令,執(zhí)行計(jì)劃與時(shí)間如下。

    EXPLAIN (COSTS OFF) INSERT INTO t_oss SELECT * FROM t_local;
                        QUERY PLAN
    ---------------------------------------------------
     Insert on t_oss
       ->  Result
             ->  PX Hash 32:16  (slice1; segments: 32)
                   ->  Partial Seq Scan on t_local
     Optimizer: PolarDB PX Optimizer
    (5 rows)
    
    INSERT INTO t_oss SELECT * FROM t_local;
    INSERT 0 2000000
    Time: 1321.212 ms (00:01.321)

    根據(jù)上述執(zhí)行計(jì)劃顯示,ePQ執(zhí)行框架將會(huì)啟動(dòng)32個(gè)進(jìn)程(segments: 32)執(zhí)行計(jì)劃分片slice1,并行掃描本地表(Partial Seq Scan);然后通過Motion算子將數(shù)據(jù)重分布(PX Hash 32:16)到并行寫入OSS外部表的16個(gè)進(jìn)程中。總計(jì)用時(shí)為1321.212ms,較單進(jìn)程寫入有了明顯的提升。

并行查詢OSS外部表

  1. 執(zhí)行以下命令,禁用ePQ。

    SET polar_enable_px TO OFF;
  2. 執(zhí)行以下命令,查詢OSS外部表t_oss的全量數(shù)據(jù)行數(shù)。執(zhí)行計(jì)劃與結(jié)果如下。

    EXPLAIN SELECT COUNT(*) FROM t_oss;
                                      QUERY PLAN
    -------------------------------------------------------------------------------
     Aggregate  (cost=1366687.96..1366687.97 rows=1 width=8)
       ->  Foreign Scan on t_oss  (cost=0.00..1334280.40 rows=12963024 width=0)
             Directory on OSS: archive/
             Number Of OSS file: 17
             Total size of OSS file: 297 MB
    (5 rows)
    
    SELECT COUNT(*) FROM t_oss;
      count
    ---------
     4000000
    (1 row)
    
    Time: 36230.325 ms (00:36.230)

    根據(jù)上述執(zhí)行計(jì)劃顯示,執(zhí)行器將啟動(dòng)一個(gè)進(jìn)程來(lái)掃描OSS外部表對(duì)應(yīng)的17個(gè)OSS文件,總計(jì)297 MB,用時(shí)為36230.325ms。

  3. 執(zhí)行以下命令,啟用ePQ并設(shè)置查詢并行度為8。

    SET polar_enable_px TO ON;
    SET polar_px_dop_per_node TO 8;
  4. 再次執(zhí)行以下命令,執(zhí)行計(jì)劃與結(jié)果如下。

    EXPLAIN SELECT COUNT(*) FROM t_oss;
                                          QUERY PLAN
    ---------------------------------------------------------------------------------------
     Aggregate  (cost=0.00..431.00 rows=1 width=8)
       ->  PX Coordinator 16:1  (slice1; segments: 16)  (cost=0.00..431.00 rows=1 width=1)
             ->  Partial Foreign Scan on t_oss  (cost=0.00..431.00 rows=1 width=1)
                   Directory on OSS: archive/
                   Number Of OSS file: 17
                   Total size of OSS file: 297 MB
     Optimizer: PolarDB PX Optimizer
    (7 rows)
    
    SELECT COUNT(*) FROM t_oss;
      count
    ---------
     4000000
    (1 row)
    
    Time: 18100.894 ms (00:18.101)

    根據(jù)上述執(zhí)行計(jì)劃顯示,ePQ執(zhí)行框架將在兩個(gè)計(jì)算節(jié)點(diǎn)上總共啟動(dòng)16個(gè)進(jìn)程(segments: 16)執(zhí)行計(jì)劃分片slice1,并行掃描OSS外部表(Partial Foreign Scan)。這16個(gè)進(jìn)程將會(huì)以O(shè)SS上的文件為粒度,各自對(duì)查詢?nèi)蝿?wù)進(jìn)行分工。所有進(jìn)程的查詢結(jié)果將會(huì)通過Motion算子(PX Coordinator 16:1)匯聚到查詢發(fā)起進(jìn)程并返回。總計(jì)用時(shí)為18100.894ms,較單進(jìn)程查詢有了明顯的提升。