AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

再大的 DDL 變更操作都不怕了!一條命令直接搞定

來源: 責編: 時間:2024-07-10 17:56:00 134觀看
導讀介紹pg-online-schema-change (pg-osc) 是一個工具,用于以最小的鎖在 PostgreSQL 表中進行模式更改(任何ALTER語句),以幫助實現在生產環境工作負載下進行零停機的模式更改。pg-osc使用了影子表的概念來執行模式更改。在較

介紹

pg-online-schema-change (pg-osc) 是一個工具,用于以最小的鎖在 PostgreSQL 表中進行模式更改(任何ALTER語句),以幫助實現在生產環境工作負載下進行零停機的模式更改。UTV28資訊網——每日最新資訊28at.com

pg-osc使用了影子表的概念來執行模式更改。在較高級別上,它會創建一個在結構上與主表相同的影子表,對影子表執行模式更改,將內容從主表復制到影子表,并在最后交換表名稱,同時使用觸發器(通過審計表)保留對主表的所有更改。UTV28資訊網——每日最新資訊28at.com

pg-osc受到了pt-online-schema-change (MySQL) 和pg_repack等工具的設計和工作原理的啟發。可在下面閱讀更多內容,關于它是如何工作的、亮點特性、注意事項和示例。UTV28資訊網——每日最新資訊28at.com

用法

pg-online-schema-change help performUsage:  pg-online-schema-change perform -a,--alter-statement=ALTER_STATEMENT -d,--dbname=DBNAME -h,--host=HOST -p,--port=N -s,--schema=SCHEMA -u,--username=USERNAMEOptions:-a,--alter-statement=ALTER_STATEMENT # The ALTER statement to perform the schema change-s,--schema=SCHEMA                   # The schema in which the table is. Default: public-d,--dbname=DBNAME                   # Name of the database-h,--host=HOST                       # Server host where the Database is located-u,--username=USERNAME               # Username for the Database-p,--port=N                          # Port for the Database. Default: 5432-w,[--password=PASSWORD] # DEPRECATED: Password for the Database. Please pass PGPASSWORD environment variable instead.-v,[--verbose],[--no-verbose] # Emit logs in debug mode-f,[--drop],[--no-drop] # Drop the original table in the end after the swap-k,[--kill-backends],[--no-kill-backends] # Kill other competing queries/backends when trying to acquire lock for the shadow table creation and swap. It will wait for --wait-time-for-lock duration before killing backends and try upto 3 times.-w,[--wait-time-for-lock=N] # Time to wait before killing backends to acquire lock and/or retrying upto 3 times. Default: 10. It will kill backends if --kill-backends is true, otherwise try upto 3 times and exit if it cannot acquire a lock.-c,[--copy-statement=COPY_STATEMENT] # Takes a .sql file location where you can provide a custom query to be played (ex: backfills) when pgosc copies data from the primary to the shadow table. More examples in README.-b,[--pull-batch-count=N] # Number of rows to be replayed on each iteration after copy. Default: 1000. This can be tuned for faster catch up and swap. Best used with delta-count.-e,[--delta-count=N] # Indicates how many rows should be remaining before a swap should be performed. Default: 20. This can be tuned for faster catch up and swap, especially on highly volume tables. Best used with pull-batch-count.-o,[--skip-foreign-key-validation],[--no-skip-foreign-key-validation] # Skip foreign key validation after swap. You shouldn't need this unless you have a very specific use case, like manually validating foreign key constraints after swap.
Usage:  pg-online-schema-change --version, -vprint the version

亮點特性

  • ? pg-osc支持在添加、刪除或重命名列時運行,而不會丟失數據。
  • ? pg-osc在整個過程中只獲取最少的鎖(閱讀下面的警告)。
  • ? 復制索引和外鍵。
  • ? 可以在最后刪除或保留舊表(可選)。
  • ? 減少膨脹(因為 pg-osc 會創建一個新表,并在交換后刪除舊表)。
  • ? 調整審計/日志表中重放速度的快慢(重放更大的工作負載)。
  • ? 在將數據從主表復制到影子表時,回填舊列/新列,然后執行交換。示例。

示例

重命名列

export PGPASSWORD=""pg-online-schema-change perform /  --alter-statement 'ALTER TABLE books RENAME COLUMN email TO new_email' /  --dbname "postgres" /  --host "localhost" /  --username "jamesbond"

多個 ALTER 語句

export PGPASSWORD=""pg-online-schema-change perform /  --alter-statement 'ALTER TABLE books ADD COLUMN "purchased" BOOLEAN DEFAULT FALSE; ALTER TABLE books RENAME COLUMN email TO new_email;' /  --dbname "postgres" /  --host "localhost" /  --username "jamesbond" /  --drop

