亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

阿里云HybridDB for PG 空間緊張的解法 - 冷熱分離、空間鎖定、分區(qū)、壓縮

來源:德哥 發(fā)布時間:2018-09-18 15:43:00 閱讀量:1087

標簽

PostgreSQL , Greenplum , HybridDB for PG


背景

數(shù)據(jù)庫空間不夠用怎么辦?

HDB PG是分布式數(shù)據(jù)庫,空間不夠用,擴容唄。但是用戶如果不想擴容呢?還有哪些處理方法?

例子

1 查看當前已使用空間

查看數(shù)據(jù)庫空間使用,表的空間使用,索引的空間使用等。

postgres=# select datname,pg_size_pretty(pg_database_size(datname)) from pg_database order by pg_database_size(datname) desc;
  datname  | pg_size_pretty
-----------+----------------
 postgres  | 32 MB
 template1 | 31 MB
 template0 | 31 MB
(3 rows)
postgres=# select relname,relkind,pg_size_pretty(pg_relation_size(oid)) from pg_class order by pg_relation_size(oid) desc limit 20;
             relname             | relkind | pg_size_pretty
---------------------------------+---------+----------------
 pg_proc                         | r       | 1920 kB
 pg_rewrite                      | r       | 1824 kB
 pg_depend                       | r       | 1344 kB
 pg_attribute                    | r       | 1248 kB
 pg_depend_reference_index       | i       | 1248 kB
 pg_depend_depender_index        | i       | 1248 kB
 pg_proc_proname_args_nsp_index  | i       | 864 kB
 pg_attribute_relid_attnam_index | i       | 576 kB
 pg_statistic                    | r       | 576 kB
 pg_description                  | r       | 576 kB
 pg_description_o_c_o_index      | i       | 480 kB
 pg_proc_oid_index               | i       | 480 kB
 pg_operator                     | r       | 384 kB
 pg_attribute_relid_attnum_index | i       | 384 kB
 pg_type                         | r       | 288 kB
 gp_persistent_relation_node     | r       | 288 kB
 pg_class                        | r       | 288 kB
 pg_authid_oid_index             | i       | 192 kB
 pg_authid_rolname_index         | i       | 192 kB
 pg_amproc_oid_index             | i       | 192 kB
(20 rows)

2 配置云監(jiān)控

通過配置云監(jiān)控,用戶可以隨時掌握數(shù)據(jù)庫的已使用空間,剩余空間的情況。

3 空間不夠用的策略

提供三種建議:

1、drop table, truncate table , 最簡單直接

2、DELETE ,版本被保留。所以需要delete+vacuum 。

如果是列AO表,delete后 可以用VACUUM收縮。

如果是HEAP表,delete后 VACUUM無法收縮, 需要VACUUM FULL,但是VACUUM FULL需要雙倍空間,并且會堵塞所有讀寫該表的操作,請慎用。

3、查看是不是有膨脹,可以清理垃圾減少膨脹。

《Greenplum 列存表(AO表)的膨脹、垃圾檢查與空間收縮(含修改分布鍵)》

《如何檢測、清理Greenplum膨脹、垃圾(含修改分布鍵) - 阿里云HybridDB for PG最佳實踐》

4、如果表有PARTITION,可以TRUNCATE分區(qū)

5、創(chuàng)建OSS外部表,將不經(jīng)常訪問的數(shù)據(jù)表(或分區(qū))寫入OSS外部表。然后刪除HDB PG里面對應(yīng)的TABLE與PARTITION

詳見:

https://help.aliyun.com/document_detail/35457.html

注意HDB PG沿用了GPDB的外部表框架,讀寫外部表操作是分開的。

導(dǎo)出需要創(chuàng)建可寫外部表,然后將本地表的數(shù)據(jù)寫出。

如果需要讀取OSS中大數(shù)據(jù),需要創(chuàng)建可讀外部表。

6、使用壓縮表(列存,大BLOCK壓縮效果好,還可以使用聚集提高壓縮比)。

Command:     CREATE TABLEDescription: define a new tableSyntax:CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE table_name ( 
[ { column_name data_type [ DEFAULT default_expr ]     [column_constraint [ ... ]
[ ENCODING ( storage_directive [,...] ) ]
] 
   | table_constraint
   | LIKE other_table [{INCLUDING | EXCLUDING} 
                      {DEFAULTS | CONSTRAINTS}] ...}
   [, ... ] ]
   [column_reference_storage_directive [, ... ]
   )
   [ INHERITS ( parent_table [, ... ] ) ]
   [ WITH ( storage_parameter=value [, ... ] )
   [ ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP} ]
   [ TABLESPACE tablespace ]
   [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]
   [ PARTITION BY partition_type (column)
       [ SUBPARTITION BY partition_type (column) ] 
          [ SUBPARTITION TEMPLATE ( template_spec ) ]
       [...]
    ( partition_spec ) 
        | [ SUBPARTITION BY partition_type (column) ]
          [...]
    ( partition_spec 
      [ ( subpartition_spec 
           [(...)] 
         ) ] 
    )where storage_parameter is:
   APPENDONLY={TRUE|FALSE}   // aO表,支持COLUMN存儲   BLOCKSIZE={8192-2097152}  // 塊大小
   ORIENTATION={COLUMN|ROW}  // 列存壓縮比高
   COMPRESSTYPE={ZLIB|QUICKLZ|RLE_TYPE|NONE}
   COMPRESSLEVEL={0-9}      // 選擇壓縮比   CHECKSUM={TRUE|FALSE}
   FILLFACTOR={10-100}
   OIDS[=TRUE|FALSE]

《一個簡單算法可以幫助物聯(lián)網(wǎng),金融 用戶 節(jié)約98%的數(shù)據(jù)存儲成本 (PostgreSQL,Greenplum幫你做到)》

7、查看是否是數(shù)據(jù)傾斜造成的磁盤滿。

《分布式DB(Greenplum)中數(shù)據(jù)傾斜的原因和解法 - 阿里云HybridDB for PostgreSQL最佳實踐》

8、如果是系統(tǒng)表膨脹,需要vacuum系統(tǒng)表,特別是大量使用臨時表可能導(dǎo)致pg_attribute膨脹。

建議后臺調(diào)度,在空閑時間vacuum pg_attribute .

vacuum  pg_attribute ; 
vacuum  pg_attribute_encoding ; 
vacuum  gp_relation_node ; 
vacuum  pg_class ;

如果發(fā)現(xiàn)元數(shù)據(jù)表以及膨脹得很厲害,需要VACUUM FULL清理,(找空閑時間,因為會堵塞所有操作)。

vacuum full pg_attribute;reindex table pg_attribute;vacuum full pg_attribute_encoding ;reindex table pg_attribute_encoding;vacuum full gp_relation_node ;reindex table gp_relation_node;vacuum full pg_class ;  
reindex table pg_class;

《大量使用臨時表帶來的系統(tǒng)表如pg_attribute膨脹問題,替代方案,以及如何擦屁股 - Greenplum, PostgreSQL最佳實踐》

9、如果以上都做不了,建議升級實例

參考

https://help.aliyun.com/document_detail/35457.html


分享:
評論:
你還沒有登錄,請先