PostgreSQL 調整 Big Table 的注意事項

在一個大的 table(超過千萬筆以上的資料)做 tabel 的操作(加欄位、加 index、等,變更 schema 的動作)要小心造成 lock table

Safe Operations For High Volume PostgreSQL - Braintree 這篇文章有寫幾種狀況是不會 lock table 例如 add a new column

有些狀況會 lock table 例如 add ad index,然後可以看 our workaround 這個部分知道有分享他們是怎樣避免 lock 的

不過其中有一個是 add an index 可以加上 CONCURRENTLY 這個關鍵字去避免 lock table

官方文件是這樣說的

When this option is used, PostgreSQL will build the index without taking any locks that prevent concurrent inserts, updates, or deletes on the table; whereas a standard index build locks out writes (but not reads) on the table until it's done. There are several caveats to be aware of when using this option

  • https://www.postgresql.org/docs/9.5/static/sql-createindex.html

不過呢,實際上還是有可能會被卡到(application 層會造成有些 connection 成功有些 connection timeout),如果這個 table 有大量的 insert, update。

所以還是要小心,另外 expression indexes and partial indexes 也無法用 CONCURRENTLY 這個關鍵字

Follow 院長與芊比媽 on Google News