1. <i id="s6b2k"><small id="s6b2k"></small></i>
    <b id="s6b2k"><bdo id="s6b2k"></bdo></b>
  2. <wbr id="s6b2k"></wbr>

    PostgreSQL將數據加載到buffer cache中操作方法_PostgreSQL

    來源:腳本之家  責任編輯:小易  

    我們都知道數據在緩存中訪問遠比在磁盤中訪問速度要快,那么我們怎么在pg中將指定的數據加載到緩存中呢,這有點類似于Oracle的in-memory。

    當然要注意并不是把數據加載到內存中就一定是好的,因為相較于磁盤,內存總是有限的,所以一幫我們只是在特殊場合下將需要的數據加載到內存中來加快訪問的速度。

    我們可以使用pg_prewarm插件來將指定的表加載到OS Buffer或者pg shared buffer中。

    安裝:

    bill=# create extension pg_prewarm ;
    CREATE EXTENSION

    性能測試:

    構建測試表t1,t2,分別插入1000W條測試數據

    bill=# create table t1(id int,info text);
    CREATE TABLE
    bill=# create table t2(id int,info text);
    CREATE TABLE
    bill=# insert into t1 select generate_series(1,10000000),md5(random()::text);
    INSERT 0 10000000
    bill=# insert into t2 select generate_series(1,10000000),md5(random()::text);
    INSERT 0 10000000

    測試前先清空shared_buffer,可以使用下面sql查看shared_buffer使用情況:
    安裝pg_buffercache插件:

    bill=# create extension pg_buffercache;
    CREATE EXTENSION

    查詢shared_buffer使用情況:

    SELECT
        c.relname,
        count(*) AS buffers
    FROM pg_buffercache b
    INNER JOIN pg_class c
       ON b.relfilenode = pg_relation_filenode(c.oid)
        AND b.reldatabase IN (0, (SELECT oid FROM pg_database
    WHERE datname = current_database()))
    GROUP BY c.relname
    ORDER BY 2 DESC;
                     relname                 | buffers
    -----------------------------------------+---------
     pg_attribute                            |      36
     pg_proc                                 |      27
     pg_class                                |      15
     pg_operator                             |      14
     pg_depend_reference_index               |      13
     pg_depend                               |      11
     pg_attribute_relid_attnum_index         |      10
     pg_proc_proname_args_nsp_index          |       9
    ......

    可以看到t1和t2表均不在shared_buffer中,我們來手動將t2表加載到shared_buffer中。

    bill=# SELECT pg_prewarm('t2');
     pg_prewarm
    ------------
          83334
    (1 row)

    性能測試:

    可以看到全表掃描t2表的性能要提升不少。

    bill=# explain analyze select * from t1;
                                                        QUERY PLAN
    ------------------------------------------------------------------------------------------------------------------
     Seq Scan on t1  (cost=0.00..183334.80 rows=10000080 width=37) (actual time=0.060..772.902 rows=10000000 loops=1)
     Planning Time: 0.294 ms
     Execution Time: 1044.922 ms
    (3 rows)
    
    Time: 1045.722 ms (00:01.046)
    
    bill=# explain analyze select * from t2;
                                                        QUERY PLAN
    ------------------------------------------------------------------------------------------------------------------
     Seq Scan on t2  (cost=0.00..183334.80 rows=10000080 width=37) (actual time=0.012..519.691 rows=10000000 loops=1)
     Planning Time: 0.280 ms
     Execution Time: 790.607 ms
    (3 rows)
    
    Time: 791.314 ms

    pg_prewarm其它介紹:

    下面主要介紹下pg_prewarm函數:
    該函式的創建語句如下:

    CREATE FUNCTION pg_prewarm(regclass,
    mode text default buffer,
    fork text default main,
    first_block int8 default null,
    last_block int8 default null)
    RETURNS int8
    AS MODULE_PATHNAME, pg_prewarm
    LANGUAGE C

    參數如下:

    regclass:要做prewarm的表名 mode:prewarm模式。prefetch表示異步預取到os cache;read表示同步預取;buffer表示同步讀入PG的shared buffer fork:relation fork的類型。一般用main,其他類型有visibilitymap和fsm first_block & last_block:開始和結束塊號。表的first_block=0,last_block可通過pg_class的relpages字段獲得 RETURNS int8:函數返回pg_prewarm處理的block數目(整型)

    可能有人會想:我直接將表select *全表查詢一遍不就可以將數據加載到緩存中了嘛,為什么還需要使用pg_prewarm呢?因為對于大小超過shared_buffer/4的表進行全表掃描時,pg一般不會使用全部的shared_buffer,而是只使用很少一部分的shared_buffer。所以,將大表加載到緩存中不能用一個查詢來直接實現的,而pg_prewarm正好可以滿足這個需求。

    參考鏈接:

    https://www.postgresql.org/docs/13/pgprewarm.html
    https://www.postgresql.org/docs/13/pgbuffercache.html

    到此這篇關于PostgreSQL將數據加載到buffer cache中的文章就介紹到這了,更多相關PostgreSQL數據加載buffer cache內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

    您可能感興趣的文章:python連接PostgreSQL數據庫的過程詳解docker環境下數據庫的備份(postgresql, mysql) 實例代碼PHP實現基于PDO擴展連接PostgreSQL對象關系數據庫示例C# 操作PostgreSQL 數據庫的示例代碼在Ubuntu中安裝Postgresql數據庫的步驟詳解PostgreSQL數據庫中跨庫訪問解決方案Python連接PostgreSQL數據庫的方法

  3. 本文相關:
  4. 如何將excel表格數據導入postgresql數據庫
  5. 基于postgresql密碼重置操作
  6. postgresql 索引之 hash的使用詳解
  7. 解決sqoop import 導入到hive后數據量變多的問題
  8. postgresql 實現更新序列的起始值
  9. postgresql 通過出生日期獲取年齡的操作
  10. postgresql 實現啟動、狀態查看、關閉
  11. pgsql臨時表創建及應用實例解析
  12. postgresql查詢結果添加一個額外的自增序列操作
  13. postgresql 如何查看pg_wal目錄下xlog文件總大小
  14. 如何導入數據到postgresql
  15. 如何導入PostgreSQL數據庫數據
  16. PostgreSQL如何導入數據
  17. PostgreSQL 怎么做數據的增量同步到其他PostgreSQL...
  18. 有postgresql的備份表結構及數據,想把這些數據導...
  19. 怎么在shell里操作postgresql數據庫呢?或者實現方...
  20. 如何同步postgresql數據
  21. PostgreSQL數據庫,想在腳本里面指定連接的數據庫...
  22. postgresql 空間要素數據怎樣導出導入
  23. 如何使用shp2pgsql 將shp格式的GIS數據導入到Postg...
  24. 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁python連接postgresql數據庫的過程詳解docker環境下數據庫的備份(postgresql, mysql) 實例代碼php實現基于pdo擴展連接postgresql對象關系數據庫示例c# 操作postgresql 數據庫的示例代碼在ubuntu中安裝postgresql數據庫的步驟詳解postgresql數據庫中跨庫訪問解決方案python連接postgresql數據庫的方法如何將excel表格數據導入postgresql數據庫基于postgresql密碼重置操作postgresql 索引之 hash的使用詳解解決sqoop import 導入到hive后數據量變多的問題postgresql 實現更新序列的起始值postgresql 通過出生日期獲取年齡的操作postgresql 實現啟動、狀態查看、關閉pgsql臨時表創建及應用實例解析postgresql查詢結果添加一個額外的自增序列操作postgresql 如何查看pg_wal目錄下xlog文件總大小postgresql 角色與用戶管理介紹windows下postgresql數據庫的下載windows下postgresql安裝圖解postgresql中的oid和xid 說明15個postgresql數據庫實用命令分postgresql alter語句常用操作小windows postgresql 安裝圖文教程postgresql 安裝和簡單使用postgresql 創建表分區postgresql新手入門教程postgresql使用pgadmin備份服務器數據的方postgresql 12版本搭建及主備部署操作postgresql 如何查找需要收集的vacuum 表psql 執行文件 permission denied的解決postgresql 對in,exists,any/all,join的spostgresql自定義函數詳解postgresql 判斷字符串中是否有中文的案例mybatis調用postgresql存儲過程實現數組入postgresql 邏輯復制 配置操作
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.yu113.com All Rights Reserved
    战天txt全集下载