国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PostgreSQL膨脹表或索引收縮插件之pg_squeeze

IT那活兒 / 3355人閱讀
PostgreSQL膨脹表或索引收縮插件之pg_squeeze
點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!??!

  

PostgreSQL的MVCC是通過(guò)使用一種多版本模型來(lái)維護(hù),所以表或索引的膨脹是不可避免的。

通常我們收縮膨脹表或索引可以使用vacuum full、rewrite table(如在線CLUSTER)的方式重建表,至于索引可以重建或重定位表的索引。

但上面說(shuō)的方式是需要持有排它鎖,會(huì)堵塞讀操作。為了減少鎖沖突,相應(yīng)的插件就應(yīng)運(yùn)而生,例如pg_squeeze、pg_repack等。


pg_squeeze和pg_repack區(qū)

首先說(shuō)pg_repack,pg_repack 是pg_reorg的一個(gè)分支。其工作機(jī)制如下

  • 創(chuàng)建一個(gè)日志表來(lái)記錄對(duì)原始表所做的更改。
  • 在原始表上添加一個(gè)觸發(fā)器,將 INSERT、UPDATE 和 DELETE 記錄到我們的日志表中。
  • 創(chuàng)建一個(gè)包含舊表中所有行的新表。
  • 在這個(gè)新表上建立索引。
  • 將日志表中產(chǎn)生的所有更改應(yīng)用到新表。
  • 使用system catalog(包含了元數(shù)據(jù)的VIEW和表的一個(gè)schema)交換表,包括索引和toast table。
  • 刪除原始表。
從上述pg_repack的工作機(jī)制來(lái)看,其使用了新建表的方式重組數(shù)據(jù),最后通過(guò)切換完成數(shù)據(jù)重組。僅僅在切換時(shí)需要持有排他鎖,因時(shí)間非常短暫,影響比VACUUM FULL和rewrite的方式小很多。但是pg_repack都需要建觸發(fā)器,記錄下增量重組時(shí),原表產(chǎn)生的增量數(shù)據(jù)。因此重組時(shí),觸發(fā)器及原表的DML會(huì)帶來(lái)一定的影響
而pg_squeeze的工作原理是創(chuàng)建一個(gè)新的數(shù)據(jù)文件,然后在復(fù)制快照時(shí)將所做的更改應(yīng)用到表中。這是使用REDO和logical replication來(lái)捕獲對(duì)重建表的數(shù)據(jù)更改的方式來(lái)完成。

所以相對(duì)于pg_repack,其不需要建觸發(fā)器,并且在重組時(shí)對(duì)原表的DML幾乎沒(méi)有性能影響。另外pg_squeeze支持自動(dòng)重組。即通過(guò)設(shè)置閾值,自動(dòng)啟動(dòng)WORKER進(jìn)程,將數(shù)據(jù)復(fù)制到重組表,最后加鎖切換。但是要求表必須有一個(gè)PRIMARY KEY,或者在非空列上至少有一個(gè)唯一索引。

pg_squeeze安裝及使用

下載路徑如下:

https://github.com/cybertec-postgresql/pg_squeeze

1. 設(shè)置PG_CONFIG環(huán)境變量,安裝時(shí),我們必須確保路徑中的pg_config 版本正確
2. 編譯安裝
3. 修改postgresql.conf 參數(shù)文件并重啟生效
wal_level = logical
max_replication_slots = 1             #或者在當(dāng)前值上加1。
shared_preload_libraries = pg_squeeze    #將pg_squeeze添加到現(xiàn)有庫(kù)中。
4. 使用超級(jí)用戶創(chuàng)建擴(kuò)展pg_squeeze
CREATE EXTENSION pg_squeeze;
常規(guī)處理表注冊(cè)詳細(xì):
要使“pg_squeeze”擴(kuò)展知道該表,您需要在“squeeze.tables”表中插入一條記錄。添加后,會(huì)定期檢查表的統(tǒng)計(jì)信息。每當(dāng)表滿足要“squeezed”的條件時(shí),就會(huì)將“任務(wù)”添加到隊(duì)列中。
最簡(jiǎn)單的“注冊(cè)”如下:
INSERT INTO squeeze.tables (tabschema, tabname, schedule)
VALUES (public, person, ({10}, {23}, NULL, NULL, {4, 6}));
可以選擇指定其他列,例如:
INSERT INTO squeeze.tables
(tabschema, tabname, schedule, free_space_extra, vacuum_max_age,max_retry)
VALUES (public, person, ({10}, {23}, NULL, NULL, {4, 6}), 30,2 hours, 2);
釋:表“public”.“person”在每周四和周六的 23:10 進(jìn)行檢查??臻e空間閾值為30%。

