首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Postgresql源码(70)逻辑复制DecodeXLOG主要流程和数据结构

pg_logical_slot_get_changes走decode这部分代码逻辑简单且相对独立,可以参考的地方: 经典查找结构hashtable entry中dlist的数据结构。...从XLOG反解并拼出tuple的几个函数调用。 完整独立的Xlog解析接口的调用、hash表、dlist的操作;不同日志类型的处理方式。 1 解析流程 逻辑复制数据结构稍复杂,流程逻辑很简单。...在发现事务提交XLOG,从ReorderBuffer的哈希表中,用xid找到ReorderBufferTXN,在把维护的链表上的所有ReorderBufferChange拿到,把半成品ReorderBufferChange...('test_slot', 'test_decoding'); -- 测试开始 SELECT pg_logical_slot_get_changes('test_slot', NULL, NULL);...Change结构在事务提交,会全部拿出来给试下指定的逻辑复制解析插件,按插件自己定制解析后输出逻辑解析成品。

37010

PostgreSQL WAL 文件中时间线与如何进行标识

通过调用pg_controldata,查看当前的数据库的wal日志正在使用的是哪个,这里的是 000000010000000000000012 。...root@pg16:~# su - postgres postgres@pg16:~$ pg_controldata pg_control version number: 1300...pgdata/data/pg_wal$ postgres@pg16:/pgdata/data/pg_wal$ postgres@pg16:/pgdata/data/pg_wal$ cat 00000003...pgdata/data/pg_wal$ 当我这次备份数据库,后在进行恢复,给我的信息和之前又不一样,那么问题来了,为什么每次在数据库恢复后,都会多一个history文件,他的功能是什么,同时为什么每次恢复一次数据库...他这里有点像git的分支,但是不能合并的那种, 那么为什么会这样,我们可以理解为数据库最早的时间线是ID 1 ,后面所有的数据都是在时间线1 上进行的当我们备份数据库后在数据库上进行恢复后,则创建了时间线

11110

第33天 初识socket编程

为什么呢?...循环通信 虽然实现了一个简单的通信,但是在日常生活中我们说一句话之后,就会电话吗,当然不会,我们希望的是通过一个循环可以让我模拟出我们可以不停的发送信息然后服务端给我回复信息,因此代码可以修改成下面的样子...客户端:所以当客户端输入为空,执行send发现数据为空,就直接跳过此语句,此时客户端开始执行recv语句,也就是进入了阻塞阶段,等待接收数据,但是此时并没有人给我发数据,所以阻塞了。   ...发送过程:应用程序要把数据首先存放在操作系统的缓冲区,然后由操作系统去调用网卡接口将数据转发出去。   接收过程:网卡接收到数据之后首先要存放在操作系统的缓冲区,然后才是由应用程序过来取。   ...为什么会出现粘包这个问题   因为对于操作系统而言,每接收一个数据包就会在之前数据存储的后面继续存储数据,并不会给两个数据包区分一个明显的界限,因此当上一次的数据没有取完的时候,一旦操作系统重新接收到了新的数据

38830

揭秘腾讯云数据库主从架构 | 云原生篇

本文将由腾讯云数据库专家工程师邹立贤为大家带来TDSQL-C PG版的主从架构详解。 TDSQL-C PG版整体架构 为什么我们要做TDSQL-C这款产品?...完链以后,这些链上的日志是由PG的后台进程读取,然后将日志对应的修改应用到页面上。...和PG不一样的地方在于,当我们要应用的日志对应的数据页面不在内存中,我们会跳过这条日志的恢复,也就是不需要从存储上把数据页读出来后再恢复到内存中。这一点是和传统PG不一样的地方。...另外一个优化也是和DROP 表相关的,PG从机在恢复一张表,会把这个表的信息保存在内存中的一个单向链表中,当恢复到这个表的删除操作,从机再从单向链表中把这个表找到并移除掉,也就是这个表第一次创建,...当我们表比较多的时候,比如说有几千、几万张表,单向链表长度也是几千、几万。当要删除这个表,要从几千、几万个元素的单向链表中找到要删除的节点的前向节点,把它指向要删除这个节点的后向节点。

