您有沒有遇到這樣的問題:已經(jīng)重啟了 PostgreSQL 服務(wù)器,但是第二次運(yùn)行同樣的查詢?nèi)匀豢斓枚啵@是為什么?
這個(gè)問題的答案很簡單,因?yàn)橹匦聠?dòng)數(shù)據(jù)庫服務(wù)器只會(huì)清除數(shù)據(jù)庫緩沖區(qū)的緩存,但是其他緩存沒有變化,這些緩存是:
緩沖區(qū)緩存 - PostgreSQL 從磁盤加載包含表和索引的頁面的共享緩沖池,以直接從內(nèi)存工作,從而減少磁盤訪問。
頁面緩存 - 操作系統(tǒng)通常會(huì)緩存文件 IO,除非您通過使用 O_DIRECT 標(biāo)志,或者以直接 IO 模式掛載文件系統(tǒng),來顯式跳過頁面緩存。
硬件緩存 - CPU 狀態(tài)緩存可能會(huì)輕微地影響到查詢執(zhí)行速度,但硬件 IO 緩存可能會(huì)造成巨大影響。其中一個(gè)是硬件 RAID 緩存,但更重要的是 SAN 緩存,它可能影響非常大。
讓我們通過一個(gè)示例來更好地了解,頁面緩存會(huì)如何影響查詢性能。
假設(shè)我們有一個(gè)名為t1
的表:
CREATE TABLE t1 (id integer, str text);
下面是用于生成數(shù)據(jù)的示例 SQL 查詢:
我們已經(jīng)給此表填充了數(shù)百萬行示例數(shù)據(jù)。
在我們觀察頁面緩存對(duì)查詢性能的影響之前,我們需要先停止 PostgreSQL 服務(wù)器,首先以 root 帳戶清理系統(tǒng)頁面緩存:
# echo 3 > /proc/sys/vm/drop_caches
然后,啟動(dòng) PostgreSQL 服務(wù)器。
現(xiàn)在,假設(shè)我們要檢索總共的記錄數(shù):
SET max_parallel_workers_per_gather TO 0;PLAIN (analyze, buffers) SELECT count(*) FROM t1; QUERY PLAN-------------------------------------------------------------------------------------------------------------------- Aggregate (cost=32909.00..32909.01 rows=1 width=8) (actual time=439.977..439.978 rows=1 loops=1) Buffers: shared read=20409 -> Seq Scan on t1 (cost=0.00..30409.00 rows=1000000 width=0) (actual time=0.244..349.652 rows=1000000 loops=1) Buffers: shared read=20409 Planning: Buffers: shared hit=13 read=6 Planning Time: 3.522 ms Execution Time: 440.979 ms(8 rows)
表現(xiàn)很好。讓我們重新啟動(dòng) PostgreSQL 服務(wù)器。
實(shí)際上,我們可以通過 pgfincore 來查看頁面緩存的統(tǒng)計(jì)信息。
現(xiàn)在,讓我們?cè)俅螜z索記錄總數(shù),看看它會(huì)如何影響性能:
SET max_parallel_workers_per_gather TO 0;EXPLAIN (analyze, buffers) SELECT count(*) FROM t1; QUERY PLAN-------------------------------------------------------------------------------------------------------------------- Aggregate (cost=32909.00..32909.01 rows=1 width=8) (actual time=199.904..199.906 rows=1 loops=1) Buffers: shared read=20409 -> Seq Scan on t1 (cost=0.00..30409.00 rows=1000000 width=0) (actual time=1.131..113.739 rows=1000000 loops=1) Buffers: shared read=20409 Planning: Buffers: shared hit=13 read=6 Planning Time: 0.413 ms Execution Time: 199.955 ms(8 rows)
現(xiàn)在查詢性能明顯更好。我們已將執(zhí)行時(shí)間縮短了兩倍以上!
本文鏈接:http://www.www897cc.com/showinfo-26-80342-0.html系統(tǒng)頁面緩存也會(huì)影響數(shù)據(jù)庫的運(yùn)行性能,你相信嗎?
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com