自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 pg内核之日志管理器(五)WAL日志

数据库运行过程中,数据一般是会保存在内存和磁盘中,为保证数据的安全性,防止数据库崩溃时数据不丢失,一般都是要保证数据实时落盘的,但是又由于磁盘随机IO读写速率与内存相比慢很多,如果每个事务的数据都要等到写入到磁盘才算完成,其性能会非常的差。为了解决这种问题,数据库提供预写式日志方式,即WAL日志,事务中每次写入只需要保证WAL日志落盘即可,不必再关心数据是否真的落盘,这样即使数据库崩溃,由于WAL日志已经落盘,仍旧可以通过WAL恢复数据的。

2024-04-20 18:15:00 1207

原创 pg内核之日志管理器(四)SUBTRANS日志

pg中有嵌套事务的概念,它的基本思想是嵌套事务中存在一个事务树。从根开始,每个事务都可以建立更低层次的子事务,子事务被嵌套在父节点的控制区域之内。为此,pg引入了SUBTRANS日志,记录每个事务的父事务ID。SUBTRANS日志通过SUBTRANS日志管理器来管理。SUBTRANS日志管理器管理着一个SLRU缓冲池,是类似于提交日志管理器的管理器,存储着每一个事务的父事务ID。它是嵌套事务实现的一个基础部分。一个主事务的父事务是INVALID的,每一个子事务都会有一个直接的父事务。

2024-03-26 20:08:41 952

原创 pg内核之日志管理器(三)CLOG日志

CLOG日志记录的是事务的最终状态。CLOG日志管理器管理者CLOG日志缓冲池,该日志缓冲池基于SLRU缓冲池实现。

2024-03-26 20:06:33 971

原创 pg内核之日志管理器(二)MultiXact日志

MultiXact日志时数据库用来记录组合事务ID的日志。正常情况下,当事务更新一个元组或者对一个元组加锁时,其xmax字段会填入操作该元组的事务ID值,但是当多个事务同时操作一个元组时(如更新元组事务和元组加锁事务),元组的xmax就无法同时记录两个及以上的事务ID了,这时就会分配一个MultiXactID,然后将事务ID保存到MultiXact日志中,这样需要时就能通过MultiXactID就能查到其对应的事务ID了。

2024-03-23 16:49:01 696

原创 pg内核之日志管理器(一)SLRU缓冲池

每个段都有一个段号,通过段号找到对应的文件,相反的如果知道日志的页面号,就可以找到该页面所在的段文件及该页在段文件中的偏移,当需要对这些文件进行操作时,需要先将其读入内存中,在内存中则以SLRU缓冲池的形式存在。因为往磁盘中写入是以块为单位的,而大多数情况是一个日志记录比一个块小多了,为了降低写入日志带来的IO开销,数据库中就设置了日志缓冲区,缓冲区以页为单位,当日志缓冲区满了之后就以块为单位写入磁盘。pg中的日志管理主要包括两种日志,一种是XLOG日志,记录的是事务对数据更新的过程和事务的最终状态。

2024-03-23 16:46:32 946

原创 pg内核之事务管理器(五) MVCC

SQL标准考虑的并行事务之间避免的现象脏读一个事务读取了另一个未提交的并行事务写的数据。比如事务A和B同时操作一张表tb1,A向表中插入一条数据,但是没有提交,这时事务B读取该表时,读到了事务A插入的数据。不可重复读一个事务重新读取前面读取过的数据,发现该数据已经被另一个已经提交的事务修改过。比如事务A和B同时操作一张表tb1,事务A读取表中数据“1”, 然后事务B将表中的数据“1”更新成“2”,然后事务A再次读取该表,读到了数据“2”。这就是不可重复读。幻读。

2024-02-16 14:25:03 916

原创 pg内核事务管理器 (四)事务ID

事务ID是事务的全局唯一标识,在事务存活期间能够唯一标识一个事务或子事务。它是一个32位无符号整数,最大取值为2^32-1。0: 代表不正确的事务ID号1: 代表Bootstrap的txid,在数据库初始化时使用。2: 冻结事务ID,该ID值对所有事务都可见根据数据库的MVCC原理,其中一条就是: 每个事务只能看到事务ID比当前事务ID小且没有被删除的元组。所以事务ID在判断元组可见性方面有着至关重要的作用。

2024-01-05 16:33:57 1155 1

原创 pg内核之事务管理器(三) 两阶段提交

两阶段提交主要用于分布式数据库中,分布式数据库本质上是将数据分布到不同的主机上,以实现大数据量的存储。例如greenplum数据库就是基于pg的分布式分析型数据库。分布式数据库主要有两个关注点:分布式执行计划,分布式事务。而分布式事务就是本章要将的两阶段提交。读操作需要保证在不同的主机上读到一致的数据。需要保证事务在不同主机上的原子性,不能出现某个主机上写数据成功,另一个主机上写数据失败的情况。两阶段提交就是针对写操作,将事务的提交分为两个阶段,当数据写入不同的主机时,要么全部提交,要么全部回滚。

2023-12-29 18:12:18 1026

原创 pg内核之事务管理器(二)子事务