2.7K20

PostgreSQL 自己的 DB buffer & 与别的人的OS cache 之 回答问题

最近周四的一篇文字中的分享引起了部分同学的注意,私信我,并问了一些问题,这里挑拣了 红旗迎东风(希望名字没有敲错)同学的问题。...那问题是为什么要需要buffer cache ,如果直接可以使用使用OS cache 不就可以了。...那到底为什么要有buffer cache 原因主要在于buffer cache 有数据库独有的算法,在postgresql 的 buffer cache 中可以通过近似LRU 的算法将经常被用到的数据,...那可能又有问题提出,为什么PG 建议将buffer cache 设置到总体的内存的25%,而不是更大,更大不是更好吗?...实际上根据 PG9.X PG 10 的相关书籍中提到的,如果这样可能适得其反,书中提出的观点是,PG 在操作,有一部分是通过系统的CACHE 会更直接。以下是书中原文截图 ?

1.1K30

2021年底面试记录

目录: 前言 腾讯QQ音乐(三面) 一面 二面 三面 字节飞书(二面) 一面 二面 深信服 一面 二面 商汤(二面) 一面 二面 虾皮 一面 二面 顺丰数科(一面) 字节国际化电商 一面: 二面...: 三面: 总结 前言 今天这篇用来记录一下这两三个月的面试历程,包括普通八股文、算法 有些是面试完几天后才记录的,只想起了个大概,详细的记不太清楚了 只是题目,答案的话直接网上搜索就行了 腾讯QQ音乐...11、性能优化操作如何利用arthas进行操作的?...12、spring cloud有哪些组件 13、为什么会有Feign组件,跟Ribbon需要自构建http请求如何区分 14、微服务之间怎么进行调用,pod之间如何在网络层相互调用 15、spring循环依赖如何处理...像protobuf等,该怎么去设计消息体结构,要是文本类消息该如何设计消息体结构 3、https如何进行单方面认证,比如客户端认证服务端 4、线程之间如何进行通信 5、mysql的原子性怎么样的,如何保证原子性

77920

网络编程之socket的运用

你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。 生活中的场景就解释了这工作原理。...服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。...,而不是抛出异常 公共用途的套接字函数 s.recv() 接收TCP数据 s.send() 发送TCP数据(send在待发送数据量大于己端缓存区剩余空间,...数据丢失,不会发完) s.sendall() 发送完整的TCP数据(本质就是循环调用send,sendall在待发送数据量大于己端缓存区剩余空间,数据不丢失,循环调用send直到发完)...1 import socket 2 client=socket.socket() 3 client.connect(('127.0.0.1',1314)) 4 while True: 5

87330

网络通信 & 初识socket

为了克服这个缺点,一般把利用浏览器方式实现困难的功能,单独开发成可以发布的控件,在客户端利用程序调用来完成. 软件C\S架构:客户端\服务端架构:京东,淘宝,今日头条,qq,微信........网络通信中的一些基本概念:  网线:传送电信号 网卡: 提供网络接口,接收电信号 MAC地址: 长度为48位二进制, 通常由12位16进制数表示(前六位是厂商编号, 后六位是流水线号), 每块网卡出厂都被烧制了全球唯一的...name)和与之相对应的IP地址 (IP address)转换的服务器 广播: 将源MAC地址,目标MAC地址及信息通过交换机和路由器发送给局域网内的所有其他设备 ARP协议: 地址解析协议,主机发送信息将包含目标...conn.send(server_input.encode('utf-8')) if server_input == 'bye': break conn.close() #电话...) #关手机 import socket import time client = socket.socket() server_ip_port = ('192.168.111.1',8001) client.connect

