Oracle 在查询数据 可以通过cache hint 所访问的数据cache 到数据库buffer,对于KingbaseES,如何将数据加载到cache 了?sys_prewarm 扩展插件可以实现数据的cache

一、准备数据

test=# create table prewarm_test1(id integer,name text);
CREATE TABLE
test=# insert into prewarm_test1 select generate_series(1,3000000),md5(random()::text);
INSERT 0 3000000
test=# select pg_size_pretty(pg_relation_size('prewarm_test1'));
pg_size_pretty
----------------
195 MB
(1 row) create table prewarm_test2 as select * from prewarm_test1; create index ind_prewarm_test2 on prewarm_test2(id);

二、select 操作与 cache

1、统计cache信息的脚本

为了取得cache 的信息,必须安装 sys_buffercache 扩展插件。cache 统计的脚本如下:

select c.relname, count(*) as buffers
from sys_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;

2、全表访问

为了保证数据准确,在访问之前,必须先重启下数据库(清理shared_buffer)。

数据库刚启动是的buffer 状态:

                 relname                 | buffers
-----------------------------------------+---------
pg_attribute | 36
pg_class | 25
pg_proc | 13

全表访问 1 次后的buffer 状态:

test=# select count(*) from prewarm_test1;
count
---------
3000000
(1 row) relname | buffers
-----------------------------------------------+---------
prewarm_test1 | 96
pg_attribute | 36
pg_class | 25

再次 全表访问后的状态:

test=# select count(*) from prewarm_test1;
count
---------
3000000
(1 row) relname | buffers
-----------------------------------------------+---------
prewarm_test1 | 192
pg_attribute | 36
pg_class | 25

结论:可以看到全表全表访问并不会把全部的数据缓存。对于大小超过shared_buffer/4的表进行全表扫描时,不会使用全部的shared_buffer,而是只使用很少一部分的shared_buffer。

3、索引访问

test=# end;
test=# \set SQLTERM /
test=# declare
test-# v_temp integer;
test-# begin
test-# for i in 1..3000000 loop
test-# select id into v_temp from prewarm_test2 where id=i;
test-# end loop;
test-# end;
test-# /
ANONYMOUS BLOCK relname | buffers
-----------------------------------------+---------
prewarm_test2 | 12287
ind_prewarm_test2 | 4044
pg_class | 25

结论:通过索引访问的块,会缓存在cache中

三、sys_prewarm

1、创建sys_prewarm 扩展

test=# create extension sys_prewarm;
CREATE EXTENSION
test=# \dx+ sys_prewarm
Objects in extension "sys_prewarm"
Object description
--------------------------------------------------------
function autoprewarm_dump_now()
function autoprewarm_start_worker()
function sys_extend(regclass,bigint)
function sys_prewarm(regclass,text,text,bigint,bigint)
(4 rows)

2、sys_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数目(整型)

3、验证sys_prewarm 函数

test=# select sys_prewarm('prewarm_test1');
sys_prewarm
-------------
25000
(1 row) relname | buffers
-----------------------------------------------+---------
prewarm_test1 | 16026
pg_proc | 114
pg_attribute | 36

结论:运行 sys_prewarm 后,可以看到数据被有效缓存了。

4、sys_extend 函数

sys_extend 用于预先一次性扩展数据文件大小,避免数据增长的同时在去扩展文件,可以有效的提升性能。

Tips :对于fdatasync , 文件的尺寸(st_size)如果变化,是需要立即同步的,否则OS一旦崩溃,即使文件的数据部分已同步,由于metadata没有同步,依然读不到修改的内容。而最后访问时间(atime)/修改时间(mtime)是不需要每次都同步的,只要应用程序对这两个时间戳没有苛刻的要求,基本无伤大雅。

test=# select relname,relpages from sys_class where relname='prewarm_test1';
relname | relpages
---------------+----------
prewarm_test1 | 25000
(1 row) test=# select sys_extend('prewarm_test1',10000);
sys_extend
------------
t
(1 row) test=# analyze prewarm_test1;
ANALYZE
test=# select relname,relpages from sys_class where relname='prewarm_test1';
relname | relpages
---------------+----------
prewarm_test1 | 35000
(1 row)

这里表示数据文件的大小扩展 10000 个数据块。

