這篇文章主要介紹“PostgreSQL12的新特性REINDEX有什么作用”,在日常操作中,相信很多人在PostgreSQL12的新特性REINDEX有什么作用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PostgreSQL12的新特性REINDEX有什么作用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、網(wǎng)絡空間、營銷軟件、網(wǎng)站建設、仙游網(wǎng)站維護、網(wǎng)站推廣。PG 12引入REINDEX
CONCURRENTLY,為了解決在REINDEX期間不能執(zhí)行查詢操作的問題,REINDEX CONCURRENTLY使用了相對于pg_repack(前身是pg_reorg)成本更低的方法來實現(xiàn)在索引rebuild期間數(shù)據(jù)表的可讀寫查詢,但rebuild的時間越長,需要的資源越多,其實現(xiàn)思路如下:
1.創(chuàng)建新的索引(在與原index一樣的catalog中),以_ccnew結尾
2.構建新索引,這一步會并行去做
3.使新索引與在構建期間出現(xiàn)的變化同步(catch up)
4.重命名新索引為舊索引的名稱并切換所有依賴舊索引的地方到新索引.舊索引設置為invalid(這一步成為交換)
5.標記舊索引為dead狀態(tài)(vacuum進程可回收)
6.刪除索引
上面每一步都需要事務.在reindexing table時,該表的所有索引會一次過進行收集每一步都會處理所有的索引.可以把這個過程視為在一個單獨的事務中CREATE INDEX CONCURRENTLY后跟DROP INDEX的組合,中間有一步是完全透明的新舊索引切換.
如果在REINDEX期間出現(xiàn)異常,那么所有需要rebuild的索引的狀態(tài)都是invalid,意味著這些索引仍然占用空間,定義仍在但不能使用.
下面是測試腳本,PG 11 vs PG 12的一些區(qū)別
PG 11
testdb=# CREATE TABLE tab (a int); CREATE TABLE testdb=# INSERT INTO tab VALUES (1),(1),(2); INSERT 0 3 testdb=# CREATE UNIQUE INDEX CONCURRENTLY tab_index on tab (a); ERROR: could not create unique index "tab_index" DETAIL: Key (a)=(1) is duplicated. testdb=# \d tab Table "public.tab" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- a | integer | | | Indexes: "tab_index" UNIQUE, btree (a) INVALID testdb=# REINDEX TABLE tab; ERROR: could not create unique index "tab_index" DETAIL: Key (a)=(1) is duplicated. testdb=# DELETE FROM tab WHERE a = 1; DELETE 2 testdb=# REINDEX TABLE tab; REINDEX
PG 12
testdb=# CREATE TABLE tab (a int); CREATE TABLE testdb=# INSERT INTO tab VALUES (1),(1),(2); INSERT 0 3 testdb=# CREATE UNIQUE INDEX CONCURRENTLY tab_index on tab (a); psql: ERROR: could not create unique index "tab_index" DETAIL: Key (a)=(1) is duplicated. testdb=# REINDEX TABLE CONCURRENTLY tab; psql: WARNING: cannot reindex invalid index "public.tab_index" concurrently, skipping psql: NOTICE: table "tab" has no indexes REINDEX testdb=# DELETE FROM tab WHERE a = 1; DELETE 2 testdb=# REINDEX TABLE CONCURRENTLY tab; psql: WARNING: cannot reindex invalid index "public.tab_index" concurrently, skipping psql: NOTICE: table "tab" has no indexes REINDEX testdb=# REINDEX INDEX CONCURRENTLY tab_index; REINDEX testdb=#
PG 12自動跳過了invalid index.
到此,關于“PostgreSQL12的新特性REINDEX有什么作用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)-成都網(wǎng)站建設公司網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
當前名稱:PostgreSQL12的新特性REINDEX有什么作用-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://www.rwnh.cn/article24/csioce.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、微信公眾號、做網(wǎng)站、網(wǎng)站收錄、網(wǎng)頁設計公司、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容