字段描述如下:

  • tabschema”和“tabname”分別是模式和表名。

  • schedule”列告訴何時(shí)應(yīng)該檢查表,并且可能會(huì)被squeezed。調(diào)度由以下復(fù)合數(shù)據(jù)類型的值描述,CREATE TYPE schedule AS ( minutes minute[], hours hour[], days_of_month dom[], months month[], days_of_week dow[] );
    “minutes”(0 到 59)和“hours”(0 到 23)指定一天內(nèi)的檢查時(shí)間,而“days_of_month”(1 到 31)、“months”(1 到 12)和“days_of_week” "(0 到 7,其中 0 和 7 都代表星期日)確定日期。

    如果“分鐘”、“小時(shí)”和“月”都與當(dāng)前時(shí)間戳匹配,則執(zhí)行檢查,而 NULL 值分別表示任何分鐘、小時(shí)和月。至于“days_of_month”和“days_of_week”,至少其中之一需要與當(dāng)前時(shí)間戳匹配,或者兩者都需要為 NULL 才能進(jìn)行檢查。

  • free_space_extra”表示空閑空間超過(guò)多少時(shí)就會(huì)對(duì)表進(jìn)行重建,默認(rèn)是50。

  • min_size”是表必須占用的最小磁盤(pán)空間(以 MB 為單位)才能進(jìn)行處理。默認(rèn)值為 8。

  • vacuum_max_age”當(dāng)進(jìn)行一次vacuum后,認(rèn)為fsm是有效的最大時(shí)間,默認(rèn)1小時(shí)。

  • max_retry”當(dāng)重建表失敗時(shí)最大的重新嘗試的次數(shù),默認(rèn)是0。

  • clustering_index”是已處理表的現(xiàn)有索引。處理完成后,表的元組將按此索引的鍵進(jìn)行物理排序。

  • rel_tablespace”是表應(yīng)該移動(dòng)到的現(xiàn)有表空間。NULL 意味著表應(yīng)該保持在原來(lái)的位置。

  • ind_tablespaces”是一個(gè)二維數(shù)組,其中每一行指定索引的表空間映射。第一列和第二列分別代表索引名和表空間名。所有未指定映射的索引都將保留在原始表空間中。

  • skip_analyze”表示表處理后不應(yīng)該有ANALYZE命令。默認(rèn)值為“false”,表示默認(rèn)執(zhí)行 ANALYZE。

啟動(dòng)pg_squeeze自動(dòng)處理命令
SELECT squeeze.start_worker();
關(guān)閉pg_squeeze命令
SELECT squeeze.stop_worker();
設(shè)置squeeze.max_xlock_time控制最大占用鎖的時(shí)間。
SET squeeze.max_xlock_time TO 100;
:?jiǎn)挝粸楹撩搿?/span>
臨時(shí)處理:
還可以手動(dòng)收縮表,而無(wú)需注冊(cè),跳過(guò)任何時(shí)間和膨脹檢查。
squeeze.squeeze_table(tabchema name, tabname name, clustering_index name, rel_tablespace name, ind_tablespaces name[])
例:
SELECT squeeze.squeeze_table(public, person_old202209, null, null, null);


本文作者:魏 斌(上海新炬王翦團(tuán)隊(duì))

本文來(lái)源:“IT那活兒”公眾號(hào)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/129227.html

