真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

這篇文章將為大家詳細(xì)講解有關(guān)PostgreSQL數(shù)據(jù)讀取快慢怎么辦,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了城北免費(fèi)建站歡迎大家使用!

PostgreSQL使用shared_buffers來緩存內(nèi)存中的塊。其思想是減少磁盤I/O并以最有效的方式加速數(shù)據(jù)庫(kù)。在正常操作期間,數(shù)據(jù)庫(kù)緩存將非常有用,并確保良好的響應(yīng)時(shí)間。但是,如果由于某種原因重新啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例,會(huì)發(fā)生什么情況呢?你的PostgreSQL數(shù)據(jù)庫(kù)性能將受到影響,直到你的I/O緩存再次填滿。這需要一些時(shí)間,而且可能會(huì)嚴(yán)重影響查詢響應(yīng)時(shí)間。

在PostgreSQL 11中,一個(gè)新的autoprewarm功能被添加到contrib模塊pg_prewarm中。這將使用在最后一次服務(wù)器重新啟動(dòng)之前持有的相同頁(yè)面自動(dòng)溫暖共享緩沖區(qū)。為了實(shí)現(xiàn)這一點(diǎn),Postgres現(xiàn)在有一個(gè)后臺(tái)工作程序來定期記錄文件中共享緩沖區(qū)的內(nèi)容——“autoprewarm.blocks”。接下來,它將在服務(wù)器重啟后重新加載這些頁(yè)面。

PostgreSQL可以通過 pg_prewarm 的方式來提供預(yù)熱緩沖的作用,pg_prewam 提供兩種功能,手動(dòng)緩沖和自動(dòng)緩沖。

如何安裝pg_prewarm及autoprewarm,以下基于pg 11 版本,在PG11中如果你編譯安裝則默認(rèn)的pg_prewarm 會(huì)被安裝到PG 中,確切地說,“autoprewarm master”將定期在文件“$PGDATA/autoprewarm.blocks”中記錄共享緩沖區(qū)中的頁(yè)面信息。更新“autoprewarm”的頻率。塊”由配置參數(shù)pg_prewarm_autoprewarm_interval決定。一旦服務(wù)器重新啟動(dòng),主服務(wù)器將讀取“autoprewarm”。塊”,并排序要預(yù)熱的頁(yè)面列表。接下來,它將每次為每個(gè)數(shù)據(jù)庫(kù)啟動(dòng)一個(gè)worker。然后,每個(gè)數(shù)據(jù)庫(kù)工作程序(即autoprewarm工作程序)將加載屬于其數(shù)據(jù)庫(kù)的頁(yè)面。

安裝只需要兩步

1 需要在 shared_preload_libraries 中添加

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

當(dāng)然你也可以執(zhí)行下面的命令

alter system set shared_preload_libraries = 'pg_prewarm';

從啟動(dòng)服務(wù)器后,可以看到 autoprewarm master  的這個(gè)線程

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

并且在數(shù)據(jù)目錄可以看到新生成的文件

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

2  在你的數(shù)據(jù)庫(kù)中執(zhí)行(與預(yù)熱無關(guān))

create extension pg_prewarm;

裝載你的擴(kuò)展

在做完這些我們做一個(gè)測(cè)試,我們?cè)诖蜷_的預(yù)熱的機(jī)器上,進(jìn)行分析查詢

可以看到第二次已經(jīng)走 cache了

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

我們關(guān)閉postgresql 再?gòu)闹貑?dòng)PG ,再次運(yùn)行,看到圖中查詢已經(jīng)走了cache 

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

如果我們關(guān)閉數(shù)據(jù)庫(kù),在關(guān)閉期間將autoprewarm.blocks刪除后,在重新啟動(dòng)PG 我們看看結(jié)果如何

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

很明確的看到查詢中沒有走緩沖。

那文件到底存儲(chǔ)了什么

第一行表示頁(yè)面的總數(shù),后面的每一行表示關(guān)于頁(yè)面的信息。每個(gè)頁(yè)面都由數(shù)據(jù)庫(kù)oid、表空間oid、關(guān)系的relfilenode、fork文件號(hào)和塊號(hào)惟一地表示。

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

我們可以看一下系統(tǒng)中的 pg_prewarm函數(shù),在PG 中國(guó)函數(shù)是使用C語(yǔ)言撰寫的,當(dāng)然如果用C語(yǔ)言來寫 PG 的函數(shù),效率是很高的。

CREATE OR REPLACE FUNCTION public.pg_prewarm(

regclass,

mode text DEFAULT 'buffer'::text,

fork text DEFAULT 'main'::text,

first_block bigint DEFAULT NULL::bigint,

last_block bigint DEFAULT NULL::bigint)

    RETURNS bigint

    LANGUAGE 'c'

    COST 1

    VOLATILE PARALLEL SAFE

AS '$libdir/pg_prewarm', 'pg_prewarm'

;

其中會(huì)將四個(gè)參數(shù)傳遞給函數(shù) 1  將prewarm表名傳遞,2 prewarm 的模式  3第三個(gè)參數(shù)表的fork類型,最后最后兩個(gè)是開始和結(jié)束的block number

我們會(huì)進(jìn)行以下測(cè)試,看在不同的模式下,如果數(shù)據(jù)上送到緩沖中的速度的提升,以及不同模式有什么差異。

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

上面是一個(gè)單表1.3G 的SIZE 的表。

下面我們需要對(duì)這個(gè)表進(jìn)行一個(gè)整體的 COUNT 運(yùn)算,我們來看看使用緩沖和不使用有什么區(qū)別

1 我們可以先裸奔一下,1.3G 大小的表進(jìn)行COUNT運(yùn)算時(shí),整體的速度在不到2秒可以給出結(jié)果(I am sorry, 我的I/O 系統(tǒng)是 SSD)

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

2 我們將數(shù)據(jù)進(jìn)行預(yù)讀

select pg_prewarm('bloom_table','read','main');

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

3 我們將模式調(diào)整為 buffer 模式

explain analyze select count(*) from bloom_table;

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

4 最后我們使用 prefetch 模式,異步的方式進(jìn)行預(yù)讀

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

基本上這三種方式?jīng)]有特別大的差別,但實(shí)際上  read 為使用OS 系統(tǒng)緩沖的模式,buffer使用 postgresql 的buffer 模式, prefetch 為異步讀取數(shù)據(jù)模式。另一個(gè)需要注意的地方,就是大表的讀取到緩沖中與大表直接指向語(yǔ)句是不一樣的,如果你認(rèn)為僅僅通過select * from table 的方式就能將數(shù)據(jù)讀入到緩沖,postgresql 是不會(huì)允許這樣的事情發(fā)生的,一般這樣的操作僅僅是能將很少一部分?jǐn)?shù)據(jù)預(yù)讀進(jìn)緩沖。當(dāng)然如果你的內(nèi)存比較小的情況,你要注意這個(gè)問題,突然將一個(gè)大表讀入緩沖帶來的問題,可能是將正在使用的數(shù)據(jù)從你的buffer 中 擠出,這可不是什么好的操作。

PostgreSQL數(shù)據(jù)讀取快慢怎么辦

關(guān)于“PostgreSQL數(shù)據(jù)讀取快慢怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。


網(wǎng)站欄目:PostgreSQL數(shù)據(jù)讀取快慢怎么辦
網(wǎng)站鏈接:http://weahome.cn/article/jodhos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部