日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
管理大型Postgres數(shù)據(jù)庫(kù)的三個(gè)技巧

關(guān)系型數(shù)據(jù)庫(kù) PostgreSQL(也被稱(chēng)為 Postgres)已經(jīng)越來(lái)越流行,全球各地的企業(yè)和公共部門(mén)都在使用它。隨著這種廣泛的采用,數(shù)據(jù)庫(kù)已經(jīng)變得比以前更大了。在 Crunchy Data,我們經(jīng)常與 20TB 以上的數(shù)據(jù)庫(kù)打交道,而且我們現(xiàn)有的數(shù)據(jù)庫(kù)還在繼續(xù)增長(zhǎng)。我的同事 David Christensen 和我收集了一些關(guān)于管理?yè)碛芯薮蟊淼臄?shù)據(jù)庫(kù)的技巧。

大表

生產(chǎn)數(shù)據(jù)庫(kù)通常由許多具有不同數(shù)據(jù)、大小和模式的表組成。常見(jiàn)的情況是,最終有一個(gè)巨大的、無(wú)序的數(shù)據(jù)庫(kù)表,遠(yuǎn)遠(yuǎn)大于你數(shù)據(jù)庫(kù)中的任何其他表。這個(gè)表經(jīng)常存儲(chǔ)活動(dòng)日志或有時(shí)間戳的事件,而且對(duì)你的應(yīng)用或用戶(hù)來(lái)說(shuō)是必要的。

真正的大表會(huì)因?yàn)楹芏嘣蛟斐商魬?zhàn),但一個(gè)常見(jiàn)的原因是鎖。對(duì)表的定期維護(hù)往往需要鎖,但對(duì)大表的鎖可能會(huì)使你的應(yīng)用癱瘓,或?qū)е露氯驮S多令人頭痛的問(wèn)題。我有一些做基本維護(hù)的技巧,比如添加列或索引,同時(shí)避免長(zhǎng)期運(yùn)行的鎖。

添加索引的問(wèn)題:在創(chuàng)建索引的過(guò)程中鎖住表。如果你有一個(gè)龐大的表,這可能需要幾個(gè)小時(shí)。

CREATE INDEX ON customers (last_name)

方案:使用 ??CREATE INDEX CONCURRENTLY?? 功能。這種方法將索引創(chuàng)建分成兩部分,一部分是短暫的鎖定,以創(chuàng)建索引,立即開(kāi)始跟蹤變化,但盡量減少應(yīng)用阻塞,然后是完全建立該索引,之后查詢(xún)可以開(kāi)始使用它。

CREATE INDEX CONCURRENTLY ON customers (last_name)

添加列

在數(shù)據(jù)庫(kù)的使用過(guò)程中,添加列是一個(gè)常見(jiàn)的請(qǐng)求,但是對(duì)于一個(gè)巨大的表來(lái)說(shuō),這可能是很棘手的,同樣是由于鎖的問(wèn)題。

問(wèn)題:當(dāng)你添加一個(gè)新的默認(rèn)值為一個(gè)函數(shù)的列時(shí),Postgres 需要重寫(xiě)表。對(duì)于大表,這可能需要幾個(gè)小時(shí)。

方案:將操作拆分為多條基本語(yǔ)句,總效果一致,但控制鎖的時(shí)間。

添加列:

ALTER TABLE all_my_exes ADD COLUMN location text

添加默認(rèn)值:

ALTER TABLE all_my_exes ALTER COLUMN location SET DEFAULT texas()

使用 ??UPDATE?? 來(lái)添加默認(rèn)值:

UPDATE all_my_exes SET location = DEFAULT

添加約束條件

問(wèn)題: 你想添加一個(gè)用于數(shù)據(jù)驗(yàn)證的檢查約束。但是如果你使用直接的方法來(lái)添加約束,它將鎖定表,同時(shí)驗(yàn)證表中的所有現(xiàn)有數(shù)據(jù)。另外,如果在驗(yàn)證的任何時(shí)候出現(xiàn)錯(cuò)誤,它將回滾。

ALTER TABLE favorite_bands ADD CONSTRAINT name_check CHECK (name = 'Led Zeppelin')

方案:告訴 Postgres 這個(gè)約束,但不要驗(yàn)證它。在第二步中進(jìn)行驗(yàn)證。這將在第一步中進(jìn)行短暫的鎖定,確保所有新的/修改過(guò)的行都符合約束條件,然后在另一步驟中進(jìn)行驗(yàn)證,以確認(rèn)所有現(xiàn)有的數(shù)據(jù)都通過(guò)約束條件。

告訴 Postgres 這個(gè)約束,但不要強(qiáng)制執(zhí)行它:

ALTER TABLE favorite_bands ADD CONSTRAINT name_check CHECK (name = 'Led Zeppelin') NOT VALID

然后在創(chuàng)建后驗(yàn)證它:

ALTER TABLE favorite_bands VALIDATE CONSTRAINT name_check

想了解更多?

David Christensen 和我將在 3 月 9 號(hào)到 10 到在加州帕薩迪納參加 SCaLE 的 Postgres Days。很多來(lái)自 Postgres 社區(qū)的優(yōu)秀人士也會(huì)在那里。加入我們吧!


當(dāng)前標(biāo)題:管理大型Postgres數(shù)據(jù)庫(kù)的三個(gè)技巧
文章網(wǎng)址:http://www.5511xx.com/article/dpchhoh.html