KingbaseESV8R6使用pageinspect插件观察空值
前言
在KingbaseES元组头数据中,有一个t_bits数组,用于存储空值位图。当元组中没有null值的时候,t_bits是空的,当元组有null值的列时,t_bits使用一个bit来表示列是否为null。
元组中空值存储在Heap TupleData中的前位,它之后存储的是data数据。
pageinspact插件观察空值存储
创建插件
CREATE EXTENSION pageinspect;
创建测试表
create table t(a int,b int,c int);
insert into t values(2,6,1);
insert into t values(1,NULL,7);
TEST=# select * from t;
a | b | c
---+---+---
2 | 6 | 1
1 | | 7
(2 rows)
pageinspact可以观察空值是如何存储的
字段说明:
t_bits数组不为空:10100000,第一和第三个1表示这两列不为空,中间的0表示第二列为空,其余的0表示这些列未被使用。
t_data中的记录不包含空值数据。
TEST=# select * from heap_page_items(get_raw_page('t',0));
lp | lp_off | lp_flags | lp_len | t_xmin | t_xmax | t_field3 | t_ctid | t_infomask2 | t_infomask | t_hoff | t_bits | t_oid | t_data
----+--------+----------+--------+--------+--------+----------+--------+-------------+------------+--------+----------+-------+----------------------------
1 | 8152 | 1 | 36 | 2040 | 0 | 0 | (0,1) | 3 | 2304 | 24 | | | \x020000000600000001000000
2 | 8120 | 1 | 32 | 2041 | 0 | 0 | (0,2) | 3 | 2305 | 24 | 10100000 | | \x0100000007000000
(2 rows)
为了看t_bits列更清晰,我们创建表后多加几列
说明:
第四行没有空值,因此对应t_bits数组为空。
一共12列,因此数组中后四位均未用到,均为0。
111111111101中的0表示null值的位置,所以t_bits仅显示出有空值的元组。
create table t02(i1 int,i2 int,i3 int,i4 int,i5 int,i6 int, i7 int,i8 int,i9 int,i10 int,i11 int,i12 int);
insert into t02 values(1,2,3,4,5,6,7,8,9,10,NULL,12);
insert into t02 values(1,2,3,4,5,6,7,8,9,NULL,NULL,12);
insert into t02 values(1,2,3,4,5,6,7,8,NULL,NULL,NULL,12);
insert into t02 values(1,2,3,4,5,6,7,8,9,10,11,12);
select t_bits from heap_page_items(get_raw_page('t02', 0));
t_bits
------------------
1111111111010000
1111111110010000
1111111100010000
(4 rows)
观察表中删掉其中一列的效果
alter table t02 drop column i1;
TEST=# select t_bits from heap_page_items(get_raw_page('t02', 0));
t_bits
------------------
1111111111010000
1111111110010000
1111111100010000
位图并没有变化
再插入一行非空值
insert into t02 values(2,3,4,5,6,7,8,9,10,11,12);
TEST=# select t_bits from heap_page_items(get_raw_page('t02', 0));
t_bits
------------------
1111111111010000
1111111110010000
1111111100010000
0111111111110000
(5 rows)
可以看到,表中已删除列为第一列,被视为空列,以0标识,这里的0并不是空值的意思,然后连续出现11个1,表示该元组没有空值。
当表中有许多列时,删除列将为每条记录生成额外的t_bit,这将导致存储膨胀。
KingbaseESV8R6使用pageinspect插件观察空值的更多相关文章
- Java垃圾回收_过程观察
这是今天看JVM垃圾回收的时候做的实验观察. 使用工具:Java VisualVM.VisualVM GC插件 观察应用:Tomcat容器中的Web服务 1. Java VisualVM 在tomca ...
- java并发编程(十六)happen-before规则
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17348313 happen-before规则介绍 Java语言中有一个"先行发生 ...
- elk平台搭建
很多时候我们需要对日志做一个集中式的处理,但是通常情况下这些日志都分布到n台机器上面,导致一个结果就是效率比较低,而ELK平台可以帮助我们解决这么一件事情: ELK下载:https://www.ela ...
- Chapter 3: Develop the user experience
Plan for search engine optimization and accessibility 使用analytical tools分析HTML,如SEO toolkit from MS, ...
- 【转】ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
[转自]https://my.oschina.net/itblog/blog/547250 摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticS ...
- ELK日志分析系统搭建(转)
摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticSearch,一款基于Apache Lucene的开源分布式搜索引擎)中便于查找和分析,在研究 ...
- 深入分析 Java 中的中文编码问题
登录 (或注册) 中文 IBM 技术主题 软件下载 社区 技术讲座 打印本页面 用电子邮件发送本页面 新浪微博 人人网 腾讯微博 搜狐微博 网易微博 Digg Facebook Twitter Del ...
- [转]深入分析 Java 中的中文编码问题
收益匪浅,所以转发至此 原文链接: http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ 深入分析 Java 中的中文编码问题 编 ...
- 用happen-before规则重新审视DCL(转)
编写Java多线程程序一直以来都是一件十分困难的事,多线程程序的bug很难测试,DCL(Double Check Lock)就是一个典型,因此对多线程安全的理论分析就显得十分重要,当然这决不是说对多线 ...
- 用happen-before规则重新审视DCL(转载)
编写Java多线程程序一直以来都是一件十分困难的事,多线程程序的bug很难测试,DCL(Double Check Lock)就是一个典型,因此对多线程安全的理论分析就显得十分重要,当然这决不是说对多线 ...
随机推荐
- spring boot+layui实现增删改查实战
说明: 最近在做一个后台,希望用一个现成的前端模板,找了一圈发现Layui比较合适.我知道很多人都有这个需求,为了使大家快速上手,我把自己写的最实用的增删改查案例完整的展示出来. 源码地址: http ...
- 案例分享:Qt高频fpga采集数据压力位移速度加速度分析系统(通道配置、电压转换、采样频率、通道补偿、定时采集、距离采集,导出exce、自动XY轴、隐藏XY轴、隐藏显示通道,文件回放等等)
需求 1.0-7通道压力采集,采集频率1~100Khz(1,10,20,30-1000Khz): 2.0-7通道压力,可设置补偿值,测量范围: 3.编码器0,1脉冲采集,计算位移,速度,加速度 ...
- django中如何处理事务
生成订单时,一次性生成多条数据记录或者一次性操作多个模型,都有可能产生中途报错的情况,所以需要在生成订单时保证多个数据操作的原子性. 事务 在完成一个整体功能时,操作到了多个表数据,或者同一个表的多条 ...
- ASP.NET XML序列化
整理一下ASP.NET里面如何序列化实体为XML,获取解析XML内容为实体. 第一步要添加程序集引用,项目-->引用-->鼠标右键-->添加引用-->选择程序集-->Sy ...
- 【LeetCode链表#10】删除链表中倒数第n个节点(双指针)
删除链表倒数第N个节点 力扣题目链接(opens new window) 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:he ...
- BeanShell Sampler 前置处理器
一概念: 前置处理器主要作用: 用于修改即将发送的http的请求数据 BeanShell预处理器可以在取样器发送请求之前被执行,可以通过它完成发送请求所需的数据 其中的ctx.vars.props.p ...
- Jmeter 之常数吞吐量作用
一 添加方法: 线程组右键->添加->定时器-> 常数吞吐量定时器 二 作用: 常数吞吐量定时器的作用: 设置最大的吞吐量不超过设置的值 注意:如果线程能发送的请求远远低于设置的 ...
- VC-MFC 在磁盘中读取文件
1 // ReadDlg.cpp : 实现文件 2 // 3 4 #include "stdafx.h" 5 #include "Read.h" 6 #incl ...
- WebView无法加载页面报错 net:ERR_CLEARTEXT_NOT_PERMITTED 还有webView加载网页后出现ERR_UNKNOWN_URL_SCHEME
根据网络安全配置- 从Android 9(API级别28)开始,默认情况下禁用明文支持.因此http的url均无法在webview中加载 还可以看看-https: //koz.io/android-m ...
- Codeforces Round 770 (Div. 2)(数学异或奇偶性)
B. Fortune Telling 拿到题目看数据范围之后就知道暴力显然是来不及的. 那么只能找性质. \(考虑x和x+3的不同 \quad 奇偶性不同\) \(然后考虑两种操作对于一个数的奇偶性的 ...