数据库的子事务是指一个事务内部又包含了其他的事务,这些被包含的事务,我们称之为子事务。正常的事务中,一旦出现错误整个事务将回滚,期间所作的所有操作都将被撤销。对于一些比较大的事务,已经执行了许多的操作后,到临结束时出现错误,从而导致整个事务回滚,这在一些复杂的并发场景中,是很不友好的。而在事务中加入子事务,一旦出现错误,只需要回滚当前的子事务即可,并且回滚子事务不会影响到父事务的状态,能够提升业务的性能。因此子事务常被用于复杂的并发场景中,可以显著的提高数据库的性能和并发业务处理能力。

2023-12-22 22:12:04 861

原创 项目提交代码量计算及代码修改量计算

代码量计算,使用git log , diff, scc等工具

2023-12-21 17:46:45 1022

原创 pg内核之事务管理器(一) 事务块

事务管理系统一般是指数据库中事务处理相关的几个模块的统称。事务管理系统主要包括三个大模块: 事务管理器、锁管理器和日志管理器。

2023-12-21 15:04:24 1011

原创 pycharm安装及AI工具CodeGeeX插件安装

安装之后右侧就会出现codeGeeX的图标,点开后可以使用AI的功能了,有AI翻译,添加注释等功能。国外网站比较慢,经常会下载超时失败,所以可以修改为国内的源。这个目前是免费的,只需要注册账号并登录下就可以了!下载失败的话,官网下载后手动指定。插件市场搜Code GeeX安装。

2023-11-19 22:03:59 2877

原创 centos8系统上手动安装pg16

这样数据库就装上了,默认用户是postgres,默认数据目录是/var/lib/pgsql/data但是如果不想使用默认的数据目录和用户,可以自定义初始化并安装,我的实现是这样的pg_hba.conf文件中的匹配原则是从文件头开始匹配,匹配到第一条符合要求的规则后就不会再继续匹配。接下来就可以创建表,开启愉快的数据库之旅了。

2023-11-19 21:56:07 532

原创 vmware16安装centos8

下载地址: https://mirrors.aliyun.com/centos/8.5.2111/isos/x86_64/CentOS-8.5.2111-x86_64-dvd1.iso。我是vm10,安装的是centos8系统,可能有兼容性问题。换成centos7就可以,不过我把Vmware换成了17.5然后安装centos8。这里选择下载好的系统ISO,我这里下载的是centos8。然后就进行系统安装就可以了。参照指示进行安装即可。

2023-11-19 21:15:27 40

原创 django学习之编写简单应用投票系统(1)

Django默认使用sqllite作为默认数据库,SQLlite在安装Django时已经默认安装,settings.py里的配置也是配置的SQLlite数据库。include允许引用其他的URL配置,每当django遇到include时,都会截断与此匹配的URL的部分,并将剩余的部分发送到URL配置以供进一步处理。现在表示成功启动成功一个空的web服务器,默认的IP地址和端口是127.0.0.1:8000,这个可以在启动时指定,如。输出的内容与数据库有关,这里我选用的是pg,所以输出的是pg的SQL。

2023-11-19 21:08:37 64

原创 记一次greenplum集群数据库连接慢的问题定位

集群状态gpstate -c查看当前并发进程数量select count(1) from pg_stat_activity;查看死锁SELECT distinct w.current_query as waiting_query,w.procpid as w_pid,w.usename as w_user,l.current_query as locking_query,l.procpid as l_pid,l.usename as l_user,t.s

2021-07-05 19:48:20 850

原创 python爬虫学习(1)

request请求使用request模块爬取简单的搜狗网页内容# -*- coding: utf-8 -*-"""Spyder EditorThis is a temporary script file."""import requests# request 模块: python 中原生的一款基于网络请求的的模块,功能非常强大if __name__ == '__main__': # 指定URL url = 'https://www.sogou.com/' #

2021-02-22 20:25:38 98

转载 keepalived原理分析

https://www.iteye.com/blog/aoyouzi-2288124

2020-04-09 23:40:58 101

原创 git log 计算代码量

1. 统计提交的作者 git log --pretty='%aN' | sort | uniq -c |awk '{print $2}'2. 统计代码量 git log --author="uer_name" --since ==2017-05-11 --until=2018-03-07 --pretty=tformat: --numstat | gawk '{ add += $1 ...

2020-01-04 21:42:40 616

转载 【转载】source执行shell脚本原理

【转自】https://blog.csdn.net/xy913741894/article/details/73849441shell脚本运行的原理(source命令等)2017年06月28日 16:29:36阅读数:2454Shell英文意思是外壳, 用户可以通过Shell和操作系统交互,通俗的讲Shell就是一个解释器,当我们输入命令Shell就解释执行,Shell有很多版本,...

2018-08-08 19:15:48 432

转载 【转】手动安装gcc源码

【转自】https://blog.csdn.net/weixin_40420213/article/details/786875401、准备工作系统自带的gcc版本为4.4.7,升级至5.4.0版本,需要提前准备以下安装包: gcc-5.4.0.tar.gz 安装包 http://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gzgmp-4....

2018-08-07 19:34:30 1317

转载 【转】shell命令之tar

【转】https://blog.csdn.net/freeking101/article/details/51480295tar 命令[root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 ....Usage: tar [OPTION...] [FILE]...Examples:        tar -cf archive.tar foo bar      ...

2018-08-06 19:11:15 767

转载 [转]keepalived原理分析

转自http://outofmemory.cn/wiki/keepalived-configurationkeepalived是什么keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。keepalived工作原理keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy...

2018-07-25 10:35:52 179

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除