PG数据库入门--buffer的管理(二)

对于扫表的查询,buffer区该如何应对?

1.如果没有额外的处理会如何

例如扫描表tableA

select * from tableA;

当tableA有许多页面,查询会将tableA的页面加载到buffer区中,那么就会将buffer区大量甚至全部的页面淘汰了。这个就不是我们希望看到的,前面我们按照 clock sweep的NFU算法,将频繁访问的页面留在内存中,然后一次扫表查询,就把buffer高频访问的页面淘汰,相当不划算。

2.解决方式

对于扫表的查询,限定查询使用的buffer数量。例如一次扫表查询,限定使用20个buffer,后续加载第21个页面时,也在这20个buffer进行淘汰。

在PG代码中,提出了ring buffer,

除了扫表查询(Bulk-READ),还有批量写(Bulk-writing)、vacumm机制需要ring buffer

3.具体实现

在PG中,获取buffer,分成两种有策略情况和普通情况

有策略情况,对应这对于扫表查询、批量写这样的情况,需要分配一个ring buffer,buffer的分配需要在ring buffer内进行分配。(可能这叫策略吧)

普通情况就是正常的随机访问,buffer的分配就是在buffer池进行分配

typedef enum BufferAccessStrategyType
{
    BAS_NORMAL,                 /* Normal random access *
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PostgreSQL是一种开源的关系型数据库,它提供了多种管理工具来操作数据库,其中包括psqlpg_dump命令。 psql是一种命令行工具,可以用来与PostgreSQL数据库进行交互。它不仅能够执行SQL语句,还可以支持交互式命令。在使用psql命令时,有时需要在命令中包含密码信息。可以使用以下的方式来在命令行中带密码执行SQL语句: 1. 在命令行中输入psql命令,启动psql工具。 2. 输入连接数据库的命令,例如:psql -U username -d dbname -h hostname -p port。 3. 输入密码,此时必须在命令行中输入密码。 4. 执行SQL语句,例如:SELECT * FROM tablename; pg_dump是PostgreSQL数据库备份工具,可以用来将数据库中的数据导出到一个文件中。使用pg_dump命令时,也需要在命令行中包含密码信息。可以使用以下的方式在命令行中带密码执行pg_dump命令: 1. 在命令行中输入pg_dump命令,启动pg_dump工具。 2. 输入数据库连接信息和密码,例如:pg_dump -U username -d dbname -h hostname -p port -W。 3. 执行备份操作,例如:pg_dump -U username -d dbname -h hostname -p port -W > backup.sql。 总的来说,在使用psqlpg_dump命令时,为了在命令中包含密码信息,需要使用“-W”参数将密码输入到命令行中。当然,这种方式存在一定的安全隐患,因为密码可以被其他人看到。因此,最好使用其他方式来进行密码管理,例如使用配置文件、环境变量或者其他安全的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值