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)就是一个典型,因此对多线程安全的理论分析就显得十分重要,当然这决不是说对多线 ...
随机推荐
- mc命令
mc命令 mc是一个基于字符的目录浏览器和文件管理器,其将熟悉的图形文件管理器和常见的命令行工具联系在一起,mc的设计基于文件管理器中双目录窗格的设计,其中同时显示两个目录的列表,可以执行所有常见的文 ...
- Maven多模块聚合工程实战
介绍 本文以SpringCloud微服务多模块聚合案例讲解,全程讲解中间涉及的核心知识点并配图加深理解. 更多maven知识点,建议去看<Maven实战>. 创建父工程 新建maven工程 ...
- macOS使用CodeRunner快速配置fortran环境
个人网站:xzajyjs.cn 由于一些项目的缘故,需要有fortran的需求,但由于是M1 mac的缘故,不能像windows那样直接使用vs+ivf这种经典配置.搜了一下网上主流的跨平台方案,主要 ...
- 项目实战:Qt+OSG三维2D文字实时效果查看工具
需求 OSG三维中2D文字的基本属性较多,方便实时查看效果,并出对应文本代码. Demo 工具下载地址 CSDN免积分下载地址:https://download.csdn.net ...
- ThreadLocal原理解析
ThreadLocal源码分析 /* * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * ...
- 【Azure Data Lake Storage】如何才能保留Blob中的文件目录结构(即使文件夹中文件数量为0的情况下)?
问题描述 在使用Azure Storage Account Blob时候,发现当文件夹中的Blob(文件)被全部输出后,文件夹也会消失? 为什么它不能像Windows系统中的文件夹一样,即使是一个空文 ...
- 【Azure 应用服务】App Service 部署txt静态文件和Jar包在不同目录中的解决办法
问题描述 在Web App wwwroot (Windows系统中)根目录下如何部署一个jar包和一个text文件,让两个文件都能被访问? 解决办法 Jar包和Text文件都分别放置在两个单独的文件夹 ...
- 【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
问题描述 部署在App Service For Windows 中的网站使用 Java Spring Boot + 静态文件 (浏览器端使用Vue.js 与服务器端Java Spring Boot交互 ...
- Java 韩顺平老师的课,记的(前6章)笔记
https://www.bilibili.com/video/BV1fh411y7R8/?p=110&spm_id_from=333.880.my_history.page.click& ...
- 2024-03-02:用go语言,一个句子是由一些单词与它们之间的单个空格组成, 且句子的开头和结尾没有多余空格, 比方说,“Hello World“ ,“HELLO“ ,“hello world h
2024-03-02:用go语言,一个句子是由一些单词与它们之间的单个空格组成, 且句子的开头和结尾没有多余空格, 比方说,"Hello World" ,"HELLO&q ...