您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關PostgreSQL如何使用系統OS cache 提升查詢性能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
今天我們就來說說一個PG的擴展 pgfincore 讓這個擴展來為我們更完善相關的服務和緩存狀態的展示,pgfincore是2ndQuadrant 公司,一家專門為的開源插件。
下面其他的先不講,先看這個插件能幫助我們做些什么,在講其他的。
下圖很清楚的顯示了,一個300萬行的表在系統中經歷了2次 count的操作大致使用的時間,按照一般的數據庫系統來說,我第一次查詢和第二次查詢如果查詢語句是一致的,那第二次的速度應該比第一次快,因為我緩存了查詢的語句和結果之間的對應關系(當然這里也有其他的情況,不在展開)。
圖中我們使用pgfincore插件中的一個,將表或索引預裝入到OS 緩存層面的功能,我們再次查詢,發現比第二次的速度還快,僅僅300萬的數據使用82毫秒。這說明我們將表或索引提升至OS的緩存中,對查詢的加速是有效的嗎,即使我們用不上什么索引,或沒有所以的情況下。
select * from pgsysconf();
通過pgsyusconf() 可以查看當前系統的OS 控制的頁面有多少,剩余多少。在通過這個插件可以很清晰的指導,當然我們缺少不缺少系統OS層面的緩存。(缺不缺 OS 系統緩存的問題我們可以解決了)
當然我們通過
select * from pgfincore('test'); 可以看到一個表的DISK 與OS PAGE 之間的對應的關系,
下面做一個實驗來證明,加載和不加載OS 內存的情況下,到底有什么區別,下圖中包含了15次頻繁的對一個表的 select * from 表 limit 10;的操作
總體的數據在0.6986秒
我們在加載了OS 系統緩存后,我們在做15次
顯示總體30次的查詢事假在0.9625秒,那加載后查詢的15次的時間是
0.9625 - 0.6986 = 0.2639 秒 也就是說大致節省了 3分之二2 強的時間。
另外在前幾期中講了pg_rewarm 插件,可以在系統重啟之后進行類似MYSQL的 將系統重啟動之前的數據灌入到INNODB BUFFER POOL中,但我們忽略了另一個問題,就是MYSQL 以及其他數據庫是沒有OS 緩存利用這么一說的,所以POSTGRESQL 如果你在重啟后還可以考慮對部分數據,怎么快速的緩沖到 OS 的緩沖的事情。實際上在做了幾個測試后,讓我打消了使用pgfadvise_loader的想法,因為提升到速度只在第一次有效,另外如果是生產機有多少機會會經常重啟,如果是測試機,有必要勞心勞力的作這個事情。
當然如果你感興趣可以看一下官方的文檔,關注一下 pgfadvise_loader可以滿足你嫉妒優化的想法。
下面整理了一下相關的一些命令
1 select * from pgsysconf_pretty();
得到你系統的OS層面的緩沖信息
2 select * from pgfadvise_willneed('表名');
加載索引或表到OS CACHE 層面
3 select * from pgfadvise_dontneed('p表名');
卸載表的內容從OS CACHE 層面
看完上述內容,你們對PostgreSQL如何使用系統OS cache 提升查詢性能有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。