6. backtrace
6.1. 插件backtrace简介
插件backtrace是KingbaseES 的一个扩展插件。主要功能是在服务端程序崩溃时捕获宕机堆栈信息,并将core堆栈信息打印输出到前端或日志文件里。可用于协助分析KingbaseES宕机的原因。通常release版本的KingbaseES需要使用debug文件协助分析宕机原因。
插件backtrace相关功能在服务程序崩溃时自动触发,无须人为干预,插件在服务端程序启动时默认加载。
-
插件名为 backtrace
-
插件版本 V1.0
6.2. 插件backtrace加载方式
KingbaseES数据库默认将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,重启数据库时自动加载。
示例:
shared_preload_libraries = 'backtrace'
6.3. 插件backtrace的参数配置
无需配置任何参数
6.4. 插件backtrace的使用方法
KingbaseES加载 backtrace 插件后,程序崩溃时会自动捕获宕机的堆栈信息,并将core 堆栈信息打印输出到前端或日志文件里。
6.5. 插件backtrace卸载方法
修改 kingbase.conf 文件中 shared_preload_libraries
参数后重启数据库。
示例:
shared_preload_libraries = ''
6.6. 插件backtrace升级方法¶
backtrace扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级些插件。
7. backup_pri
7.1. 插件backup_pri简介
backup_pri是KingbaseES的一个扩展插件,主要用于对备份/恢复操作使用权限限制,插件增加了一个新的管理特权,SYSBACKUP,允许物理备份sys_basebackup连接到目标数据库,执行物理备份操作。
-
插件名为 backup_pri
-
插件版本 V1.0
7.2. 插件backup_pri加载方式
在使用 backup_pri 之前,需要将他添加到 kingbase.conf 文件的 shared_preload_libraries 中,并重启 KingbaseES 数据库。
示例:
shared_preload_libraries = 'backup_pri'
7.3. 插件backup_pri的参数配置
backup_pri.enable_backup_pri
启用备份恢复权限功能,取值范围为ture或者false,缺省为 false。
show backup_pri.enable_backup_pri; backup_pri.enable_backup_pri ------------------------------- off (1 row) alter system set backup_pri.enable_backup_pri to on; select pg_reload_conf(); show backup_pri.enable_backup_pri; backup_pri.enable_backup_pri ------------------------------- on (1 row)
7.4. 插件backup_pri使用方法
7.4.1. 备份恢复权限的授予与回收
在数据库初始化之后,SYSTEM用户级SUPERUSER用户不具有备份恢复的权限;但具有该权限的授予与回收的权利,SYSTEM用户级SUPERUSER用户也可以给自身赋权。
授予与回收的语法:
alter user u1 sysbackup; alter user u1 nosysbackup;
同时建用户的时候可以直接授予或回收
create user u1 sysbackup; create user u1 (nosysbackup);
不带默认nosysbackup,或者建库初始化时的用户也是默认nosysbackup的,想要赋予权限,可以用alter语句实现。
删除用户的时候语法:
drop user u1;
会自动删除这个用户的备份恢复权限,和其他系统权限一样,记录将不存在。
7.4.2. 备份恢复权限流程
存储sysbackup权限的系统表 sys_privilege。物理备份sys_basebackup时,检查是否持有这个权限,若没有,报错退出。
具体流程如下:
-
备份恢复权限与其他普通权限一样,都是限制一些用户进行指定的操作;
-
备份恢复权限是用户级别的,在执行备份恢复时,步骤如下:
7.4.3. 相关系统视图
sysbackup权限相关的三个系统视图如下:
-
backup_pri.dba_sys_privs
查询出所有的用户的sysbackup权限和其他系统权限,若用户没有sysbackup权限,有可能显示的是空,或者nosysbackup两种情况。
backup_pri.dba_sys_privs 视图的每个字段意义如下表所示:
-
backup_pri.user_sys_privs
查询出当前的用户的sysbackup权限和其他系统权限,若当前用户没有sysbackup权限,有可能显示的是空,或者 nosysbackup两种情况。
backup_pri.user_sys_privs 视图的每个字段意义如下表所示:
-
backup_pri.role_sys_privs
查询出角色的 sysbackup 权限和其他系统权限,若角色没有 sysbackup 权限,有可能显示的是空,或者 nosysbackup两种情况。
backup_pri.role_sys_privs 视图的每个字段意义如下表所示:
7.5. 插件backup_pri卸载方法
修改 kingbase.conf 文件中 shared_preload_libraries
参数后重启数据库。
示例
shared_preload_libraries = ''
7.6. 插件backup_pri升级方法
backup_pri扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级这些插件。
8. bloom
8.1. 插件bloom简介
插件bloom是KingbaseES的一个扩展插件。 bloom提供了一种基于bloom过滤器的索引访问方法。
bloom过滤器是一种节省空间的数据结构,用于测试元素是否是集合的成员。对于索引访问方法,它允许通过签名快速排除不匹配的元组。签名的大小在索引创建是确定。
签名是索引属性的一种有损表示,并且因此容易报告误报。也就是说,当元素不在集合中时,可能会报告该元素在集合中。因此,必须始终使用堆条目中实际属性值重新检查索引的搜索结果。更大的签名可以降低误报的机率。从而减少无用的堆访问次数,但也会让索引更大,从而降低扫描速度。
当一个表有许多属性并且查询测试他们的任意组合时,这种类型的索引最有效,传统的btree索引比bloom索引快,但它可能需要许多btree索引来支持所有可能的查询。而bloom索引只需要一个。请注意,bloom索引只支持等值查询,而btree索引也可以支持非等和范围查询。
-
插件名为 bloom
-
插件版本 V1.0
8.2. 插件bloom加载方式
KingbaseES默认不加载bloom插件,需要用户使用示例中的命令,人为手工加载。
示例:
create extension bloom;
8.3. 插件bloom的参数配置
bloom索引在其WITH子句中接受下列参数
-
length
每个签名(索引项)的长度位数,它会被圆整成为最近的16的倍数。默认是80位,最长是4096位。
-
col1 — col32
从每一个索引列产生的位数。每个参数的名字表示它所控制的索引列的编号。默认是2位,最大是4095位。没有实际使用的索引列的参数会被忽略。
8.4. 插件bloom的使用方法
示例:
这是一个创建布鲁姆索引的例子。
CREATE INDEX bloomidx ON tbloom USING bloom (i1,i2,i3) WITH (length=80, col1=2, col2=2, col3=4);
该索引是用长度为 80 位的签名所创建,其中属性 i1 和 i2 被映射为 2 位,属性 i3 被映射为 4 位。我们可以省略length、col1和col2说明,因为它们都有默认值。 这里是布鲁姆索引定义和使用的更完整的例子,其中还与等效的 btree 做了对比。布鲁姆索引比 btree 索引更小,并且效率更高。
8.5. 插件bloom卸载方法
bloom插件的卸载也需要用户使用示例中的命令,人为手工卸载。
示例:
drop extension bloom;
8.6. 插件bloom升级方法
bloom扩展插件通常随着KingbaseES安装包一并升级。通常情况下用户无须单独升级该插件。
9. btree_gin
9.1. 插件btree_gin简介
btree_gin为以下数据类型提供了B树等价行为的GIN操作符类:
macaddr8 int2 int4 int8 float4 float8 money oid timestamp timestamptz time timetz date interval macaddr inet cidr text varchar char bytea bit varbit numeric enum uuid name bool bpchar
一般情况下,这些操作符类不会比B树的表现更好,而且缺少B树最重要的特性之一支持唯一索引。但这些操作符可以用于GIN测试或是作为其他GIN操作符类开发的参考。在特定情况下,例如查询同时涉及一列适合GIN索引的列和一列适合B树索引的列,这时创建GIN的两列联合索引可能比创建GIN索引和B树索引再通过位图与扫描方式查询效率更高。
插件可以被任何在当前库具有CREATE权限的用户创建。
-
插件名为 btree_gin
-
插件版本 V1.3
9.2. 插件btree_gin加载方式
KingbaseES默认不加载btree_gin插件,需要用户使用示例中的命令,人为手工加载。
示例:
CREATE EXTENSION btree_gin;
9.3. 插件btree_gin的参数配置
无需配置任何参数
9.4. 插件btree_gin的使用方法
CREATE TABLE test (a int4); -- create index CREATE INDEX testidx ON test USING GIN (a); -- query SELECT * FROM test WHERE a < 10;
9.5. 插件btree_gin卸载方法
btree_gin插件的卸载也需要用户使用示例中的命令,人为手工卸载。
示例:
DROP EXTENSION btree_gin;
9.6. 插件btree_gin升级方法
通过 ALTER EXTENSION升级插件。
示例,升级到 1.1:
ALTER EXTENSION btree_gin UPDATE TO '1.1';
10. btree_gist
10.1. 插件btree_gist简介
btree_gist为以下数据类型提供了B树等价行为的GIST操作符类
uuid oid int2 int4 int8 float4 float8 timestamp timestamptz time timetz date interval cash macaddr text bpchar bytea numeric bit vbit inet cidr macaddr8 enum
一般情况下,这些操作符类不会比B树的表现更好,而且缺少B树最重要的特性之一支持唯一索引。但这些操作符可以用于GiST测试或是作为其他GiST操作符类开发的参考。在特定情况下,例如查询同时涉及一列适合GiST索引的列和一列适合B树索引的列,这时创建GiST的两列联合索引可能比创建GiST索引和B树索引再通过位图与扫描方式查询效率更高。
插件还提供了B树索引不支持的“<>”(不等于)操作符,这在创建EXCLUDE约束时很有用。插件对于可以作为距离度量的数据类型提供了距离操作符<->,为使用这个操作符的最近邻搜索提供了GiST索引支持。插件可以被任何在当前库具有CREATE权限的用户创建。
-
插件名为 btree_gist
-
插件版本 V1.5
10.2. 插件btree_gist加载方式
KingbaseES默认不加载btree_gist插件,需要用户使用示例中的命令,人为手工加载。
示例:
CREATE EXTENSION btree_gist;
10.3. 插件btree_gist的参数配置
无需配置任何参数
10.4. 插件btree_gist的使用方法
示例如下:
CREATE TABLE test (a int4); CREATE INDEX testidx ON test USING GIST (a); SELECT * FROM test WHERE a < 10; -- 最近邻搜索,找距离42最近的10行数据 SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 LIMIT 10; -- 使用EXCLUDE约束来创建规则一个动物园里的一个笼子只能装一种动物 CREATE TABLE zoo ( cage INTEGER, animal TEXT, EXCLUDE USING GIST (cage WITH =, animal WITH <>) ); INSERT INTO zoo VALUES(123, 'zebra'); INSERT INTO zoo VALUES(123, 'zebra'); INSERT INTO zoo VALUES(123, 'lion'); -- 预期违反约束报错 ERROR: conflicting key value violates exclusion constraint "zoo_cage_animal_excl" DETAIL: Key (cage, animal)=(123, lion) conflicts with existing key (cage, animal)=(123, zebra). => INSERT INTO zoo VALUES(124, 'lion');
10.5. 插件btree_gist卸载方法
btree_gist插件的卸载也需要用户使用示例中的命令,人为手工卸载。
示例:
DROP EXTENSION btree_gist;
10.6. 插件btree_gist升级方法
通过 ALTER EXTENSION升级插件。
ALTER EXTENSION btree_gist UPDATE TO '1.1';