5 秒后殺死其他后端

如果操作是在一個繁忙的表上執行的,則可以使用pg-osc的kill-backend功能,來終止可能與pg-osc操作競爭的其他后端,以便在短時間內獲取鎖。pg-osc獲得的ACCESS EXCLUSIVE鎖只持有一小段時間,然后就釋放了。您可以調整在殺死其他后端之前pg-osc應該等待多長時間(或者pg-osc是否應該在一開始就殺死后端)。UTV28資訊網——每日最新資訊28at.com

export PGPASSWORD=""pg-online-schema-change perform /--alter-statement 'ALTER TABLE books ADD COLUMN "purchased" BOOLEAN DEFAULT FALSE;' /--dbname "postgres" /--host "localhost" /--username "jamesbond" /--wait-time-for-lock5 /--kill-backends /--drop

重放更大的工作負載

如果表的寫入吞吐量較高,則默認的重放速度可能不夠用。也就是說,您可能會看到pg-osc從審計表中一次性重放 1000 行(pull-batch-count)。pg-osc還會等到審計表中的剩余行數(delta-count)為 20 后再進行交換。您可以將這些值調整為更高的值,以便更快地趕上此類工作負載。UTV28資訊網——每日最新資訊28at.com

export PGPASSWORD=""pg-online-schema-change perform /--alter-statement 'ALTER TABLE books ADD COLUMN "purchased" BOOLEAN DEFAULT FALSE;' /--dbname "postgres" /--host "localhost" /--username "jamesbond" /--pull-batch-count 2000--delta-count 500--wait-time-for-lock5 /--kill-backends /--drop

回填數據

在將數據插入到影子表時,您可以傳入自定義 sql 文件,來執行復制和任何其他工作,而不僅僅是從主表復制所有列和行。例如:回填某些列。通過提供copy-statement,pg-osc將改為運行查詢以執行復制操作。UTV28資訊網——每日最新資訊28at.com

重要提示:UTV28資訊網——每日最新資訊28at.com

? 可能會意外違反約束或不復制數據,因此請謹慎操作。UTV28資訊網——每日最新資訊28at.com

? 在自定義 SQL 中連接時,必須使用 OUTER JOIN,否則會丟失與連接表不匹配的行。UTV28資訊網——每日最新資訊28at.com

? ALTER語句可能會更改表的結構,因此請謹慎操作。UTV28資訊網——每日最新資訊28at.com

? 保留%{shadow_table},因為它會替換為影子表的目標。UTV28資訊網——每日最新資訊28at.com

? 強烈建議用戶在生產環境上使用之前,先測試和驗證結果!UTV28資訊網——每日最新資訊28at.com

-- file: /src/query.sqlINSERT INTO %{shadow_table}(foo, bar, baz, rental_id, tenant_id)SELECT a.foo,a.bar,a.baz,a.rental_id,r.tenant_id AS tenant_idFROM ONLY examples aLEFT OUTER JOIN rentals rON a.rental_id = r.id
pg-online-schema-change perform /  --alter-statement 'ALTER TABLE books ADD COLUMN "tenant_id" VARCHAR;' /  --dbname "postgres" /  --host "localhost" /  --username "jamesbond" /  --copy-statement "/src/query.sql" /  --drop

使用 Docker 運行

docker run --network host -it --rm shayonj/pg-osc:latest /    pg-online-schema-change perform /    --alter-statement 'ALTER TABLE books ADD COLUMN "purchased" BOOLEAN DEFAULT FALSE; ALTER TABLE books RENAME COLUMN email TO new_email;' /    --dbname "postgres" /    --host "localhost" /    --username "jamesbond" /    --drop

注意事項

? 目前尚不支持分區表。歡迎提供 PR 請求和想法。UTV28資訊網——每日最新資訊28at.com

? 表上應存在主鍵;沒有的話,pg-osc會引發異常UTV28資訊網——每日最新資訊28at.com

? 這是因為,目前沒有其他方法可以在重放期間唯一標識行。UTV28資訊網——每日最新資訊28at.com

? pg-osc會在操作期間兩次獲取父表上的ACCESS EXCLUSIVE鎖。UTV28資訊網——每日最新資訊28at.com

? 第一次,在設置觸發器和影子表時。UTV28資訊網——每日最新資訊28at.com

? 下一次,在執行交換和更新外鍵引用時。UTV28資訊網——每日最新資訊28at.com

? 注意:如果指定了kill-backends,它會嘗試終止在這兩個時間內的任何競爭操作。UTV28資訊網——每日最新資訊28at.com

? 根據設計,pg-osc不會終止正在執行的任何其他 DDL。在操作過程中,最好不要對父表運行任何 DDL。UTV28資訊網——每日最新資訊28at.com

? 由于復制表的性質,磁盤上需要有足夠的空間來支持該操作。UTV28資訊網——每日最新資訊28at.com

? 索引、約束和序列名稱會被更改,并失去其原始命名。UTV28資訊網——每日最新資訊28at.com

? 可以在將來的版本中修復。如有需要,可創建特性請求。UTV28資訊網——每日最新資訊28at.com

? 外鍵會被刪除,并重新以NOT VALID的方式添加到引用表。接著運行VALIDATE CONSTRAINT操作。UTV28資訊網——每日最新資訊28at.com

? 要確保保持完整性,并在重新引入外鍵時不用獲取額外的鎖,因此才會使用NOT VALID。UTV28資訊網——每日最新資訊28at.com

它是如何工作的

此工具中有 3 種類型的表:UTV28資訊網——每日最新資訊28at.com

  • ? 主表:可能要對其運行模式更改的表
  • ? 影子表:現有主表的副本表
  • ? 審計表:用于存儲主表上的任何更新/插入/刪除的表

how-it-workshow-it-worksUTV28資訊網——每日最新資訊28at.com

1. 創建一個審計表,以記錄對父表所做的更改。UTV28資訊網——每日最新資訊28at.com

2. 獲取一個簡短的ACCESS EXCLUSIVE鎖,以在父表上添加觸發器,記錄插入、更新、刪除操作到審計表。UTV28資訊網——每日最新資訊28at.com

3. 創建一個新的影子表,并在影子表上運行 ALTER 或遷移。UTV28資訊網——每日最新資訊28at.com

4. 復制舊表中的所有行。UTV28資訊網——每日最新資訊28at.com

5. 在新表上構建索引。UTV28資訊網——每日最新資訊28at.com

6. 將審計表中累積的所有更改重放到影子表中。UTV28資訊網——每日最新資訊28at.com

? 在審計審計表中的行時,刪除這些行。UTV28資訊網——每日最新資訊28at.com

7. 一旦差量行數(剩余行數)到 ~20,則在事務中獲取父表上的ACCESS EXCLUSIVE鎖,然后:UTV28資訊網——每日最新資訊28at.com

? 交換表名稱(影子表 <> 父表)。UTV28資訊網——每日最新資訊28at.com

? 刪除外鍵,并重新以NOT VALID的方式創建,以更新其他表中的外鍵引用。UTV28資訊網——每日最新資訊28at.com

8. 在新表上運行ANALYZE。UTV28資訊網——每日最新資訊28at.com

9. 驗證所有添加的NOT VALID的外鍵。UTV28資訊網——每日最新資訊28at.com

10. 刪除父表(現在是舊表)(可選)。UTV28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-100185-0.html再大的 DDL 變更操作都不怕了!一條命令直接搞定

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 騰訊電商部門二面:如何保證冪等性?

下一篇: DDD 是什么?—— 你以前只會用 Service + 貧血模型!

標簽:
  • 熱門焦點
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • 盧偉冰長文解析K60至尊版 對Redmi有著里程碑式的意義

    在今天的Redmi后性能時代戰略發布會結束之后,Redmi總經理盧偉冰又帶來了一篇長文,詳解了為什么 Redmi 要開啟后性能時代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 5月iOS設備性能榜:M1 M2依舊是榜單前五

    和上個月一樣,沒有新品發布的iOS設備性能榜的上榜設備并沒有什么更替,僅僅只有跑分變化而產生的排名變動,剛剛開始的蘋果WWDC2023,推出的產品也依舊是新款Mac Pro、新款Mac Stu
  • 服務存儲設計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數據從主存儲加載到KV緩存中,加速后續的訪問。在存在重復度的場景,Cache-Aside可以提升服務性能,降低底層存儲的壓力,缺點是緩存和底
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • 如何使用JavaScript創建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經瀏覽過購物網站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區域,以便瀏覽。結合這個小小的重要功能可以大大改善您網站的用戶體驗
  • 機構稱Q2全球智能手機出貨量同比下滑11% 蘋果份額依舊第2

    7月20日消息,據外媒報道,研究機構的報告顯示,由于需求下滑,今年二季度全球智能手機的出貨量,同比下滑了11%,三星、蘋果等主要廠商的銷量,較去年同期均有下
  • 聯想小新Pad Pro 12.6將要推出,搭載高通驍龍 870 處理器

    聯想小新Pad Pro 12.6將于秋季新品會上推出,官方按照慣例直接在發布會前給出了機型的所有參數。聯想小新 Pad Pro 12.6 將搭載高通驍龍 870 處理器,重量為 5
Top