相關(guān)文章

  • PostgreSQL的實(shí)踐一:初識(shí)

    摘要:每個(gè)服務(wù)由多個(gè)進(jìn)程組成,為首的進(jìn)程名為。服務(wù)使用字節(jié)長(zhǎng)的內(nèi)部事務(wù)標(biāo)識(shí)符,即時(shí)發(fā)生重疊后仍然繼續(xù)使用,這會(huì)導(dǎo)致問(wèn)題,所以需要定期進(jìn)行操作。操作被認(rèn)為是緊跟操作后的操作。在涉及高比例插入刪除的表中,會(huì)造成索引膨脹,這時(shí)候可以重建索引。 簡(jiǎn)介和認(rèn)知 發(fā)音 post-gres-q-l 服務(wù)(server) 一個(gè)操作系統(tǒng)中可以啟動(dòng)多個(gè)postgres服務(wù)。每個(gè)服務(wù)由多個(gè)進(jìn)程組成,為首的進(jìn)程名為p...

    yibinnn 評(píng)論0 收藏0
  • 跟著大彬讀源碼 - Redis 8 - 對(duì)象編碼字典

    摘要:屬性記錄了哈希表目前已有節(jié)點(diǎn)鍵值對(duì)的數(shù)量。字典字典的結(jié)構(gòu)類型特定函數(shù)私有數(shù)據(jù)哈希表兩個(gè)記錄進(jìn)度的標(biāo)志。此外,字典在進(jìn)行時(shí),刪除查找更新等操作會(huì)在兩個(gè)哈希表上進(jìn)行。在對(duì)哈希表進(jìn)行擴(kuò)容或收縮操作時(shí),使用漸進(jìn)式完成。 字典,是一種用于保存鍵值對(duì)的抽象數(shù)據(jù)結(jié)構(gòu)。由于 C 語(yǔ)言沒(méi)有內(nèi)置字典這種數(shù)據(jù)結(jié)構(gòu),因此 Redis 構(gòu)建了自己的字典實(shí)現(xiàn)。 在 Redis 中,就是使用字典來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)底層的。...

    kun_jian 評(píng)論0 收藏0
  • 對(duì)Flex布局的總結(jié)與思考

    摘要:主軸方向的多余空間的出現(xiàn)是因?yàn)槿萜鲗挾仍仨?xiàng)寬度之和。對(duì)空間分配的思考是如何計(jì)算項(xiàng)的寬度的所有項(xiàng)先按照原始寬度在容器中排列。開(kāi)發(fā)時(shí)布局的一般流程根據(jù)設(shè)計(jì),確定需要多少行來(lái)顯示所有內(nèi)容,然后確定每一行有哪些項(xiàng)。對(duì)每一項(xiàng),定義其樣式。 閱讀本文之前最好對(duì)flex布局有基本了解,可以通過(guò)參考資料中列舉的資源來(lái)學(xué)習(xí)。 flex布局規(guī)范的設(shè)計(jì)目標(biāo) 一維布局模型(one-dimensional...

    springDevBird 評(píng)論0 收藏0
  • Multi-Model多模數(shù)據(jù)庫(kù)引擎設(shè)計(jì)與實(shí)現(xiàn)

    摘要:數(shù)據(jù)庫(kù)多模是指同一個(gè)數(shù)據(jù)庫(kù)支持多個(gè)存儲(chǔ)引擎,可以同時(shí)滿足應(yīng)用程序?qū)τ诮Y(jié)構(gòu)化半結(jié)構(gòu)化非結(jié)構(gòu)化數(shù)據(jù)的統(tǒng)一管理需求。多模式數(shù)據(jù)管理能力,使得數(shù)據(jù)庫(kù)能夠進(jìn)行跨部門(mén)跨業(yè)務(wù)的數(shù)據(jù)統(tǒng)一存儲(chǔ)與管理,實(shí)現(xiàn)多業(yè)務(wù)數(shù)據(jù)融合,支撐多樣化的應(yīng)用服務(wù)。 如今,隨著業(yè)務(wù)互聯(lián)網(wǎng)化和智能化的發(fā)展以及架構(gòu) 微服務(wù)和云化的發(fā)展,應(yīng)用系統(tǒng)對(duì)數(shù)據(jù)的存儲(chǔ)管理提出了新的標(biāo)準(zhǔn)和要求,數(shù)據(jù)的多樣性成為了數(shù)據(jù)庫(kù)平臺(tái)面臨的一大挑戰(zhàn),數(shù)據(jù)庫(kù)...

    UCloud 評(píng)論0 收藏0
  • 系統(tǒng)架構(gòu)

    強(qiáng)力推薦!那些你不能錯(cuò)過(guò)的 GitHub 插件和工具 以代碼托管平臺(tái)起家的 GitHub 網(wǎng)站,已然成為全球程序員工作和生活中不可或缺的一份子。從優(yōu)秀的企業(yè),到優(yōu)秀的程序員,都將自己最優(yōu)秀的代碼作品存放在這片開(kāi)源凈土里,供彼此學(xué)習(xí)交流。 GitHub Trending 欄目甚至已經(jīng)成為 IT 從業(yè)人員的新聞日?qǐng)?bào),每日必讀。在之前的一… PostgreSQL 數(shù)據(jù)庫(kù)的前世今生 編輯:IT大咖說(shuō)閱讀字...

    Gilbertat 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<