自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 VMware centos无法ping通网关问题解决

VMware centos无法ping通网关问题解决前提VMware使用的是VMnet0, 在ifcfg-ens33中配置的是静态IP, 网关也是手动设置.问题在配置未做任何变化的情况下, 突然发现VMware centos 的网关无法ping通.原因VMware 菜单 “编辑” -> “虚拟网络编辑器”, 查看, 发现VMnet0 中 “已桥接至"的选项默认是"自动”, 即根据实际物理PC的网络连接情况, 自动选择合适的网络适配器.实际我物理PC使用的是"有线网络连接", 网关ping

2020-06-03 12:09:28 131

原创 《Oracle RAC 核心技术详解》 Question and Answer

《Oracle RAC 核心技术详解》 Question and Answer第一部分 集群管理软件集群技术简介EVM, CRS, CSSOracle10g版本, Oracle推出了自己的集群管理软件产品----CRS (Cluster ReadyService).对于集群管理软件—CRS, 主要分为3个组件: CSS (Cluster Synchronization Service),CRS (Cluster Ready Service) 和 EVM (Event Manager).CSS

2020-06-02 14:23:45 149

原创 PG内核分析 Question and Answer

PG内核分析 Question and AnswerPG系统概述为什么说PG是一种先进的对象—关系数据库系统因为PG它不仅支持关系数据库的各种功能, 而且还具备类, 继承等对象数据库的特征.面向对象数据库技术可望成为继关系数据库技术之后的新一代数据管理技术。它是一种以关系数据库和SQL为基础, 扩展了抽象数据类型,从而具备面向对象特征的数据库.PG不是完全的对象数据库, 而是综合了在关系数据库的基础上,吸收了对象数据库的优点发展起来的. 对象数据库的缺点参见下面所述:参考: 面向对象数据

2020-06-02 14:09:46 164

原创 PostgreSQL嵌套事务提交流程研究

PostgreSQL嵌套事务提交流程研究父事务最终提交代码流程图事务提交调用流程其中值得拿出来讲的,主要是TransactionIdSetTreeStatus这个方法。这里涉及到一个概念,子事务。在PG这个地方,子事务的概念主要指:事务从开始到结束,期间可以savepoint,之后rollback到savepoint而不是事务起点,在实际情况中多有应用,因此这里父事务与子事务(比如事务最终提交,但期间有回滚的情况,或者事务期间多次savepoint)必须尽可能原子性的方式写入,否则事务可见性就会

2020-06-02 11:59:39 113

原创 mfence, lfence, sfence什么作用?

mfence, lfence, sfence什么作用?// src/backend/utils/rac/lock_free_queu.array_spsc_queue.c#define mb() asm volatile("mfence":::"memory")#define rmb() asm volatile("lfence":::"memory")#define wmb() asm volatile("sfence" ::: "memory")就是保证内存访问的串行化,内部操作就是在一系

2020-06-02 11:48:57 288

原创 postgresql共享行锁实现原理研究

postgresql共享行锁实现原理研究背景锁是数据库很重要的机制,postgresql支持表锁,行锁,了解postgresql行锁机制有助于我们在应用中分析和解决行锁的问题。锁模式当前postgresql支持4种行锁模式: FOR KEY SHARE, FOR SHARE, FOR NO KEY UPDATE, FORUPDATE,我们常见的delete场景获取的均为FOR UPDATE锁,而update场景会获取FOR NO KEYUPDATE或者FOR UPDATE,要看有没有唯一索引了。

2020-06-02 11:34:41 102

原创 PostgreSQL multixact日志管理器说明

PostgreSQL multixact日志管理器说明MultiXactID日志是uxdb系统用来记录组合事务ID的一种日志。由于uxdb采用了多版本并发控制,因此同一个元组相关联的事务ID可能有多个,为了在加锁(行共享锁)的时候统一操作,uxdb将与该元组相关联的多个事务ID组合起来用一个MultiXactID代替来管理。同CLOG、Subtrans日志一样,MultiXact日志也是利用SLRU缓冲池来实现。MultiXact日志管理器相关数据结构MultiXactID是一个多对一的映射关系,需要

