kingbase v8r6 表和索引的维护

1.堆内元组与仅索引扫描
hat技术(堆内元组),为了解决高并发下,索引的维护可能造成索引分裂
表内部结构:
保存在磁盘中的块page,内存中的块buffer,表和索引为relation,行为tuple,数据的读写以page为最小单位,默认8K
数据页page由页头,数据指针数组,可使用的空闲空间,实际数据和特殊空间组成

索引的更新
索引页中的数据也类似表中数据的更新过程,并没有对索引原有的数据进行更新,而是在新的位置手往新的索引键值
和物理指针信息。

1.2 表和索引的统计
\d sys_stat_all_tables
\d sys_stat_all_indexes

检查hot的更新比例
\d sys_stat_user_tables
\di+  --索引信息
\d sys_indexes

索引大小
select sys_size_pretty(sys_indexes_size('ind_name'));

2 索引监控
索引的使用情况
select schemaname,relname,indexrelname,idx_scan from sys_stat_user_indexes where id_scan=0 and 
schemaname in ('public');
根据索引的使用频率,可以将无效索引或未使用索引进行清理。

查看重复索引
表的大小与索引数量
表中数据量及索引信息
监控数据中的长事务操作
如:超过10分钏的事务
大于15分钟的prepare传参语句

3.碎片回收
3.1 表和索引的膨胀
索引的膨胀的几个原因
大量删除后导致索引页稀疏,vacuum能回收表但是无法回收索引的死元组
长时间运行的事务,禁止vacuum对表的清理工作导致页面稀疏状态一致保持
索引膨胀主要针对btree

通过以下方法解决索引膨胀
锁表的方式 reindex,vacuum full
不锁表的方式,create index concurrency并发创建异名同列索引,然后drop旧索引

查看数据和索引的空间
select sys_size_pretty(sys_relation_size('tab_name'));
select sys_size_pretty(sys_indexes_size('tab_name'));
vacuum tab_name, --回收空间
vacuum full tab_name  --回收空间


二 执行计划
处理解析:
parser 解析器 生成语法解析树
analyzer/analyser 分析器 生成查询树
rewriter 重写器  按规则来对查询树进行改写
planner 计划器 基于查询树生成一个执行效率最高的计划树
executor 执行器 按照计划树中的顺序来访问表和索引,执行相应的查询

1.1 代价估计
启动代价,在读取到第一条数据前花费的代价
运行代价,获取到全部满足条件的数据的代价
总代价,启动代价+运行代价
explain 显示了顺序扫描的相关信息

基本信息
select ctid,tab_name.* from tab_name
expplain select * from tab_name where ctid='(x,x)';
select oid,* from sys_class where relname='tab_name';
explain select * from sys_class where oid=xxx;
ctid 用于标识表中数据的物理位置信息,可用于数据查询定位,不建议更新定位ctid会变
oid 表示对象号,每个数据库中用于对象的唯一定位标识,不建议自定义oid

show cpu_tuples_cost;  cpu处理每条数据的代价
show cpu_operator_cost; cpu处理每次运算或函数的代价
show seq_page_cost; 顺序扫描磁盘获取每个数据页的代价
explain SQL语句
rows 预计返回数据行数
width 输出数据的平均字节

2.详细执行计划
explain语法
\h explain
analyze 默认false,执行命令并显示实际的运行时间和其它相关统计信息
verbose 默认false 显示关于计划的额外信息
costs 默认true 包括每一个计划节点的启动代价和总代价,估计的行数和每行的宽度
buffers 默认false 包括缓冲区共享块,本地块,临时块使用的信息,只有analyze被启用时,该参数才能使用
timing 默认true 在输出中包括实际启动时间以及在每个节点中花掉的时间
format 默认text 指定执行计划的输出格式 如text,xml,json,yaml

3.查询规则参数
effective_cache_size
show effective_cache_size;
show shared_buffers;
\! free -m
表示用于缓存临时数据的磁盘空间,默认4G,通常设置为db shared_buffer+OS SWAP
可通过kingbase.conf文件进行修改,重启数据库生效

work_mem
show work_mem
为每个客户端的连接分配的内存缓冲区大小,如排序 hash等
最大连接数据*该内存 建议不超过物理内存大小的1/4,保守1/16,

constraint_exclusion
show constraint_exclusion
是否对继承hash分区表进行约束检查,默认on所有表都检查,建议开启。

cursor_tuple_fraction;
show cpu_tuple_cost;
show seq_page_cost;
show cursor_tuple_fraction;
在使用游标进行数据操作时,对于每行数据的代价估计,默认0.1
如设为1,则与常规的顺序扫描代价一样。

4.表的连接方式
循环嵌套连接
索引扫描,嵌套循环
合并连接
索引扫描,合并连接

1.2 散列连接
顺序扫描,hash连接
索引扫描,hash连接

5.改变执行计划
参数的生效方式
internal 只能在编译时设置
kingbase 服务重启才能生效
sighup 允许修改配置文件,只需向kingbase进程发送sighup信息更新参数
superuser 允许超级用户在线修改,只会影响超级用户自身
user 允许普通用户在线修改
superuser-backend 在kingbase.conf更改无需重启,新值只会影响之后的连接
backend 普通用户的backup级参数

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值