中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

POSTGRESQL UPDATE怎么提高I/O能力

發布時間:2021-11-26 09:42:45 來源:億速云 閱讀:241 作者:小新 欄目:大數據

這篇文章給大家分享的是有關POSTGRESQL UPDATE怎么提高I/O能力的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

POSTGRESQL 的數據掃描,其實和其他的數據庫也無差,無非就是數據塊的掃描以及索引的掃描,這里POSTGRESQL 數據掃描也叫 TUPLE SCAN。

在POSTGRESQL 8.3 版本后再HEAP 表的修改中,有一個概念叫 HOT, 通過新的概念提高了堆表的性能,減少了I/O。 早起的POSTGRESQL 更新的方式是修改索引中的數據,主要是由于MVCC 多版本控制中UPDATE 一行數據后,是需要在索引中重新POINT,將原有INDEX的數據廢棄,這加大了I/O的操作。

POSTGRESQL UPDATE怎么提高I/O能力

目前的POSTGRESQL 早已放棄這樣的操作,當UPDATE 一行,如果可以POSTGRES將在原有的老的數據后添加新的COPY,并且POSTGRESQL 的存儲會標記,讓索引知曉老數據后是更新的數據。這樣POSTGRES 就避免了在更新整個INDEX ,使得UPDATE 后的數據不在修改INDEX,減少I/O。

另外這里可能有同學要問,如果old tuple 被清除了,數據鏈不就斷掉了,事實上是不會的,只需要將頁面的HEADER 中的 1 重新定向到 2 即可,最大化的減小I/O 是優化的目的。

POSTGRESQL UPDATE怎么提高I/O能力

但有兩種情況下是不能使用 HOT 功能的

1  更新后的數據已經跨頁,那是沒有辦法繼續使用剛才的方法,所以亂設計本來 CHAR(10) 可以解決的,非要 CHAR(400) 這就出現問題

2   更新查詢的 KEY 值

例如 UPDATE  A SET COL = 'A' WHERE  COL = ‘B’  這也是沒有辦法使用HOT 功能的,所以在大量更新KEY 本身的時候,速度相對非 KEY 來說,一定會比較慢。當然也有辦法,很簡單,你一定能想得到。

這里POSTGRESQL 還有一個和其他數據庫不大一樣的地方,就是如果想使用 符合索引(ORALCE MYSQL) 或者 INCLUDE INDEX (SQL SERVER)方式來不進行 回表訪問數據,按照原理,我們只需要將需要訪問的數據,包含在INDEX 中即可。

但是在POSTGRESQL 中即使你的索引已經包含了數據,他還有會回表檢測數據的可見性(這和他的原理有關,暫且不談),那這樣的設計就有點反人類了,POSTGRESQL 則使用了一個 叫 visibility map 的東西,來避免回表的操作,將數據是否可見直接記錄在 visibility map 中,只要記錄可見,則索引直接反饋數據,否則還要回表檢查。

并且最近對數據庫底層的存儲了解后,發現每種數據庫可能不擅長的場景

例如 在數據庫底層上 (SQL SERVER  MYSQL ) 都有聚簇索引的概念,也就是說,如果是RANGE 的提取數據,并且這個表是按照 SQL SERVER MYSQL 底層的存儲結構來設計表,則原理上可以比 ORACLE  和  POSTGRESQL (相對來說,POSTGRESQL 的底層設計,在RANGE 上應該也比ORACLE 要強,同時隨機的讀取的速度也不會慢,) 這樣的堆表設計的數據庫要更容易提取數據,速度更快(如果你使用 更先進的的SSD 或者 PCI-E 卡)或者你提取的數據不夠多,可能并不能有明顯的體現。但原理上一次尋道就能獲取連續的存儲的數據,要比多次尋道,獲取散列的數據要好的多。相反 如果提取的數據是無順序的,則ORACLE 和 PG 效率可能要高過 MYSQL 和 SQL SERVER (相對SQL SERVER 和 MYSQL 也有不同,相對 SQL SERVER 的隨機提取數據的能力要好于 MYSQL)。并且在數據表文件的生成上,pg和mysql一個表一個或多個文件,SQL SERVER 和 oracle 多個表占用一個表空間,當然如果你不怕麻煩也可以一個表一個表空間一個表多個文件,但我想沒有一個sql server 和 Oracle的DBA會認同你這樣的做法,你這樣會讓這兩位徹底的瘋掉。

感謝各位的閱讀!關于“POSTGRESQL UPDATE怎么提高I/O能力”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吴桥县| 商丘市| 准格尔旗| 驻马店市| 高邮市| 葫芦岛市| 淮南市| 桓仁| 汕头市| 朝阳市| 开阳县| 修武县| 平定县| 衡阳县| 台北县| 太康县| 嘉义县| 巴林左旗| 濉溪县| 成武县| 贵定县| 泊头市| 定边县| 莎车县| 石台县| 东兰县| 揭阳市| 温宿县| 会理县| 江津市| 中方县| 虹口区| 尚义县| 江口县| 大余县| 航空| 荣昌县| 望江县| 峨山| 临高县| 灌阳县|