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)就是一个典型,因此对多线程安全的理论分析就显得十分重要,当然这决不是说对多线 ...
随机推荐
- pico命令
pico命令 pico是一个简单易用.以显示导向为主的文字编辑程序,具有pine电子邮件编写器的风格.在现代Linux系统上,nano即pico的GNU版本是默认安装的,在使用上和pico一模一样. ...
- 配置主机访问virtualbox中redhat7.3虚拟机网络(其他系统配置也类似)
为什么默认无法访问? virtualbox默认分配一个NAT网络,这个是给虚拟机操作系统访问互联网用的,默认主机通过这个ip段无法直接访问虚拟机.[网卡1] 需要添加一块网卡 在虚拟机关闭状态下,点[ ...
- Go语言并发编程(1):对多进程、多线程、协程和并发、并行的理解
一.进程和线程 对操作系统进程和线程以及协程的了解,可以看看我前面的文章: 对进程.线程和协程的理解以及它们的区别:https://www.cnblogs.com/jiujuan/p/16193142 ...
- django学习第七天---创建多表结构,创建第三张表的三种方式,创建模型类时的一些元信息配置,多表增加
图书管理系统作业知识点整理 知识点1: print(request.POST.dict())#dict()方法能将QueryDict类型数据转换为普通字典类型数据 传数据时,可以用**{}打散的方式来 ...
- 初识JavaScript逆向——以网易云音乐和招标网站为例
前言:需要掌握一定的JavaScript基础,能看懂基础的JavaScript代码. 我们平常在浏览网站的时候会看到许多加密的参数,如果需要知道它的原始数据,就需要知道整个加密过程,所以本篇文章就来介 ...
- Java 多线程------解决 实现Runnabel接口方式线程的线程安全问题 方式二:同步方法 +总结
方式二:同步方法* 如果操作共享数据的代码完整的声明在一个方法中,我们不妨将此方法声明同步的 1 package bytezero.threadsynchronization; 2 3 4 5 /** ...
- 照片也能说话了?嘴型表情全同步,AI数字人时代要来了
SadTalker是一款先进的人工智能模型,它通过从音频中学习生成3D运动系数,并使用全新的三维面部渲染器来生成头部运动,只需传入一张照片和一段音频,就能生成高质量的AI数字人视频 工作原理 1.显式 ...
- python AI应用开发编程实战 大模型实战基础(数据存储类型列表与字典)(二)
大模型开发中,需要和自己的业务融合,我们要对自己的数据处理,熟悉外理excle word pdf 数据然后处理后可以放到向量数据库,或者直接Assistants API传到大模型引用,不管怎么样数 ...
- sentienl
整合springboot Spring Cloud Alibaba Sentinel 下载 导入依赖 <dependency> <groupId>com.alibaba.clo ...
- InputNumber 不能输入点 viewDesign 需求是 只能是整数
<InputNumber ref="xxxRef" v-model="xxx" :disabled="xxx" style=" ...