笔记 postgresql oid同步
以前学习postgresql的笔记
create table 消耗 OID
如create table my_test_table, 他本身会消耗一个
会在pg_type中插入两条记录_my_test_table和my_test_table会消耗掉两个oid
如果该表需要toast会生成一个改变的toast表和toast index表消耗另外两个,查看过程如下:
create table my_test_table(a int, b char(8192));
select oid, relname from pg_class where relname='my_test_table';
-- oid = 16384
select oid, relname from pg_class where relname like '%16384%';
select typname, oid from pg_type where typname like '%my_test_table';
OID同步过程
OID同步原因:当创建表、视图、函数等对象时,对象需要分配新的OID。创建对象的OID全
局唯一,因此要在所有的coordinator和datanode上获取一个最大的OID。以create table为例,
具体流程如下:
1)首先和所有的dn及除自己以外的co建立连接。
2)向所有建立连接的节点发送获取OID请求,收到请求的节点,把本节点最大的OID发给coordinator。
3)coordinator节点收到其他几点发来的oid,选一个最大的oid,然后调用SetNextAssignObjectId
函数,使当前co节点下一个要分配的OID为集群中最大的OID。
4)然后才执行create语句,结构体CreateStmt中成员TableOidInfo用来存储获取的最大的
OID,当前coordiator把查询计划下发到其它节点,其它节点获取到最大OID后调用函数
heap_create_with_catalog,在自己节点上创建表
OID同步涉及到的系统表
pg_class
pg_namespace --create schema
pg_constraint
pg_operator
pg_ts_parser
pg_ts_dict
pg_ts_template
pg_ts_config
pg_collation
pg_am
pg_extension
pg_foreign_data_wrapper
pg_foreign_server
pg_user_mapping
pg_type
pg_enum
pg_proc
pg_rewrite
pg_trigger
pg_language
pg_conversion
pg_cast
pg_opfamily
pg_opclass
pg_tablespace
OID同步去除
当前实现可能存在问题是,当有节点或所有节点的OID回绕了,创建对象非常有可能失败。OID同步去除参考
PG-XL的做法,在查询计划中发送对象名,到节点上再转成本地OID。
笔记 postgresql oid同步的更多相关文章
- 运维笔记--postgresql占用CPU问题定位
运维笔记--postgresql占用CPU问题定位 场景描述: 业务系统访问变慢,登陆服务器查看系统负载并不高,然后查看占用CPU较高的进程,发现是连接数据库的几个进程占用系统资源较多. 处理方式: ...
- Linux内核设计笔记10——内核同步
Linux内核同步笔记 几个基本概念 - 临界区(critical region):访问和操作共享数据的代码段: - 原子操作:操作在执行中不被打断,要么不执行,要么执行完: - 竞争条件: 两个线程 ...
- 配置ogg从Oracle到PostgreSQL的同步复制json数据
标签:goldengate postgresql oracle json 测试环境说明 Oracle:Windows 8.1 + Oracle 12.2.0.1.0 + GoldenGate 12.3 ...
- PostgreSQL的同步级别与MySQL的半同步after_sync比较
MySQL的半同步中通过binlog进行流复制,同步级别和PostgreSQL对比可以发现: PostgreSQL MySQL off local ...
- postgresql主从同步配置
前言 不久前,公司的一台物理机器硬件坏了,导致运行在其上的虚拟机都挂了.很不凑巧的是,我负责的那台虚拟机的系统盘坏了(ps:感觉老天在玩我),导致里面的数据永远的离我而去(ps:当时我的内心是崩溃的) ...
- java笔记--关于线程同步(7种同步方式)
关于线程同步(7种方式) --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3897440.html"谢谢-- 为何要使用同步? ...
- java笔记--关于线程同步(5种同步方式)【转】
为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完 ...
- ASP.NET MVC5学习笔记之Controller同步执行架构分析
在开始之前,声明一下,由于ASP.NET MVC5正式发布了,后面的分析将基于ASP.NET MVC5最新的源代码.在前面的内容我们分析了怎样根据路由信息来确定Controller的类型,并最终生成C ...
- Android(java)学习笔记68:同步代码块 和 同步方法 的应用
1. 同步代码块 和 同步方法 代码示例: (1)目标类,如下: package cn.himi.text; public class SellTicket implements Runnable { ...
随机推荐
- 深入GDI图像显示
摘 要:本文首先给出了一种结合了DIB和DDB两种位图优点的图像显示方法,其次对GDI函数的高级应用,如透明位图显示.图像旋转显示.图像镜像显示进行了研究. 关键词:GDI图像显示,特殊GDI函数的 ...
- Delphi中运行时改变panel的位置及大小(WM_SysCommand消息配合参数使用,很奇妙) good
procedure TForm1.pnl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Inte ...
- css学习笔记三
总结一下水平居中和垂直居中的方法,欢迎交流指正,共同进步! 1.水平居中 1.1):行内元素水平居中,在其父类设置text-align:center; 1.2): 块级元素水平居中有三种 第一种:定宽 ...
- 基于Hadoop的大数据平台实施记——整体架构设计
大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底是否适用于您的组织,至少在互联网上已经被吹嘘成无所不能的超级战舰.好像一夜之间我们就从互联网时代跳跃进了大 ...
- 【leetcode边做边学】二分查找应用
很多其它请关注我的HEXO博客:http://jasonding1354.github.io/ 简书主页:http://www.jianshu.com/users/2bd9b48f6ea8/lates ...
- javaScript 工作必知(七) 对象继承
对象继承inherit var o = { r: 1 }; var c = function f() { }; c.prototype = o; c.r = 3; alert(o.r);//被继承的属 ...
- 试用cmd markdown
欢迎使用 Cmd Markdown 编辑阅读器 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 -- 我们为记录思想 ...
- JavaSE思维导图(五)
- isEmpty()
String a = new String(); 此时a是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已) String b = ""; 此时b是分配了内存空间, ...
- 监听器和web国际化
一.监听器 1.监听器:监听器就是一个java程序,功能是监听另一个java对象变化(方法调用.属性变更) 2.监听器监听过程:事件源.事件对象.监听器对象.操作事件源 1).存在被监听对象(事件源) ...