![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
内部存储
文章平均质量分 88
Hehuyi_In
这个作者很懒,什么都没留下…
展开
-
postgresql源码学习(55)—— 列中的NULL值是如何存储和判断的?
在pg元组头数据中,有一个t_bits数组,用于存储空值位图。当元组中没有null值的时候,t_bits可以被认为是空的,当元组有null值的列时,t_bits使用一个bit来表示列是否为null。可以看到,表中已删除列会被视为空列。当表中有许多列时,删除列将为每条记录生成额外的t_bit,这将导致存储膨胀。100000,注意实际存储的时候值是颠倒的,所以是000001。为了看t_bits数组更清晰,我们加多几列。10000,颠倒后为00001。,所以第一列非空,与实际一致。判断字段是否为空代码在。原创 2023-05-13 21:53:04 · 3361 阅读 · 1 评论 -
postgresql_internals-14 学习笔记(四)TOAST 超尺寸字段存储技术
pg中的每个行只能存在一个page里,不能跨page存储。因此对于一些非常长的行,就需要使用到TOAST(The OverSized Attribute Storage Technique,超尺寸字段存储技术)将大字段值压缩或者拆分为多行到单独表存储。对于用户来说,这是完全透明的。原创 2022-12-17 21:05:04 · 2094 阅读 · 0 评论 -
postgresql源码学习(二)—— 事务块状态转换
一、 简单介绍事务块:begin标志事务块开始,commit(end)、rollback(abort) 等标志事务块结束事务块的各种状态定义在xact.c文件typedef enum TBlockState 部分,注意事务块的状态和事务的状态是不一样的(后篇会学习事务的状态)typedef enum TBlockState{ /* not-in-transaction-block states */ TBLOCK_DEFAULT, /* idle */ TBLOCK_STARTED,原创 2022-05-01 11:27:06 · 3126 阅读 · 0 评论 -
pg事务篇(三)—— 事务状态与Hint Bits(t_infomask)
一、 引入背景前篇(https://blog.csdn.net/Hehuyi_In/article/details/102868231)提到,clog日志记录了事务的四种状态。当需要获取事务状态时,pg可以通过调用三个内部函数——TransactionIdIsInProcess、TransactionIdDidCommit和TransactionIdDidAbort,读取CLOG返回所请求...原创 2019-11-10 18:27:16 · 2886 阅读 · 0 评论 -
DBA手记:X$KTUXE与Oracle的死事务恢复
X$KTUXE是数据库中非常神秘的一个对象表,当然其本质上是C定义的一个结构体,在数据库中可以看到其结构:SQL> desc x$ktuxeNameNull?Type----------------------------------------- -------- -----------------ADDR...转载 2020-08-07 17:19:26 · 2343 阅读 · 2 评论 -
SQL Server 存储(8/8):理解数据文件结构
这段时间谈了很多页,现在我们可以看下这些页在数据文件里是如何组织的。我们都已经知道,SQL Server把数据文件分成8k的页,页是IO的最小操作单位。SQL Server把数据文件里的第1页标记为0。在所有数据库文件里,前面的9个页面(到页号8)都是如下显示一样的顺序,第10个页(页号9)是启动页,用来保存数据库的元数据信息。第1个页,页号0,是文件头(page type 15)。它保存着文件头信息。每个数据文件只有一个文件头页,而且是第0页的位置。文件头页里保存着数据文件信息,例如文..转载 2020-06-16 01:15:28 · 1487 阅读 · 0 评论 -
如何在SQL Server里进行页级别的恢复
今天我将讲下页的一些限制,还有为什么你会喜欢这些限制,同时也会讨厌这些限制。正如你在第2周学到的,数据页始终是8kb 的大小,而且你只能在上面存储8060 bytes。你的记录大小指示你在一个页里可以存储多少记录。当你与像CHAR,INT,DATETIME等定长类型数据类型打交道时,你会发现SQL Server有记录长度不能超过8060 bytes长度(包含7 bytes 的内部行开销)的限制。页面限制——好的一面当你的表少于8列时,你需要(为每条记录)增加额外7 bytes 的内部行开销。对每转载 2020-06-26 12:29:58 · 1478 阅读 · 0 评论 -
information_schema 系统库 —— 简介与组成对象
系列文章参考自《MySQL 性能优化金字塔法则》,删除了书里重复说明和过于复杂的一些解释,完整版请参考原书。information_schema 比 sys系统库又要简单一些,不需要另外配置,只需要了解里面有哪些表,能查询哪些信息即可。一、 什么是information_schema1. 简介information_schema提供对数据库元数据、统计信息、以及有关MySQL...原创 2020-04-05 13:57:56 · 1930 阅读 · 0 评论 -
浅谈sqlserver中的快照
一、什么是快照数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。换句话说,快照可以理解为一个只读的数据库。快照通常用于以下场景:提供指定时间的静态报表查询服务 用于恢复数据库,相比普通备份速度大大提高 与数据库镜像结合使用,提供读写分离 作为测试环境或大量数据变更前的备份二、 快照的原理数据库快照在页级运行。在第一次修改源数据库页之前,先将原...转载 2020-01-19 14:44:48 · 2645 阅读 · 0 评论 -
sqlserver drop image类型的列不释放空间问题处理
一、 背景drop了sqlserver一个大表image类型的列,感觉作为一个ddl语句应该在drop之后会释放空间,但drop后查询表发现并没有缩小,也不像oracle删除表空间中的表后可以复用原空间,插入数据之后数据文件还在不断增大。二、如何让sqlserver drop列后释放空间法一:重建聚集索引(推荐)1)重建聚集索引ALTER INDEX PK_Te...原创 2020-01-16 17:08:26 · 1946 阅读 · 0 评论 -
sqlserver 堆表数据删除、修改及空间重用
一、 delete对数据页内容的影响被删记录所在数据页中对应的偏移量会被重置为0 被删记录所在数据页页头中记录空闲空间大小会相应增加(m_freeCnt,用DBCC PAGE命令看),但数据页中空闲空间不会合并 PFS数据页中对应被删记录的数据页空间使用率数据一般会变化 对应此堆表的IAM、GAM、SGAM数据页内容不变二、 被删数据所占空间的重用新加记录会优先占用数据页中现有空闲...原创 2019-05-30 17:01:00 · 2038 阅读 · 3 评论 -
SQL Server 存储(2/8):理解数据记录结构
以下来自Woodytu的sqlserver存储系列,一共八篇,记录下来学习https://www.cnblogs.com/woodytu/p/4486193.htmlSQL Server 存储(2/8):理解数据记录结构在SQL Server :理解数据页结构我们提到每条记录都有至少7 bytes的系统行开销,那这7 bytes行开销到底是一个什么样的结构,我们一起来看下。数...转载 2019-05-06 18:37:51 · 1612 阅读 · 1 评论 -
SQL Server 存储(1/8):理解数据页结构
以下来自Woodytu的sqlserver存储系列,一共八篇,记录下来学习https://www.cnblogs.com/woodytu/p/4484328.htmlSQL Server 存储(1/8):理解数据页结构SQL Server用8KB的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行。SQL Server把数据记录存在数据页(Data Page)...转载 2019-05-06 18:36:46 · 2881 阅读 · 1 评论 -
DBCC命令
DBCC在sqlserver 2000后的含义为Database Console Commands,即数据库控制台命令。其中最常用的命令有以下几个:DBCC HELP:得到DBCC命令帮助信息DBCC EXTENTINFO:查看指定对象分配到的区信息(非公开命令)DBCC IND:查看指定对象分配到的数据页信息(非公开命令)DBCC PAGE:以不同格式导出指定数据页中的数据(非公...原创 2019-05-06 18:33:10 · 3434 阅读 · 0 评论