54010

Netty 那些事儿 ——— 心跳机制

心跳包的作用 保活 Q:为什么说心跳机制能保持连接的存活,它是集群中或长连接中最为有效避免网络中断的一个重要的保障措施?...Object的wait()前必须调用的方法,以检查当前的上下文是否会使Object wait()的调用造成死锁。...所以如果挂起的线程和需要调用notify的线程是同一个线程的话,就会发生死锁。(因为线程都已经被挂起了,还怎么去进行notify/notifyAll操作了?)...然后,我们知道当ChannelFuture调用await(*)、sync(*)、get(*) 等方法就会触发当前线程的wait()操作,并将当前线程挂起,等待Channel相关的操作完成。...get(*) 等方法的线程( 即,调用wait()的线程 )是同一个线程,就会发送死锁了!!!

2.6K90

Postgresql源码(86)varchar的创建与插入分析

一般PG数据类型不会带括号,varchar和numeric是比较特殊的基本类型,后面可以带括号指定长度或精度。 本篇回答下面两个问题: 分析这种特殊类型(类型带括号)创建与使用细节。...0 总结速查 varchar和varchar(2)区别: 建表:语法分析大体相同,varchar(2)会在TypeName->typmods链表上一个A_Const记录长度 限制。...插入数据: 语法解析:生成值对应的A_Const记录原始数据。...=-1会构造表达式计算,调用varchar函数对Const进行验证,如果长度超出限制直接报错。(如何调入varchar函数?...varchar, c2 varchar(2), c3 varchar(4)); 1.1 varchar语法解析 varchar和varchar(2)的区别主要是在: TypeName->typmods链表会一个

48120

7月13日 “B 站崩了” 事件分析

猜测 2:服务雪崩 猜测3:自研组件问题 防治技术 总结: 打开 B 站,先是 404 Not Found 找不到资源: 然后是 502 错误网关: 猜测 1:网关挂了 首先,这次小破站事故发生,...图片此外,网关通常还承担起了保护服务弟弟们的使命,统一负载均衡、控制流量、熔断降级等。按道理来讲,通常网关不仅要保护下游的服务,自身也是需要安全保护的。 但为什么网关没有保护好自己呢?...网关一,服务没爹,服务缺少了调用入口,自然就不可用了,未必所有网关后的服务都处于瘫痪状态。 猜测 2:服务雪崩 还有一种猜测是 B 站系统存在很多服务的 调用链 。...再加上上游不断积压请求,最终导致整个调用链雪崩,所有链上服务从儿子到爸爸全部灭门。...我将了解到的技术简单分类,整理成了一张思维导图: 总结: 首先是要有 质疑精神 ,我们在写程序出现问题,习惯性地先从自己身上找原因没有任何问题,但自己排查没有发现 Bug 后,应该大胆推测是我们用到的类库

19310

C#网络编程(基本概念和操作) - Part.1

举个例子,如果你想写封邮件发给远方的朋友,那么你如何写信、将信打包,属于应用层,信怎么写,怎么打包完全由我们做主;而当我们将信投入邮筒,邮筒的那个口就是套接字,在进入套接字之后,就是传输层、网络层等(...因此,使用这种模式,各个主机依然需要保持对端口的侦听。在某台主机离线,与登录的模式类似,服务器会收到通知,然后转告给其他的主机。 ?...服务端获取客户端连接 获取单一客户端连接 上面服务端、客户端的代码已经建立起了连接,这通过使用“netstat -a”命令,从端口的状态可以看出来,但这是操作系统告诉我们的。...那么我们现在需要知道的就是:服务端的程序如何知道已经与一个客户端建立起了连接?...但是操作系统是知道连接已经建立了的,只是我们程序中没有处理到,所以我们当我们输入“netstat -a”,仍然会看到3对连接都已经建立成功。

1.3K51
领券