- 博客(36)
- 收藏
- 关注
原创 Linux的目录结构介绍
我们LINUX使用的相关的命令库都在这个目录下。dev:这里是 DEVICE(设备)的缩写,存放的是 LINUX 的外部设备,比如说 IO 设备,网络设备等。这个目录是一个虚拟的目录,它是内存的映射,我们可以直接从这个目录里获取到当前的系统信息,proc 是 process 的缩写,所以主要也记录进程信息。home:用户的家目录,除 root 外新建的用户的家目录都会在这个 home 目录下。tmp:是temporary(临时)的缩写,是用来临时存放一些文件的,这里存储的文件或目录会被定时清除掉。
2026-05-19 11:19:13
217
原创 PostgreSQL复制槽
相信大家学到这里,基础肯定很不错了。我们知道 wal 文件默认是 16M,wal_keep_size 默认是 0 ,表示不存放额外的 wal 日志,max_wal_size 表示 wal 目录的大小,如果超过了这个大小,有设置了归档的情况下,则会移动到归档目录里。在老版本里面这个参数是wal_keep_segments,表示保留 wal 文件的个数。如果你看到这里还是不太懂,表示这篇内容你可能还不太适合看,建议先补好基础,当然了你想看我也拦不了你。
2026-05-19 09:52:02
410
原创 TXID详解
每当事务开始时,事务管理器就会分配一个唯一的标识符,称之为事务 ID。在 postgresql 数据库里,事务 ID 是一个 32 位符号整数,也就是 2 的 32 方大约是 42 亿。当事务 ID 达到最大值后,下一个事务 ID 会从 3 重新开始,这种现象一般称之为事务 ID 回卷(Wraparound)。为什么是从 3 重新开始,跳过了 0,1,2 呢?0 表示无效的事务 ID。1 用于系统初始化时的引导事务2 表示已冻结的事务。
2026-05-19 09:51:20
302
原创 PostgreSQL模板数据库
当我切换template1数据库然后 \dt+想看看该数据库下有什么表的时候,却发现返回的是Did not find any relations.,也就是该库下没有表,这我就有点好奇了,这两个库是干嘛用的,抱着好学的态度,学完之后对所学知识点做个总结。1. 用户可自定义,如果你在创建库的时候,有一些表,视图,函数,存储过程啥的需要创建,那就可以在模板库里先自定义,新建库的时候就会继承到。template1 和template0 是模板库,顾名思义,就是当创建库的时候,一些信息直接从模板库里获取。
2026-05-19 09:50:13
227
原创 Pgbouncer实践与应用
PgBouncer 是一个基于Postgresql的一个轻量级的连接池,对于postgresql的connection实际上是通过进程模式,对于较多的连接实际上是非常消耗资源.而PgBouncer实际上是通过线程模式进行连接管理,大大的降低资源的消耗。并且通过连接池进行数据操作可以提高数据库的操作效率。
2026-05-19 09:48:02
326
原创 DATA_CHECKSUMS
PostgreSQL数据校验机制data_checksums解析 PostgreSQL通过data_checksums机制防止数据损坏,它在数据页落盘前计算校验和并存储。读取时会重新计算校验和进行比对,确保数据完整性。启用方式包括初始化时添加-k参数或使用pg_checksums工具。实验表明,未启用校验和时可能遭受数据注入攻击,而启用后会检测到非法数据块。系统提供ignore_checksum_failure和zero_damaged_pages两个参数处理损坏数据:前者允许读取坏块数据(需校验和已启用)
2026-04-28 10:59:22
199
原创 checkpoint检查点
检查点是什么呢?我们可以理解为自动保存。当我们用 wps 编辑文档时候,如果这时候停电了,文档没有来得及保存,那之前写的内容就没了,如果这时候文档有自动保存,就可以基于上一次自动保存的位置继续编辑。当我们玩游戏挑战 boss 的时候,要是挑战之前没有保存,挑战输了就又得从你中途保存的存档继续开始游戏,要是游戏在你挑战 boss 前就帮你自动保存了,那你就不用从中途的存档重新开始游戏,那就省事多了。
2026-04-28 10:57:57
353
原创 PG双缓冲介绍
shared_buffers 在之前有简单介绍下,用于定义数据库实例在启动时分配的共享内存大小。这个共享内存区域主要用于缓存数据页,以提高数据库的性能和响应速度。默认大小为 128M,可通过show shared_buffers 或者查看。postgresql 使用自己的缓冲区,也使用操作系统缓存 IO。这意味着数据存储在内存中两次,首先是 postgresql 缓冲区,然后是操作系统缓冲区。这就是我们接下来要说的双缓存。
2026-04-28 10:55:15
178
原创 PostgreSQL数据压缩技术
我们先来复习下 Toask,在pg中,行不能跨页存储,为了存储更大的行,pg使用Toast技术将行压缩成更小的块。在13.0以前,我们没办法选择如何压缩数据,因为只有一种算法可以压缩PostgreSQL中的数据,那就是pglz。如果幸运的话,压缩的行将适合堆。如果没有,它将尝试压缩列,从最大到最小,并将它们存储在 toast 部分中,直到剩余的列适合堆的一行。PGLZ是一种用于PostgreSQL数据库的压缩算法,通过查找数据中的重复字符串,并用较短的引用来替换它们,从而实现压缩。查看默认的压缩策略。
2026-04-28 09:47:35
351
原创 autovacuum
简单来说,autovacuum 是 PostgreSQL 中一个自动执行 VACUUM 和 ANALYZE 命令的后台进程。回收死元组 (dead tuples) 占用的空间: 当你更新或删除表中的数据时,PostgreSQL 并不会立即物理删除这些数据,而是将它们标记为“死元组”。这些死元组会占用磁盘空间,影响查询性能。autovacuum 会定期运行 VACUUM 命令,回收这些死元组占用的空间,避免表膨胀。更新表统计信息: PostgreSQL 的查询优化器会根据表的统计信息来选择最优的查询计划。
2026-04-28 09:41:24
441
原创 提升数据库性能-缓冲池buffer pool
让我们想象一个场景,比如说现在执行了一个全表扫描,这个操作会快速将大量的数据页加载到缓冲池中,如果缓冲池大小不够的情况下,会把真正的热点数据(如索引,高频访问的用户数据)挤出去,导致缓冲池被“污染”,性能会急剧下降。LRU列表用来管理缓冲池中页的可用性,Flush列表用来管理将页刷新回磁盘,二者互不影响。InnoDB 引擎需要页时,从Free List 中获取,如果Free List 为空,即没有任何空闲页,则会从LRU List 和Flush List 中通过淘汰旧页和刷脏页来回收页。
2026-03-05 11:33:27
370
原创 MySQL常见错误整理
如果红色框起来的两个参数 Master_Log_File 和 Relay_Master_Log_File 相等,则说明从库读到的最新文件和主库上生成的文件相同,这里前者是 mysql-bin.000956,后者是 mysql-bin.000955,说明两者不相同,存在主从不同步。如果蓝色框起来的两个参数 Read_Master_Log_Pos 和 Exec_Master_Log_Pos 相等,则说明从库读到的日志文件的位置和从库上执行日志文件的位置相同,这里不相等,说明主从不同步。
2026-03-05 11:11:10
498
原创 统计信息的查看与收集
统计信息类似战争中的侦察兵,如果情报工作没有做好,打仗就会输掉。同样的,如果没有正确地收集表的统计信息或者没有及时更新表的统计信息,SQL执行计划就会跑偏,SQL也就会出现性能问题。收集统计信息是为了让优化器选择最佳的执行计划,以最少的代价查询出表的的数据。
2026-03-05 09:36:46
463
原创 访问路径相关概念
索引扫描的核心瓶颈在于“回表”时的随机I/O。如果这个随机I/O的数量(也就是需要返回的行数)太大,或者这些I/O对应的数据块因为聚簇因子差而难以被缓存或连续读取,那么索引扫描就会输给能够进行高速多块读的全表扫描。
2026-03-05 09:36:00
308
原创 学习SQL优化必懂的概念
因为该列的基数很低,只有26,整张表的总行数为73221,前面强调过,当列没有进行直方图收集时,CBO会认为该列数据是均衡的,所以73221/26 约等于2816,不管owner等于任何值,CBO故算的Rows永远都等于2816。我们假如buffer cache中没有缓存表的数据块,当查询返回1000行数据时,如果1000行数据在同个数据块中,那么回表需要消耗1个物理I/O,如果都在不同的数据块中,则消耗1000个物理I/O。这样在进行索引范围或者索引全扫描的时候,回表只需要读取少量的数据块就能完成。
2026-02-26 17:37:42
369
原创 释放 Oracle 表空间:高水位收缩操作详解
Oracle 中的高水位(High Water Mark)指的是表或段中曾经使用过的最高数据块位置。哪怕后来数据被删除了,Oracle 仍然认为这些块“已被使用”,不会自动回收,导致:1、表空间看起来很大(占了磁盘);2、实际数据却不多;3、新数据插入时,可能会跳过这些空闲但“不可用”的块。
2026-02-26 17:36:59
370
原创 第5.2讲 核心体系架构-物理存储(中)
在 posgtresql.conf 文件中可改变这些参数的值,不需要重启数据库,只需要向postmaster 进程发送 SIGHUP 信号,让其重启配置新的参数值就可以了。助配置文件,一般不会手动修改,该参数文件会覆盖postgresql.conf文件中相同的参数,参数修改后需要重启或者重载,可以reload或者 restart来使之生效。一共是有五部分组成连接方式,访问那个数据库,用户名,访问访问(IP),认证方式,其中比较重要的时连接方式和认证方式,我们着重讲一下。它决定存放数据库运行日志文件的目录。
2026-02-12 09:34:53
560
原创 第5.1讲 核心体系架构-物理存储(上)
本章我打算分为三篇来讲解初始化目录下的文件,有些文件我们简单了解就行了,不然一下子上难度很难吃得消。我们主要讲解数据文件,日志文件,参数文件这三个部分就行了。PostgreSQL 实例数据目录如下:(该版本为PostgreSQL 17.1。各版本并不完全相同。PG_VERSION:包含了 PostgreSQL 主要版本号的文件current_logfiles:记录日志收集器当前写入的日志文件的文件global:包含整个数据库集群相关的系统表和数据。
2026-02-12 09:34:11
672
原创 第13.1讲 逻辑备份
下面的 pg_dump 的帮助手册,我们不需要了解那么多,知道平时常用的参数就行了。使用二进制文件进行恢复的时候,一定要创建好指定数据库名称,即使导出的时候加上了 -C 参数,也要创建好指定数据库名称,恢复的时候不会自动帮你创建。pg_dumpall 和 pg_dump 的用法类似,但是有一些不同,不能指定导出的格式,只能文本格式,不支持指定的数据库和表。Directory --file 要指定的是一个目录,会把每个表都生成一个文件,也会进行压缩,如果表多,那么文件也多,不推荐使用。
2026-02-06 07:50:33
302
原创 第11讲 并发控制-事务与锁机制
PostgreSQL 为开发人员提供了丰富的工具来管理数据的并发访问。在内部,数据一致性通过使用多版本模型(多版本并发控制,MVCC)。这意味着每个 SQL 语句都会看到一个过去某个时间点的数据快照(一个数据库版本),而不管底层数据的当前状态。这可以防止语句看到由并发事务在同一数据行上执行更新所产生的不一致数据,从而为每个数据库会话提供事务隔离。MVCC通过摈弃传统数据库系统的锁定方法,它最大限度地减少了锁的争用,以便在多用户环境中实现合理的性能。
2026-02-06 07:49:07
600
原创 第8讲 PG_FDW访问外部数据
PostgreSQL 外部数据包装器,英文全程为 PostgreSQL Foreign Data Wrappers(太长了,下面我们简称为 FDW)。如其名,它是用来访问存储在外部的数据,这些数据可以是外部的 pg 数据库,也可以是 Oracle 和 mysql等数据库,甚至可以是文件。
2026-02-05 09:22:50
614
原创 第7讲 用户角色及权限管理
PostgreSQL 将用户表示为角色。可以登录的角色称为登录角色或用户,包含其他角色的角色称为组角色。也就是说,在 PostgreSQL 中,角色和用户实际上是没有区别的,用户也是一个角色,我们可以把一个用户的权限赋给另一个用户。在初始化的时候,PostgreSQL 会有一个预定义的超级管理员,该管理员的名称跟初始化数据库的操作用户名称是一样的,一般设置是 postgres。如果发现用 postgres 无法登录,那就看看初始化时的操作用户是什么。(小疑问:为什么不统一叫作 postgres?
2026-02-05 09:21:51
615
原创 第6讲 PostgreSQL 表分区
对于需要定期进行数据归档的表,使用 PostgreSQL 提供的 DETACH 方式,直接解除与父表的继承关系,而无需在原表上进行备份后删除,既能极大的提高工作效率,也能减少对表不必要的操作,从而可降低表的膨胀,同时也以减少 WAL 的量,从而节省不必要资源消耗。PG 表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。为了解决这个问题,可以先将默认分区从分区表中卸载(DETACH PARTITION),创建新的分区,将默认分区中的相应的数据移动到新的分区,最后重新挂载默认分区。
2026-02-04 00:40:10
799
原创 内存分配器:ptmalloc、tcmalloc和jemalloc
在一篇 MySQL 排除故障的文章里学到了点东西。MyISAM 存储引擎,数据块通过操作系统缓存,索引块由 key buffer 缓存,大小通过参数 key_buffer_size 控制。不会缓存在 InnoDB 的 buffer_pool 中。MySQL 默认使用 GLIBC 内存分配器,缺点就是内存碎片,多线程性能差。运行时间久了,会把空闲内存一点点吃掉,最后被系统 OOM。针对于这个问题,我就好奇了。什么叫做内存分配器,他是干嘛用的,常见的几种分配器在实现上有没有什么不一样的地方。
2026-02-04 00:31:01
407
原创 第4讲 核心体系架构-进程及内存结构
在PostgreSQL中,BgWriter辅助进程是把共享内存中的脏页写到磁盘上的进程。当向数据库中插入或更新数据时,并不会马上把数据持久 化到数据文件中。这主要是为了提高插入、更新、删除数据的性能。BgWriter辅助进程可周期性地把内存中的脏数据刷新到磁盘中,刷新频 率既不能太快,也不能太慢。如果一个数据块被改变了多次,而此时刷 新频率又太快,那么这些改变每次都会被保存到磁盘中,这会导致I/O 次数增多。
2026-02-03 16:31:29
574
原创 Oracle快速恢复区详解
另外,如果闪回区存储的空间仍然可以扩展,则可以动态修改初始化参数 db_recovery_file_dest_size,增加闪回区空间,在设置这个参数时,Oracle并不会实时检查存储的剩余空间,所以在解决紧急故障时,可以先修改这个参数恢复数据库服务再来研究空间释放的问题,要注意的是,修改快速恢复区的大小一定要大于当前使用大小。通过这个闪回区,Oracle可以简化用户的备份行为和备份管理,进一步地,Oracle可以对备份的文件执行大量的自动维护工作。如果开启了归档模式,那么归档日志也会在快速恢复区里。
2026-02-03 16:29:18
646
原创 Redhat7.4静默安装Oracle19c
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH:指定 Oracle 共享库文件的搜索路径,确保 Oracle 程序能够找到所需的动态链接库,避免运行时出现 "library not found" 错误。数据字典是Oracle数据库的核心组成部分,它包含了数据库的元数据,即关于数据库结构的信息,例如表、索引、视图、用户、权限等对象的定义。用于创建 Oracle 数据库的操作系统用户并设置密码,是 Oracle 数据库安装前的关键步骤。
2026-01-28 11:20:34
685
原创 Linux系统中的 Swap 交换分区
如果没有swap,则服务器一旦内存不足,就会开始终止应用以释放内存,甚至会崩溃,这会让你丢失一些还没来得及保存的数据,或者造成宕机。Linux 中的 Swap 交换分区就是 Windows 中的虚拟内存,将Linux系统服务器中的物理硬盘空间虚拟化成内存使用,以解决内存不够的问题。虽然从swap读写比内存慢,但总比没有好,算是内存不足时一种比较不错的解决方案。4G以内的物理内存,SWAP 设置为内存的2倍。8-64G 的物理内存,SWAP 设置为16G。4-8G的物理内存,SWAP 建议设置为8G。
2026-01-28 11:17:41
318
原创 标准大页 VS 透明大页
( 标准大页 ) 和( 透明大页 )。内存是以块即页的方式进行管理的,当前大部分系统默认的页大小为 4096 bytes 即 4K。1MB 内存等于 256 页;1GB 内存等于 256000 页。CPU 拥有内置的内存管理单元,包含这些页面的列表,每个页面通过页表条目引用。当内存越来越大的时候, CPU 需要管理这些内存页的成本也就越高,这样会对操作系统的性能产生影响。
2026-01-23 00:58:56
562
原创 postgresql 体系概念知识
在 postgreSQL 中,模式(Schema)是用于逻辑组织数据库对象的一种机制。它可以理解为数据库中的文件夹,用于将不同的对象分组管理。允许多个用户使用同一个数据库且用户直接不会相互干扰。把数据库对象放在不同的模式下组成逻辑组,使数据库对象便于管理。第三方的应用可以放在不同的模式中,这样就不会和其他对象的名字产生冲突了。可以给某个用户或角色授予对特定模式的访问权限,而无需对每个对象单独设置权限。数据库 > 模式(Schema) > 对象(表、视图、函数等)。
2026-01-09 12:02:22
665
原创 PostgreSQL模板数据库
当我切换template1数据库然后 \dt+想看看该数据库下有什么表的时候,却发现返回的是Did not find any relations.,也就是该库下没有表,这我就有点好奇了,这两个库是干嘛用的,抱着好学的态度,学完之后对所学知识点做个总结。1. 用户可自定义,如果你在创建库的时候,有一些表,视图,函数,存储过程啥的需要创建,那就可以在模板库里先自定义,新建库的时候就会继承到。template1 和template0 是模板库,顾名思义,就是当创建库的时候,一些信息直接从模板库里获取。
2026-01-09 11:59:19
472
原创 深度解剖索引(下篇)
这样子的好处就是可以提高查询效率,比如说:我想查询 5~28 的数据,那就可以通过叶子节点的指针找到下一个叶子节点,而不是回到非叶子节点,重新计算 25,28 的数据在哪。在优化生产环境的一个报表中,我就遇到过一个问题,按照(区划,单位,时间)建索引还是按(时间,区划,单位)建索引。大字段不要建索引,选择性低的字段也不要建索引,date 类型存储年月日时分秒的字段也不推荐建索引,这种一般是用于范围查询,推荐比较取年月日按天去建索引。前缀索引最要紧的是指定合理的长度,不合理的长度会带来更多的回表查询。
2026-01-07 14:49:35
1016
原创 深度解剖索引(上篇)
很多培训机构为了方便人理解,就把索引说是书本的目录。对于新手来说这样子没啥问题,都是为了方便理解,但是到了面试官那里,你要是直接回答说是目录,那对不起,出门左转。索引的体系知识可以说是看一个人对数据库的掌握程度怎么样。我将分成两个章节来分别讲述索引。MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。
2026-01-07 14:43:16
962
原创 Oracle学习笔记整理-Oracle监听
Oracle监听器(Listener)是一个监听客户端请求的网络服务,它在数据库实例与客户端之间架起了一座桥梁。接收客户端发送的连接请求。将连接请求转发给相应的数据库实例。监控连接状态,确保连接的稳定性和可靠性。监听器通过监听指定的端口号,等待客户端的连接请求。当请求到来时,监听器会根据配置信息,将请求转发给对应的数据库实例。
2026-01-06 10:29:56
1227
原创 Oracle学习笔记整理之一内存结构
本章着重讲解ORACLE的内存结构。了解PGA和SGA具体是怎么去分配,具体的管理方式等等。oracle的内存管理有五种方式,下面简述一下:自动内存管理自动SGA内存管理手动SGA内存管理自动PGA内存管理手动PGA内存管理参数设置SGA_TARGET这里让你选择的话,你肯定会偷懒选择自动管理,但实际企业环境中,可没那么简单。这里以杨老师的《Oracle DBA工作笔记》的书中例子,让大家了解这两个内存合理设置的重要性。案例。
2026-01-06 10:19:49
672
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