2020-06-02 11:26:32 78

原创 PostgreSQL中使用pstack打印fork子进程所有线程堆栈信息

PostgreSQL中使用pstack打印fork子进程所有线程堆栈信息PostgreSQL数据库在并行查询中, 出现如下"stack depth limit exceeded"的错误, 因此想使用pstack来打印其堆栈信息, 依次来排查错误.voidcheck_stack_depth(void){ if (stack_is_too_deep()) { ereport(ERROR, (errcode(ERRCODE_STATEMENT_TOO_COMPLEX), errm

2020-06-02 11:13:09 126

原创 PostgreSQL查看各个数据库占用的物理空间大小

SELECT d.datname AS Name, pg_catalog.pg_get_userbyid(d.datdba) AS Owner, CASE WHEN pg_catalog.has_database_privilege(d.datname, 'CONNECT') THEN pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(d.datname)) ELSE 'No Access' END.

2020-06-02 09:49:22 238

转载 postgresql shared_buffers 讲解

postgresql shared_buffers 讲解什么是shred_buffer,我们为什么需要shared_buffers?1.在数据库系统中,我们主要关注磁盘io,大多数oltp工作负载都是随机io,因此从磁盘获取非常慢。2.为了解决这个问题,postgres将数据缓存在RAM中,以此来提高性能,即使ssd的情况下RAM也要快很多。3.shared_buffers是一个8KB的数组,postgres在从磁盘中查询数据前,会先查找shared_buffers的页,如果命中,就直接返回,避免从

2020-06-02 09:34:40 125

原创 PostgreSQL中的SpinLock

PostgreSQL中的SpinLock1. What is SpinLock?SpinLock也就是我们常说的自旋锁,其显著的特点就是“死等”,需要获取SpinLock的线程会一直主动地check能否获取得到锁,直到获取到锁后线程才会继续执行下面的逻辑,这把锁会一直被这个线程持有,直到线程自己主动释放。因此,如果我们的应用场景,线程在锁的获取上只会被阻塞非常短的一段时间(或者锁在获取后马上会被释放),那么SpinLock的使用可以减少CPU对于进程重新调度(rescheduling)和上下文切换的开销

2020-06-02 09:28:40 38

转载 PostgreSQL中的RegularLock

PostgreSQL中的RegularLockRegularLock又称为HeavyweightLock,在PostgreSQL中我们常说的表锁,指的其实就是这类锁。因为,对于用户来说,关心的是表,数据库,page等数据库的对象,而之前所介绍的SpinLock和LWLock保护对象的是数据库内部实现的数据结构。相比与SpinLock和LWLock,RegularLock的加锁开销非常大,因为加锁时要额外记录锁的持有者,加锁次数,请求次数等额外信息。1. what is RegularLock?这里从几

2020-06-02 09:27:29 46

转载 PostgreSQL中的LWLock

PostgreSQL中的LWLock上一篇文章介绍了PostgreSQL中的SpinLock,本文将介绍的LWLock是基于SpinLock实现的一种轻量级锁( Lightweight Lock)。1. What is LWLock?从PG 10.5的注释来看,LWLock主要提供对共享内存变量的互斥访问,比如Clog buffer(事务提交状态缓存)、Shared buffers(数据页缓存)、Substran buffer(子事务缓存)等等。LWLock的数据结构定义如下:typedef st

2020-06-02 09:26:15 51

原创 base64, base64_encode, base64_decode

base64, base64_encode, base64_decodebase64Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符

2020-06-02 09:24:20 32

原创 RSA和DES算法的优缺点、比较

RSA和DES算法的优缺点、比较DES算法:优点:密钥较短,加密处理简单,加解密速度快,适用于加密大量数据的场合。缺点:密钥单一,不能由其中一个密钥推导出另一zd个密钥。DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption

2020-06-02 09:22:21 547

转载 postgresql shared_buffers 讲解

postgresql shared_buffers 讲解什么是shred_buffer,我们为什么需要shared_buffers?1.在数据库系统中,我们主要关注磁盘io,大多数oltp工作负载都是随机io,因此从磁盘获取非常慢。2.为了解决这个问题,postgres将数据缓存在RAM中,以此来提高性能,即使ssd的情况下RAM也要快很多。3.shared_buffers是一个8KB的数组,postgres在从磁盘中查询数据前,会先查找shared_buffers的页,如果命中,就直接返回,避免从

2020-05-15 14:18:42 117

转载 PostgreSQL中的LWLock

PostgreSQL中的LWLock上一篇文章介绍了PostgreSQL中的SpinLock,本文将介绍的LWLock是基于SpinLock实现的一种轻量级锁( Lightweight Lock)。1. What is LWLock?从PG 10.5的注释来看,LWLock主要提供对共享内存变量的互斥访问,比如Clog buffer(事务提交状态缓存)、Shared buffers(数据页缓存)、Substran buffer(子事务缓存)等等。LWLock的数据结构定义如下:typedef st

2020-05-14 10:04:28 172

转载 PostgreSQL中的RegularLock

PostgreSQL中的RegularLockRegularLock又称为HeavyweightLock,在PostgreSQL中我们常说的表锁,指的其实就是这类锁。因为,对于用户来说,关心的是表,数据库,page等数据库的对象,而之前所介绍的SpinLock和LWLock保护对象的是数据库内部实现的数据结构。相比与SpinLock和LWLock,RegularLock的加锁开销非常大,因为加锁时要额外记录锁的持有者,加锁次数,请求次数等额外信息。1. what is RegularLock?这里从几

2020-05-14 09:59:02 76

转载 PostgreSQL中的SpinLock

PostgreSQL中的SpinLock1. What is SpinLock?SpinLock也就是我们常说的自旋锁,其显著的特点就是“死等”,需要获取SpinLock的线程会一直主动地check能否获取得到锁,直到获取到锁后线程才会继续执行下面的逻辑,这把锁会一直被这个线程持有,直到线程自己主动释放。因此,如果我们的应用场景,线程在锁的获取上只会被阻塞非常短的一段时间(或者锁在获取后马上会被释放),那么SpinLock的使用可以减少CPU对于进程重新调度(rescheduling)和上下文切换的开销

2020-05-14 09:47:18 80

转载 Linux命令的全称说明

Linux常用命令的全称说明基本命令pwd = print working Directory 打印工作目录ls = list 列出bash = Bourne Again SHellbc = Basic (Better) Calculator 计算器bg = BackGround 后台cal = CALendar 日历cat: Concatenate 合并文件cd = Change Directory 进入目录chgrp = CHange GRouP 修改组chmod = CHange

2020-05-14 09:38:55 121

原创 github操作出现Username for 'https://github.com':的验证问题

github操作出现Username for ‘https://github.com’:的验证问题将本地库推送到github上, 输了好几次都不对, 最后发现这是个坑, 这里的Username其实填的是你的github的邮箱地址, 而非用户名. 特此记录.$ git push -u origin masterUsername for 'https://github.com': ...

2020-03-16 10:02:30 941

原创 PostgreSQL 如何打印日志信息所在的源文件和行数

PostgreSQL 如何打印日志信息所在的源文件和行数一直好奇在PG中, 当输出错误日志时, 如何能够附带错误信息所在的源代码文件名以及发生错误的代码行数.postgres.conf中, log信息冗余级别为"default(默认)", terse: 表示更加简单的日志信息, verbose: 表示更加冗余的日志信息(即: 附带"文件名和行数)#log_error_verbosity ...

2020-03-02 09:46:11 354

原创 数据库三级封锁协议介绍及说明

数据库三级封锁协议介绍及说明1级封锁协议定义: 事务T在修改数据data之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。效果: 1级封锁协议可防止修改丢失,并保证事务T是可恢复的。说明: 事务T的写操作加了"X排他锁", 所以其他事务不可修改, 因此可防止修改丢失.备注: 这里的"修改丢失"指的是事务T内的修改, 在...

2020-02-21 20:19:07 379

原创 虚拟机centos NetworkManager导致网络不通解决

虚拟机centos NetworkManager导致网络不通解决虚拟机网络手动配成了静态ip, 但每次重启虚拟机centos后, 发现网络全变成内网IP 127.0.0.1解决:sudo systemctl stop NetworkManagersudo systemctl start network.service禁止NetworkManager开机启动参考RHEL6.5安装N...

2020-02-20 21:30:14 1020

转载 被面试官问“Mysql”,update 语句到底做了些什么?

被面试官问“Mysql”,update 语句到底做了些什么?问题:一条简单的update 的语句到底牵扯了多少的东西?你能完全说明白吗?看看具体流程:前提: student 只有id, 和name 两个字段,且只有id 一个主键,无其他索引。update student set name = 'gxw' where id = 2开启事务,将原内容写入undo log。去Buff...

2020-02-20 21:06:49 361

转载 PostgreSQL事务处理机制问答

PostgreSQL事务处理机制问答1、Q:PostgreSQL中DDL支不支持事务?A:支持。PostgreSQL中对DDL的处理方式和普通的DML类似,也是支持事务的。2、 Q:PostgreSQL中对BLOB数据的处理支不支持事务?A:支持。对BLOB(bytea或large object)数据的事务处理和普通数据的差别不大,但由于BLOB数据较大涉及BLOB的事务会产生很大的WAL...

2020-02-20 15:42:35 129

转载 可串行性与“严格”可串行化区别

可串行性与“严格”可串行化区别多年来,“可串行化/序列化”(serializability)被称为数据库隔离级别的“ 黄金标准 ”。它是绝大多数商业数据库系统中提供的最高隔离级别,一些高度广泛部署的系统甚至无法提供隔离级别与可序列化一样高。在这篇文章中,我们展示了可序列化的可行性,并且说明它从未成为数据库系统的“黄金标准”。事实上,严格的可串行化才一直是黄金标准。正如我们将看到的,因为在遗留数...

2020-02-20 15:36:46 267

原创 PostgreSQL系统概述_PG数据库内核分析学习笔记

PostgreSQL系统概述_PG数据库内核分析学习笔记PG简介和发展历程PG以一种先进的对象-关系数据库管理系统(ORDBMS), 它不仅支持关系数据库的各种功能, 而且还具备类, 继承等对象数据库的特征.它是目前功能最强大, 特性最丰富的和结构最复杂的开源数据库管理系统, 其中有些特性甚至连商业数据库都不具备.什么是对象数据库?面向对象数据库系统(OODBS)支持定义和操作OODB...

2020-02-20 14:16:25 230

原创 centos Job for network.service failed 解决

centos Job for network.service failed 解决[uxdb@localhost ~]$ sudo systemctl restart networkJob for network.service failed because the control process exited with error code. See “systemctl status ne...

2020-02-19 21:47:56 190

原创 PG MVCC 与 Oracle MVCC实现机制的背后思想差异

PG MVCC 与 Oracle MVCC实现机制的背后思想差异在PG中执行DELETE时, 行不会立即从数据文件中删除, 而是仅通过在页头中设置为xmax字段将其标记为已删除. 同样对于UPDATE, 它可能在PG中被视为DELETE + INSERT.这就因为PG MVCC背后的基本思想之一, 因为它有如下好处:允许更大并发支持更大的UPDATE操作在不同的进程之间最小的锁定O...

2020-02-19 21:25:21 377

原创 buffer和cache区别的简单理解

buffer和cache区别的简单理解什么是buffer, 什么是cache, 在有些情况下两者概念是混用的, 但在有些场合, 二者又有些区别.从我经常使用的场景来"望文生义"理解, buffer就是"缓冲/缓存"的意思, cache经常和"命中率"有关, 由此, 简单推断, “缓冲/缓存"的目的是为了什么, 不就是为了"写"嘛, 而"命中率”, 命中,不命中,和什么有关, 和"读"有关嘛....

2020-02-18 23:11:13 56

原创 vscode中"无法查看c/c++源代码光标所在的函数名称"问题解决

vscode中"无法查看c/c++源代码光标所在的函数名称"问题解决问题图1 C/C++ IntelliSense"智能感知插件在使用vscode中, 使用"C/C++ IntelliSense"智能感知插件(如上图1) , 来查看c\c++语言的源代码. 正常情况下, 页面最上方会显示出"光标所在的函数名称" (如下图2)图2 自动显示光标所在的函数名称但偶而会出现无法显示"光标所...

2020-02-18 22:24:11 390

原创 vim 常用技巧介绍

vim 常用技巧介绍vim 指定范围内查找参考: https://stackoverflow.com/questions/3264120/vim-search-only-between-specific-line-numbers方法1指定要搜索的起止行号, search为要搜索的pattern:12,24g/search/方法2方法1需要手动输入起止行号, 不够直观, 最好是用选择的...

2020-02-18 21:36:48 65

原创 global 常用技巧介绍

global 常用技巧介绍global -c xx查找以"xx"为前缀的所有函数, 如果没"xx"参数, 那么会列出所有的函数.global -c 不支持正则表达式, 如果需要模糊查找, 可以和grep搭配使用 global -c |grep xx 或 global -c xx |grep xxglobal -x “完整函数名称”查找函数定义所在的文件路径.$ global -...

2020-02-18 21:35:39 255

原创 PG数据库内核分析学习笔记_MultiXact日志管理器

PG数据库内核分析学习笔记_MultiXact日志管理器MultiXact日志是PG系统用来记录组合事务ID的一种日志. 由于PG采用了多版本并发控制, 因此同一个元组相关的事务ID可能有多个, 为了在加锁(行共享锁)的时候统一操作, PG将与该元组相关联的多个事务ID组合起来用一个MultiXactID代替来管理.同CLOG, SubTrans日志一样, MultiXact日志也是利用SLRU...

2020-02-18 21:32:57 162

原创 postgresql psql explain选项使用示例介绍

postgresql psql explain选项使用示例介绍explainpostgres=# explain select count(*) from pgbench_accounts ; QUERY PLAN ...

2020-02-18 15:32:49 99

原创 PostgreSQL 10 基于日志的备份与还原

PostgreSQL 10 基于日志的备份与还原wal,即预写式日志,是日志的标准实现方式,简单而言就是将对数据库的变动先记录到日志中,而后在将具体的新数据刷新到磁盘。PostgreSQL将该日志维护在数据文件夹下的子文件夹pg_wal中。当数据库崩溃后,可以通过“重放(replay)”日志中的“动作”,将数据库恢复。也就是说,只要拥有一个基础备份和完整的日志文件,理论上可以将数据库库恢复到任意...

2020-02-17 21:20:44 491

原创 PG数据库内核分析学习笔记_XLOG日志恢复策略

PG数据库内核分析学习笔记_XLOG日志恢复策略在PostgreSQL中,系统在崩溃后重新启动时会调用StartupXlog入口函数.// xlog.c/* * This must be called ONCE during postmaster or standalone-backend startup */voidStartupXLOG(void){ XLogCtlInser...

2020-02-17 17:25:32 227

原创 为什么PG只是用REDO方法来进行数据库的恢复

为什么PG只是用REDO方法来进行数据库的恢复在阅读<PG数据内核分析>一书中, 看到这样一句话:PG只是用REDO方法来进行数据库的恢复, 它不使用UNDO是因为其数据的多版本使得UNDO没有必要. 但从本质上来讲, PG日志并非是REDO日志, 而应该是UNDO/REDO日志, 其创建检查点时大体上服从UNDO/REDO日志创建检查点时要服从的规则, 只是做了一点改动.为...

2020-02-17 16:44:32 164

转载 Oracle RAC原理概要介绍

Oracle RAC原理概要介绍单点数据库 vs RAC单节点数据库,如果宕机了,如果一个业务链接在实例上面,那么这个业务就中断了。这个时候系统就不具有可用性了,那么这个时候单节点的可用性是很差的。对于RAC来说,和单实例一样,还是一份数据文件,都是相同的存储上面放着oracle的文件,但是是由三个实例共用同一份数据文件。这样的好处是在三个实例之间做了冗余,在上面三个实例当中任意两个坏了业...

2020-02-17 16:09:00 103

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