亞寵展、全球?qū)櫸锂a(chǎn)業(yè)風(fēng)向標(biāo)——亞洲寵物展覽會深度解析
1485
2022-05-30
1?????? 說明
1.1?????? 背景介紹
DWS使用一段時間后會產(chǎn)生一定臟頁數(shù)據(jù),從性能、空間角度考慮需要對臟頁空間進(jìn)行釋放。目前在以下幾種情況出現(xiàn)概率較高,本文檔主要為實(shí)際操作可能遇到的問題提供技術(shù)參考。
情況1:DWS任務(wù)多,包含臨時表操作,導(dǎo)致臟頁統(tǒng)計(jì)的視圖運(yùn)行報錯。
情況2:DWS數(shù)據(jù)量大,使用默認(rèn)系統(tǒng)視圖統(tǒng)計(jì)臟頁執(zhí)行時間長。
1.2?????? VACUUM FULL介紹
VACUUM FULL一方面可以及時回收空間,一方面可以一定程度上提升數(shù)據(jù)庫性能。
VACUUM FULL回收表中已經(jīng)刪除的行所占據(jù)的存儲空間。在一般的數(shù)據(jù)庫操作里,那些已經(jīng)DELETE的行并沒有從它們所屬的表中物理刪除,因此有必要周期地運(yùn)行VACUUM FULL,特別是在經(jīng)常更新的表上。
語法格式:VACUUM FULL ${tablename};
1.3?????? VACUUM FULL使用建議
VACUUM FULL 對現(xiàn)有DWS任務(wù)運(yùn)行具有一定影響。建議從以下幾個角度考慮:
u 系統(tǒng)表
針對系統(tǒng)表的操作比較危險,往往伴隨著阻塞DWS正常任務(wù)或鏈接接入。附錄的函數(shù)中已排除掉系統(tǒng)表的臟頁統(tǒng)計(jì)。
建議:根據(jù)系統(tǒng)表大小(參考附錄章節(jié)),半年~一年時間進(jìn)行統(tǒng)計(jì),若發(fā)現(xiàn)膨脹情況可協(xié)調(diào)窗口期做好業(yè)務(wù)暫停準(zhǔn)備并進(jìn)行釋放。這里不做特別說明。
u 普通表
可單純根據(jù)臟頁率進(jìn)行評估,決定是否需要進(jìn)行釋放;或通過臟頁率+表大小配合方式評估,更有目的性進(jìn)行釋放。
建議:
1、首先建議確定系統(tǒng)運(yùn)行壓力較低的時間段,在該時間段內(nèi)進(jìn)行臟頁統(tǒng)計(jì),并根據(jù)臟頁統(tǒng)計(jì)效果進(jìn)行VACUUM FULL 維護(hù)操作。
2、其次建議根據(jù)系統(tǒng)數(shù)據(jù)更新頻度,選取1~2月進(jìn)行一次臟頁統(tǒng)計(jì)。然后根據(jù)統(tǒng)計(jì)結(jié)果對這些表進(jìn)行VACUUM FULL 操作。
3、最后建議獲取系統(tǒng)臟頁時配合表大小,規(guī)則自行擬定。如:臟頁率超過20%、表大小*臟頁率釋放空間達(dá)到20GB 等等。
4、補(bǔ)充建議依照函數(shù)說明(附錄章節(jié)),對視圖數(shù)據(jù)進(jìn)行固化(創(chuàng)建對應(yīng)表)。這樣可避免二次篩選時耗時過長,只需要對表進(jìn)行篩選即可。
5、VACUUM FULL 操作建議根據(jù)系統(tǒng)壓力進(jìn)行調(diào)整,壓力中等情況下可使用1~2個并發(fā)。無壓力情況下可適當(dāng)提升并發(fā)度。
u 索引
針對索引需要進(jìn)行重建,這里不做過多說明。函數(shù)中已排除掉索引統(tǒng)計(jì)。
1.4?????? 函數(shù)使用說明
1、創(chuàng)建函數(shù)及視圖
DWS中根據(jù)附錄腳本,創(chuàng)建funckang_get_dirty_tuples函數(shù)及v_get_dirty_tuples視圖。需要注意視圖中注釋部分,自行決定是否保留。
2、對結(jié)果進(jìn)行二次分析
使用step3步驟,將視圖內(nèi)容映射成物理表。然后對物理表進(jìn)行規(guī)則篩選。
3、執(zhí)行vacuum full
根據(jù)篩選出的schema名、table名 ,進(jìn)行vacuum full 語句拼接,寫入SQL文件。
4、執(zhí)行vacuum full
確定時間時間段與并發(fā)度,通過 \parallel on ${number} 方式利用客戶端并發(fā)執(zhí)行。
1.5?????? 改進(jìn)后臟頁統(tǒng)計(jì)方式與原有方式比較
序號
對比內(nèi)容
1
CN+DN掃描
DN掃描
2
數(shù)據(jù)有效性
超過50%無效數(shù)據(jù),其中包括'pg_toast','pg_catalog','information_schema'系統(tǒng)schema下危險表,以及索引信息
不統(tǒng)計(jì)系統(tǒng)表、索引信息
3
性能
基于6T數(shù)據(jù)測試,耗時610秒
基于6T數(shù)據(jù)測試,耗時14秒
4
成功率
統(tǒng)計(jì)中若任務(wù)使用臨時表將導(dǎo)致統(tǒng)計(jì)報錯
排除掉臨時表統(tǒng)計(jì),成功率更高
5
統(tǒng)計(jì)范圍
統(tǒng)計(jì)非常全面,包括具體插入、刪除、更新等一些列信息
從性能角度考慮僅提供臟頁統(tǒng)計(jì)
6
穩(wěn)定性
系統(tǒng)提供,經(jīng)過測試
人工編寫,未進(jìn)行大量測試
2?????? 原有臟頁率統(tǒng)計(jì)方式說明
1.??? 查詢 pgxc_get_stat_all_tables (view1)
注:視圖可以獲取臟頁率。但其中包括插入、更新刪除等許多統(tǒng)計(jì)信息,同時還需要與pg_namespace 關(guān)聯(lián)。
↓
依賴
↓
2.??? pgxc_stat_all_tables(func1) 函數(shù)
注:函數(shù)自身循環(huán)遍歷各個CN與DN上的信息,是個無法下推函數(shù)。
↓
依賴
↓
3.??? pg_catalog.pg_stat_all_tables(view2)
注:試圖自身需要三個系統(tǒng)表關(guān)聯(lián),統(tǒng)計(jì)了很多與臟頁自身無關(guān)的信息。
3?????? 新重構(gòu)臟頁率統(tǒng)計(jì)方式說明
1、 funckang_get_dirty_tuples
注:函數(shù)自身只遍歷DN上的表,同時去掉冗余信息 。通過v_get_dirty_tuples 視圖計(jì)算表臟頁信息,提供臟頁率及表大小統(tǒng)計(jì)。
2、funckang_get_dirty_tuples_from_name
注:提供根據(jù)具體schemaname、tablename 方式返回具體的表的臟頁信息。
3、使用說明
a、建議create ?table tbname as select * from vname方式將統(tǒng)計(jì)信息寫入表中,后續(xù)可對表進(jìn)行精確過濾或二次處理。
b、若單純通過臟頁率判定,則視圖中不需要打開表大小統(tǒng)計(jì)。
c、若需要通過表大小*臟頁率方式統(tǒng)計(jì),則針對庫內(nèi)數(shù)據(jù)低于30T,可在視圖中將大小信息一并統(tǒng)計(jì),否則建議對單獨(dú)統(tǒng)計(jì)表大小(建議:不要一次性查詢,按照每個表單獨(dú)進(jìn)行統(tǒng)計(jì),提升統(tǒng)計(jì)成功率)并形成另外一張表,然后將“臟頁表”與“表大小統(tǒng)計(jì)表”進(jìn)行關(guān)聯(lián)計(jì)算。
4?????? 附錄
4.1?????? 系統(tǒng)表大小統(tǒng)計(jì)
select
pt.schemaname
,pt.tablename
,getdistributekey(pt.schemaname||'."'||pt.tablename||'"') as distribute_key
,pg_size_pretty(pg_relation_size(pt.schemaname||'."'||pt.tablename||'"')) as tablesize
,case when pt.hasindexes = 't' then pg_size_pretty(pg_indexes_size(pt.schemaname||'."'||pt.tablename||'"')) else '' end as indexsize
,pc.reloptions
,pg_stat_get_last_analyze_time(pc.oid) as lastanalyze
,pg_stat_get_last_vacuum_time(pc.oid) as lastvacuum
,pc.parttype
from
pg_tables pt
,pg_class pc
where
(pt.schemaname||'."'||pt.tablename||'"')::regclass::oid=pc.oid and pt.schemaname not in ('mppdbpermission','information_schema','cstore','pg_catalog','pmk')
order by
pg_relation_size((pt.schemaname||'."'||pt.tablename||'"')) desc;
4.2?????? 表大小逐項(xiàng)統(tǒng)計(jì)
SQL 文件拼接如下格式,對所有非系統(tǒng)表進(jìn)行統(tǒng)計(jì)。對日志處理后導(dǎo)入數(shù)據(jù)庫即可作為“表大小統(tǒng)計(jì)信息”表。
select pg_table_size(‘${schemanem}.${tablename}’);
select pg_table_size(‘${schemanem}.${tablename}’);
select pg_table_size(‘${schemanem}.${tablename}’);
…
附件: zangye.zip 2.80KB 下載次數(shù):4次
Gauss AP EI企業(yè)智能 數(shù)據(jù)倉庫服務(wù) GaussDB(DWS)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。