KingbaseES sys_prewarm 扩展的更多相关文章

  1. KingbaseES DBLink 扩展介绍

    DBLink 扩展插件功能与 Kingbase_FDW 类似,用于远程访问KingbaseES 数据库.相比于Kingbase_FDW,DBLink 功能更强大,可以执行DML,还可以通过 begin ...

  2. KingbaseES 与 Oracle 用户口令管理与资源管理

    一.概述 KingbaseES可以对用户口令与用户占用资源进行必要的管理.其管理方式,在这里与Oracle数据库进行参考比较. KingbaseES 使用扩展插件建立的系统参数,这组参数可以对数据库资 ...

  3. KingbaseES 支持pivot and unpivot 功能

    KingbaseES 通过扩展插件支持了pivot 和unpivot 功能.以下以例子的方式介绍. 一.功能介绍 创建扩展: create extension kdb_utils_function; ...

  4. KingbaseES interval 分区表介绍

    KingbaseES从V008R006C005B0041版本开始支持Oracle的Interval分区表功能. Interval分区表是一种特殊的范围分区表.当执行INSERT或者UPDATE时,若数 ...

  5. 如何充分利用KingbaseES日志

    作为现代关系数据库中,KingbaseES带有许多用于微调的参数.需要考虑的领域之一是KingbaseES应该如何记录其活动.日志记录在Kingbases数据库管理中经常被忽略,如果不被忽略,通常会被 ...

  6. KingbaseES 时间类型数据和oracle时间类型的区别

    Oracle日期时间类型有两类,一类是日期时间类型,包括Date, Timestamp with time zone, Timestamp with local time zone.另一类是Inter ...

  7. KingbaseES Hint 使用

    前言:KingbaseES V8R6C4 之前版本hint 使用方法是与Postgresql 相同的,通过 pg_hint_plan扩展,支持在SQL中使用hint.由于该版本的hint只能放置于SQ ...

  8. KingbaseES 实现MYSQL hex/unhex 函数

    MySQL 的hex 和 unhex 函数类似于KingbaseES 的encode 和 decoding,实现字符与16进制之间的转换. 一.先看MySQL例子 mysql> select h ...

  9. KingbaseES的表空间

    表空间的概念 KingbaseES中的表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置.实际上表空间就是给表指定一个存储目录. 表空间的作用 通过使用表空间,管理员可以控制一个Kingba ...

随机推荐

  1. 物联网?快来看 Arduino 上云啦

    作者:HelloGitHub-Anthony 这里是 HelloGitHub 推出的讲解开源硬件开发平台 Arduino 的系列教程. 第一篇:Arduino 介绍和开发环境搭建 第二篇:制作温湿度显 ...

  2. SAP APO-供需匹配

    供需匹配包含主要功能"匹配能力"(CTM)和一个用于分配库存的附加功能. 在高级计划和优化中,SDM组件为这些应用程序提供跨工厂供应策略- 生产计划和详细计划(PP / DS) 供 ...

  3. SAP APO-数据集市,信息多维数据集和Dp

    在SAP Advanced Planning and Optimization中,每个数据集市都包含InfoCube,这些InfoCube存储实际数据和较早的计划数据. 在诸如SAP BW之类的数据仓 ...

  4. Linux文本三剑客-grep

    Global search REgular expression and Print out the line 全局搜索正则表达式并打印行 作用: 对标准输入的行进行分析,过滤指定的行. 模式: 格式 ...

  5. bat-winget-win平台的软件包管理器

    win10 1709版本以后 引入的包管理器,如果不可用 需要 更新一下 应用安装程序. winget命令的功能  常用的就  安装 卸载 更新  . 卸载 使用中如果提示 策略 不允许,可执行下面命 ...

  6. BigDecimal加减乘除及setScale的用法小结

    Bigdecimal初始化: BigDecimal num = new BigDecimal(2.225667);//这种写法不允许,会造成精度损失. BigDecimal num = new Big ...

  7. ubuntu20.04安装测试uhttpd

    uhttpd是openwrt上运行一个高效小型Http服务,支持cgi, lua等特性.可以直接通过snap方式安装,如果是16.04,18.04或者20.04,snap已经默认安装了:如果是其它版本 ...

  8. 集合-list常用方法总结

    每个方法使用见下方代码详解 点击查看代码 ArrayList list = new ArrayList(); list.add("AA"); list.add(123); list ...

  9. 新版recon-ng安装模块

    表现:进入后报[*] No modules enabled/installed. 1.直接在recon-ng控制台输入marketplace install all,用来下载所有插件,如果不可以,往下 ...

  10. 比起网易有数BI,也许这款数据可视化软件更适合你!

    有数BI是网易推出的面向企业客户的可视化敏捷BI产品.拥有数据填报和自助式商业智能分析产品,提供网页端和手机端应用,帮助客户快速实现数据填报.多维分析.大数据探索.实时大数据展示和成员分享. 山海鲸可 ...