Greenplum upgrade from 4.3.4.1 to 4.3.30.0 準備工作
阿新 • • 發佈:2019-02-07
升級前的準備工作
1.保證升級可以回滾
2.按官方文件提示的升級相關檢視,修改相關引數
第一步首先保證greenplum 4.3.4.1的安裝目錄檔案不做任何變動,我的目錄為/opt/greenplum-db-4.3.4.1
第二步由於我是從4.3.4.1升級到4.3.30.0,所以只升級相關檢視,修改引數即可
1.修改引數
gpconfig -c gp_interconnect_type -v UDPIFC -m UDPIFC 如果之前是UDP一定要修改為UDPIFC,否則節點之間無法通訊
2.升級檢視gp_toolkit.gp_bloat_expected_pages
因為有可能在分割槽表中,主表即使沒有資料,也會報告主分割槽表膨脹,而導致主表也進行vacuum full. 檢視檢視定義 \d+ gp_toolkit.gp_bloat_expected_pages 更新的檢視新增了以下謂詞 AND NOT EXISTS ( SELECT parrelid FROM pg_partition WHERE parrelid = pgc.oid ) 升級gp_toolkit.gp_bloat_expected_pages 1.在master複製指令碼到文字檔案 2.在master每一個庫執行文字檔案,這裡假設複製到了gp_bloat_expected_pages.sql檔案中,在mytest庫執行 psql -f /home/gpadmin/gp_bloat_expected_pages.sql -d mytest gp_bloat_expected_pages.sql指令碼內容如下: BEGIN; CREATE OR REPLACE VIEW gp_toolkit.gp_bloat_expected_pages AS SELECT btdrelid, btdrelpages, CASE WHEN btdexppages < numsegments THEN numsegments ELSE btdexppages END as btdexppages FROM ( SELECT oid as btdrelid, pgc.relpages as btdrelpages, CEIL((pgc.reltuples * (25 + width))::numeric / current_setting('block_size')::numeric) AS btdexppages, (SELECT numsegments FROM gp_toolkit.__gp_number_of_segments) AS numsegments FROM ( SELECT pgc.oid, pgc.reltuples, pgc.relpages FROM pg_class pgc WHERE NOT EXISTS ( SELECT iaooid FROM gp_toolkit.__gp_is_append_only WHERE iaooid = pgc.oid AND iaotype = 't' ) AND NOT EXISTS ( SELECT parrelid FROM pg_partition WHERE parrelid = pgc.oid )) AS pgc LEFT OUTER JOIN ( SELECT starelid, SUM(stawidth * (1.0 - stanullfrac)) AS width FROM pg_statistic pgs GROUP BY 1) AS btwcols ON pgc.oid = btwcols.starelid WHERE starelid IS NOT NULL) AS subq; GRANT SELECT ON TABLE gp_toolkit.gp_bloat_expected_pages TO public; COMMIT;
3.升級檢視gp_toolkit.gp_bloat_diag
檢查是否需要更新,這裡顯示btdexppages integer,所以需要更新,如果是numeric則不需要 \df gp_toolkit.gp_bloat_diag List of functions -[ RECORD 1 ]-------+------------------------------------------------------------------------------------------------ Schema | gp_toolkit Name | gp_bloat_diag Result data type | record Argument data types | btdrelpages integer, btdexppages integer, aotable boolean, OUT bltidx integer, OUT bltdiag text Type | normal 1.拷貝檔案到一個文字檔案 2.在每個資料庫執行該指令碼檔案 注意在GP低負載的時候做相關操作,雖然不影響功能使用,但是有可能會影響效能 指令碼程式碼如下: BEGIN; CREATE OR REPLACE FUNCTION gp_toolkit.gp_bloat_diag(btdrelpages int, btdexppages numeric, aotable bool, OUT bltidx int, OUT bltdiag text) AS $$ SELECT bloatidx, CASE WHEN bloatidx = 0 THEN 'no bloat detected'::text WHEN bloatidx = 1 THEN 'moderate amount of bloat suspected'::text WHEN bloatidx = 2 THEN 'significant amount of bloat suspected'::text WHEN bloatidx = -1 THEN 'diagnosis inconclusive or no bloat suspected'::text END AS bloatdiag FROM ( SELECT CASE WHEN $3 = 't' THEN 0 WHEN $1 < 10 AND $2 = 0 THEN -1 WHEN $2 = 0 THEN 2 WHEN $1 < $2 THEN 0 WHEN ($1/$2)::numeric > 10 THEN 2 WHEN ($1/$2)::numeric > 3 THEN 1 ELSE -1 END AS bloatidx ) AS bloatmapping $$ LANGUAGE SQL READS SQL DATA; GRANT EXECUTE ON FUNCTION gp_toolkit.gp_bloat_diag(int, numeric, bool, OUT int, OUT text) TO public; CREATE OR REPLACE VIEW gp_toolkit.gp_bloat_diag AS SELECT btdrelid AS bdirelid, fnnspname AS bdinspname, fnrelname AS bdirelname, btdrelpages AS bdirelpages, btdexppages AS bdiexppages, bltdiag(bd) AS bdidiag FROM ( SELECT fn.*, beg.*, gp_toolkit.gp_bloat_diag(btdrelpages::int, btdexppages::numeric, iao.iaotype::bool) AS bd FROM gp_toolkit.gp_bloat_expected_pages beg, pg_catalog.pg_class pgc, gp_toolkit.__gp_fullname fn, gp_toolkit.__gp_is_append_only iao WHERE beg.btdrelid = pgc.oid AND pgc.oid = fn.fnoid AND iao.iaooid = pgc.oid ) as bloatsummary WHERE bltidx(bd) > 0; GRANT SELECT ON TABLE gp_toolkit.gp_bloat_diag TO public; COMMIT;
參考: