日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

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

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

介紹

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

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

pg-osc受到了pt-online-schema-change (MySQL) 和pg_repack等工具的設計和工作原理的啟發。可在下面閱讀更多內容,關于它是如何工作的、亮點特性、注意事項和示例。k5H28資訊網——每日最新資訊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是否應該在一開始就殺死后端)。k5H28資訊網——每日最新資訊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 后再進行交換。您可以將這些值調整為更高的值,以便更快地趕上此類工作負載。k5H28資訊網——每日最新資訊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將改為運行查詢以執行復制操作。k5H28資訊網——每日最新資訊28at.com

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

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

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

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

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

? 強烈建議用戶在生產環境上使用之前,先測試和驗證結果!k5H28資訊網——每日最新資訊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 請求和想法。k5H28資訊網——每日最新資訊28at.com

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

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

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

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

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

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

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

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

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

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

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

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

它是如何工作的

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久九九精品| 日韩视频在线一区二区三区| 美女精品一区| 欧美成人乱码一区二区三区| 欧美黄色免费网站| 欧美午夜精品一区| 国产视频在线观看一区二区三区| 狠狠狠色丁香婷婷综合久久五月 | 一区二区三区亚洲| 91久久嫩草影院一区二区| 在线视频你懂得一区| 亚洲欧美日产图| 美女尤物久久精品| 国产精品久久久久久户外露出| 国内成+人亚洲| 一本久久综合亚洲鲁鲁| 久久国产高清| 欧美69视频| 国产精品久久精品日日| 一区二区三区中文在线观看| 亚洲精品免费观看| 欧美一级夜夜爽| 欧美国产日韩a欧美在线观看| 国产精品麻豆欧美日韩ww | 亚洲国产成人av好男人在线观看| av成人老司机| 久久免费视频在线观看| 欧美视频精品在线| **欧美日韩vr在线| 性感少妇一区| 欧美日韩一区二区三区免费| 精品av久久久久电影| 亚洲一区二区动漫| 欧美国内亚洲| 精品99一区二区| 亚洲欧美一区二区精品久久久| 欧美a级片网| 国产一区二区三区高清| 一区二区三区成人| 久热这里只精品99re8久| 国产精品大全| 亚洲另类自拍| 美女视频黄 久久| 国产午夜精品久久久久久久| 国产精品99久久久久久久久| 免费看精品久久片| 国产一区二区三区在线观看网站| 中文在线不卡视频| 欧美激情中文字幕一区二区| 激情亚洲一区二区三区四区| 香蕉亚洲视频| 欧美午夜精品理论片a级按摩 | 亚洲在线观看| 欧美日韩精品综合在线| 亚洲国产精品专区久久| 久久精品一区| 国产日韩一区二区三区| 亚洲一区视频在线| 欧美色图天堂网| 亚洲精品免费观看| 免费亚洲一区| 亚洲福利av| 久久天天狠狠| 狠狠色综合色区| 久久激情视频| 国产视频精品免费播放| 亚洲欧美日韩天堂一区二区| 欧美日韩中文在线观看| 亚洲乱码久久| 欧美精品一区在线| 亚洲欧洲在线一区| 欧美91精品| 亚洲欧洲另类国产综合| 免费成人性网站| 亚洲国产精品va在线看黑人动漫 | 亚洲国产精品女人久久久| 久久综合色播五月| 尤物网精品视频| 久久综合色88| 亚洲高清资源| 欧美国产成人在线| 亚洲麻豆一区| 欧美日韩三级在线| 中文精品视频一区二区在线观看| 欧美日韩美女一区二区| 日韩午夜高潮| 欧美日韩在线综合| 亚洲一区二区视频在线| 国产精品入口尤物| 性色av一区二区三区在线观看 | 男男成人高潮片免费网站| 亚洲国产高潮在线观看| 欧美大片免费久久精品三p | 老司机免费视频一区二区三区| 在线观看国产成人av片| 欧美成人午夜剧场免费观看| 亚洲人成7777| 欧美午夜视频| 欧美亚洲三级| 在线观看国产一区二区| 欧美黑人国产人伦爽爽爽| 99国产精品一区| 欧美性事在线| 欧美在线视频播放| 在线精品观看| 欧美日韩高清在线观看| 亚洲视频中文字幕| 国产日韩欧美在线看| 久久亚洲精品网站| 亚洲毛片一区| 国产美女精品视频免费观看| 久久久999精品| 亚洲人成啪啪网站| 国产精品久久999| 久久精品卡一| 亚洲精品黄色| 国产精品综合网站| 美女日韩欧美| 在线一区二区三区四区五区| 国产日韩欧美在线观看| 美女尤物久久精品| 亚洲视频高清| 好吊视频一区二区三区四区| 欧美激情精品久久久久久| 亚洲欧美成人一区二区在线电影| 好吊色欧美一区二区三区视频| 欧美激情第三页| 亚洲在线网站| 在线观看中文字幕亚洲| 欧美三级网页| 久久久91精品国产| 99re6热只有精品免费观看| 国产精品亚洲人在线观看| 美国成人毛片| 亚洲影院色在线观看免费| 好吊成人免视频| 国产精品a久久久久久| 久久久久久久综合| 亚洲作爱视频| 国产在线视频不卡二| 欧美日韩亚洲高清| 久久美女艺术照精彩视频福利播放| 日韩亚洲视频| 黑人操亚洲美女惩罚| 欧美日韩一级大片网址| 久久激情五月激情| 在线中文字幕日韩| 亚洲高清视频一区| 国产精品视频最多的网站| 欧美成人性网| 欧美一区二区三区四区在线| 亚洲精品字幕| 在线观看精品视频| 国产精品永久在线| 欧美欧美全黄| 久热国产精品| 欧美一区二区三区四区高清 | 激情六月婷婷久久| 国产精品欧美久久| 欧美理论电影在线播放| 久久天堂国产精品| 午夜影视日本亚洲欧洲精品| 日韩天堂在线视频| 亚洲福利专区| 国产综合色一区二区三区| 国产精品区一区| 欧美日韩欧美一区二区| 欧美高清在线一区二区| 久久久久久一区二区| 午夜精品久久久久久久久久久久久 | 麻豆精品精华液| 欧美夜福利tv在线| 亚洲一区二区三区色| 日韩特黄影片| 亚洲国产一区二区精品专区| 国模一区二区三区| 国产欧美一区二区白浆黑人| 欧美三级电影大全| 欧美精品综合| 欧美国产日韩精品| 欧美a一区二区| 免费不卡视频| 久久综合网络一区二区| 久久久国产一区二区| 欧美一站二站| 欧美一区二区三区免费在线看 | 午夜在线一区二区| 亚洲欧美国产高清| 亚洲一区二区在线观看视频| 一区二区三区日韩| 夜夜嗨av一区二区三区 | 老**午夜毛片一区二区三区| 久久精品一区二区三区不卡| 欧美一级视频| 欧美一级欧美一级在线播放| 亚洲中字黄色| 午夜精品免费| 欧美一区二区三区男人的天堂| 欧美一区二区日韩| 欧美综合第一页| 久久国产主播| 久久人人97超碰精品888| 久久免费的精品国产v∧| 久久九九久精品国产免费直播|