返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >PostgreSQL将数据加载到buffer cache中操作方法
  • 769
分享到

PostgreSQL将数据加载到buffer cache中操作方法

2024-04-02 19:04:59 769人浏览 泡泡鱼
摘要

我们都知道数据在缓存中访问远比在磁盘中访问速度要快,那么我们怎么在pg中将指定的数据加载到缓存中呢,这有点类似于oracle的in-memory。 当然要注意并不是把数据加载到内存中

我们都知道数据在缓存中访问远比在磁盘中访问速度要快,那么我们怎么在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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: PostgreSQL将数据加载到buffer cache中操作方法

本文链接: https://lsjlt.com/news/123660.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PostgreSQL将数据加载到buffer cache中操作方法
    我们都知道数据在缓存中访问远比在磁盘中访问速度要快,那么我们怎么在pg中将指定的数据加载到缓存中呢,这有点类似于Oracle的in-memory。 当然要注意并不是把数据加载到内存中...
    99+
    2024-04-02
  • 如何将数据从SQL Server 迁移到PostgreSQL?将数据从SQL Server 迁移到PostgreSQL方法分析!
    在不同类型的数据库之间迁移数据并非易事。在本文中,我们将比较几种从 SQL Server 转换到 PostgreSQL 的方法。Microsoft SQL Server 是一个很棒的数据库引擎,但在某些情...
    99+
    2020-08-12
    如何将数据从SQL Server 迁移到PostgreSQL?将数据从SQL Server 迁移到PostgreSQL方法分析!
  • 将Win10文件添加到白名单中的操作方法
    某些文件打开时,系统防火墙可能会将其识别为危险文件,并会定期删除或无法运行。只要文件的安全性得到确认,我们就可以将其添加到系统的白名单中来打开和运行。让我们来看看详细的操作方法。将Win10文件添加到白名单中的操作方法:首先,我们用鼠标左键...
    99+
    2023-07-17
  • GO将mysql 中 decimal 数据类型映射到 protobuf的操作方法
    目录protobuf中 float与double1、如何在rpc中优雅取出dcemial类型2、在rpc中 proto我们定义如下2.1、proto - double2.2、proto - float3、在go-zero...
    99+
    2024-04-02
  • GO将mysql 中 decimal 数据类型映射到 protobuf的操作方法
    目录protobuf中 float与double1、如何在rpc中优雅取出dcemial类型2、在rpc中 proto我们定义如下2.1、proto - double2.2、prot...
    99+
    2024-04-02
  • 如何使用Java函数load将数据加载到数组中?
    Java是一门广泛使用的编程语言,其强大的函数库为开发者提供了许多便利。其中,函数load()可以帮助我们将数据加载到数组中。本文将介绍如何使用Java函数load()实现数据加载到数组的功能。 首先,我们来了解一下Java函数load()...
    99+
    2023-09-11
    函数 load 数组
  • phpmyadmin数据表加字段的操作方法
    这篇文章主要介绍了phpmyadmin数据表加字段的操作方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。phpmyadmin数据表添加字段...
    99+
    2024-04-02
  • Android SQLite数据库加密的操作方法
    一、前言 SQLite是一个轻量级的、跨平台的、开源的嵌入式数据库引擎,也是一个关系型的的使用SQL语句的数据库引擎, 读写效率高、资源消耗总量少、延迟时间少,使其成为移动平台数据库...
    99+
    2024-04-02
  • 使用 goavro 创建的 Avro 文件将数值数据加载到 BigQuery 中
    小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《使用 goavro 创建的 Avro 文件将数值数据加载到 BigQuery 中》,就很适合你,本篇文章讲解的知识点主要...
    99+
    2024-04-05
  • 怎么用Java客户端将数据加载到Grakn知识图中
    本篇内容介绍了“怎么用Java客户端将数据加载到Grakn知识图中”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!将数据迁移到Grakn我们将...
    99+
    2023-06-02
  • php中将json数据存储到mysql的方法
    本篇文章给大家主要讲的是关于php中将json数据存储到mysql的方法的内容,感兴趣的话就一起来看看这篇文章吧,相信看完php中将json数据存储到mysql的方法对大家多少有点参考价值吧。  ...
    99+
    2024-04-02
  • JavaScript中将元素添加到数组开头的方法
    小编给大家分享一下JavaScript中将元素添加到数组开头的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!JavaScript的特点1.JavaScript主要用来向HTML页面添加交互行为。2.JavaScript...
    99+
    2023-06-14
  • django中操作mysql数据库的方法
    目录1.准备工作(django连接数据库)2.django操作数据库(ORM)2.1 ORM简介2.2 创建表和字段2.3 字段的增删改查2.4 单表数据的增删改查2.4.1单表数据的查询2.4.2单表数据的增加2.4....
    99+
    2024-04-02
  • 数组操作:如何在Java中实现快速大数据加载?
    数组是一种常见的数据结构,它可以在Java中很方便地实现。然而,当数据量非常大时,数组的加载和处理可能会变得非常缓慢。在这篇文章中,我们将介绍如何在Java中实现快速大数据加载。 一、使用BufferedReader和FileReader ...
    99+
    2023-06-26
    load 大数据 数组
  • 阿里云函数计算到数据库的操作方法
    本文将详细介绍如何通过阿里云函数计算访问数据库,包括如何定义函数、设置数据库连接参数以及执行SQL查询等操作。 详细说明:定义函数在阿里云函数计算中,我们需要先定义一个函数,这个函数需要包含对数据库的操作。例如,我们可以定义一个函数,用于从...
    99+
    2024-01-25
    阿里 操作方法 函数
  • PostgreSQL数据库事务插入删除及更新操作的方法
    这篇文章主要介绍了PostgreSQL数据库事务插入删除及更新操作的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇PostgreSQL数据库事务插入删除及更新操作的方法文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-29
  • Go 语言中如何实现异步数据加载和数组操作?
    在 Go 语言中,异步数据加载和数组操作是非常常见的需求。本文将介绍如何在 Go 语言中实现异步数据加载和数组操作,以及如何优化代码以提高性能。 异步数据加载 在 Go 语言中,异步数据加载通常使用协程(Goroutine)来实现。协程是一...
    99+
    2023-09-26
    数组 load 异步编程
  • PDO中操作大数据对象的方法
    这篇文章主要介绍了PDO中操作大数据对象的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PDO操作大数据对象一般在数据库中,我们保存的都...
    99+
    2024-04-02
  • C#中通过反射将枚举元素加载到ComboBo的实现方法
    目录一、前言二、思路三、上代码一、前言        做过系统参数设置的同学们,肯定遇到过要提供一系列具有相同特点的选项供用户选择。最初级的做...
    99+
    2024-04-02
  • windows中将收藏夹里的下载链接加入到开始的方法
      1.右击工具性   2.开始菜单-自定义-下拉至下载-点中显示为链接-确定   3.可以看到,下载已经看 ...
    99+
    2023-06-02
    收藏夹 下载链接 加入开始 方法 下载 windows 中将
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作