데이터 베이스 MySQL 튜토리얼 PostgreSQL源码定制:在线global read only

PostgreSQL源码定制:在线global read only

Jun 07, 2016 pm 04:00 PM
postgresql

基于某云上功能需求,最近实现了类似于MySQL global read only的功能。PG的read only功能,也不再需要通过重起PG实现来实现。直接

基于某云上功能需求,最近实现了类似于MySQL global read only的功能。PG的read only功能,也不再需要通过重起PG实现来实现。直接可以online更改PG实例级别

global read only 和 global read write功能, 以达到快速实现主备切换的功能。大大缩短了主备切换时间,提高了PG的高可性。弥补了PG在这一功能上的不足。

此次通过源码定制更改实现的PG版本global read only有许多明显的优势:

1.在设置global read only时,新的查询不会被堵

新进来session,read only直接生效,不需要重起PG实例。并用在设置global read only时,不会堵住新会话。因此避免了连接拥堵现象。

2.正在跑的事务,分级别对待

a.如果是事务块,也就是用户发起的”BEGIN”语句,那么已经执行完毕的语句不受影响。对于此事务中后面执行的语句,会受read only约束,不能执行DML操作。本事务会被终止。

b.如果是正在跑的语句,比如说有一个大的insert或者update。那么此操作不会受影响,设置 global read only需要等待此操作完成后,才返回。

global read only操作会等待所有running 的DML操作完成,并且做完”Immediate Checkpoint”后,再返回响应。这样做的理由是为了确保数据库状态的一致性。

尤其是在主备切换的情况下,更为关键和重要。

3.中断处理

如果在设置 global read only时失败,那么会被回滚,会被重新置为read write状态。

下面展示下源码patch实现结果:

session 1:查看当前数据库read only状态,显示当前为”Read Write”状态,即PG实例级别可以读写。

session 2:起事务,事务中为两个insert语句。我们先执行一个insert语句,但是不提交事务。

表创建语句:

create table grl_test (id int);

begin;

insert into grl_test values(1);

PostgreSQL源码定制:在线global read only

session 1:尝试将PG实例设置为global read only。此时可以看到,不能设置为”Read Only“状态,设置”Read Only”操作没有返回。

原因为 session 2并没有提交。这个符合我们的设计初衷,就是read only设置成功返回时,数据库为一致状态,此后没有user 级别写事务。

PostgreSQL源码定制:在线global read only

session 2:尝试发起第二条insert语句。可以看到insert失败了。原因为session 1尝试设置为 global read only时,虽然操作没有返回,

但是新的任何DML操作以及新的事务已经被约束为read only状态。不允许新的写事务容易理解,但是为什么不允许之前已经发起的事务中,,不能DML操作呢?

这样做的原因是:

我们不想让先于设置read only之前的事务块,无限制的跑下去。这会让设置global read only的操作一直进行下去。如果read only设置不成功,

直接影响到主备的快速切换。细心的同学可能会发现,这只限于事务块。的确如此,事务块与一般事务的区别,请见我另外一篇文章”PostgreSQL 事务模型介绍“。

因为一般事务,只在command级别,跑完就结束了。我们可以等待,一般用户也容易理解,如果我们强行终止此类操作,会对应用影响比较大。一般command

级别的事务总是非常快的结束,尤其在OLTP系统中,基本上都是简单的command级别事务。事务块一般逻辑比较复杂,有这一限制,也是为了数据一致性考虑,

失败了,顶多重新跑就行了。总体上来讲,这也是基于目前市面上OLTP类应用系统的现实需求而定制的。

insert into grl_test values(2);

session 1:此时我们再来看session 1时,设置global read only已经成功了。session 2因为第二个命令违背了read only,导致事务被终止了。因此,也就再没有

running transaction了。global read only设置完成后,checkpoint向前推。我们就可以以此checkpoint为准,进行主备一致性切换。

PostgreSQL源码定制:在线global read only

上面完全实现了在线更改PG实例read only状态。我们再将实例在线改回到read write。是不是非常方便呢?

PostgreSQL源码定制:在线global read only

------------------------------------华丽丽的分割线------------------------------------

CentOS 6.3环境下yum安装PostgreSQL 9.3

PostgreSQL缓存详述

Windows平台编译 PostgreSQL

Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)环境的配置与安装

Ubuntu上的phppgAdmin安装及配置

CentOS平台下安装PostgreSQL9.3

PostgreSQL配置Streaming Replication集群

如何在CentOS 7/6.5/6.4 下安装PostgreSQL 9.3 与 phpPgAdmin 

------------------------------------华丽丽的分割线------------------------------------

PostgreSQL 的详细介绍:请点这里
PostgreSQL 的下载地址:请点这里

本文永久更新链接地址

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

MySQL 및 PostgreSQL: 웹 개발 모범 사례 MySQL 및 PostgreSQL: 웹 개발 모범 사례 Jul 14, 2023 pm 02:34 PM

MySQL 및 PostgreSQL: 웹 개발 모범 사례 소개: 현대 웹 개발 세계에서 데이터베이스는 필수 구성 요소입니다. 데이터베이스를 선택할 때 일반적인 선택은 MySQL과 PostgreSQL입니다. 이 문서에서는 웹 개발에 MySQL 및 PostgreSQL을 사용하는 모범 사례를 다루고 몇 가지 코드 예제를 제공합니다. 1. 적용 가능한 시나리오 MySQL은 대부분의 웹 애플리케이션, 특히 고성능, 확장성 및 사용 용이성을 요구하는 애플리케이션에 적합합니다.

MySQL 및 PostgreSQL: 성능 비교 및 ​​최적화 팁 MySQL 및 PostgreSQL: 성능 비교 및 ​​최적화 팁 Jul 13, 2023 pm 03:33 PM

MySQL 및 PostgreSQL: 성능 비교 및 ​​최적화 팁 웹 애플리케이션을 개발할 때 데이터베이스는 필수적인 구성 요소입니다. 데이터베이스 관리 시스템을 선택할 때 MySQL과 PostgreSQL은 두 가지 일반적인 선택입니다. 둘 다 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)이지만 성능과 최적화에는 약간의 차이가 있습니다. 이 기사에서는 MySQL과 PostgreSQL의 성능을 비교하고 몇 가지 최적화 팁을 제공합니다. 두 데이터베이스 관리를 비교한 성능 비교

Go 언어로 데이터베이스 기능을 배우고 PostgreSQL 데이터의 추가, 삭제, 수정 및 쿼리 작업을 구현합니다. Go 언어로 데이터베이스 기능을 배우고 PostgreSQL 데이터의 추가, 삭제, 수정 및 쿼리 작업을 구현합니다. Jul 31, 2023 pm 12:54 PM

Go 언어의 데이터베이스 기능을 배우고 PostgreSQL 데이터의 추가, 삭제, 수정 및 쿼리 작업을 구현합니다. 현대 소프트웨어 개발에서 데이터베이스는 없어서는 안 될 부분입니다. 강력한 프로그래밍 언어인 Go 언어는 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 쉽게 구현할 수 있는 풍부한 데이터베이스 작업 기능과 툴킷을 제공합니다. 이번 글에서는 Go 언어로 데이터베이스 기능을 익히고 PostgreSQL 데이터베이스를 실제 작업에 활용하는 방법을 소개합니다. 1단계: 각 데이터베이스에 대해 Go 언어로 데이터베이스 드라이버 설치

Go에서 PostgreSQL 사용: 전체 가이드 Go에서 PostgreSQL 사용: 전체 가이드 Jun 18, 2023 am 09:28 AM

Go 언어는 웹 서비스 및 백엔드 애플리케이션 구축에 적합한 빠르고 효율적인 프로그래밍 언어입니다. PostgreSQL은 더 높은 신뢰성, 확장성 및 데이터 보안을 제공하는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 이 글에서는 Go에서 PostgreSQL을 사용하는 방법에 대해 자세히 알아보고 몇 가지 실용적인 코드 예제와 팁을 제공하겠습니다. PostgreSQL 설치 및 설정 먼저 PostgreSQL을 설치하고 설정해야 합니다. 공식 홈페이지에서 확인 가능

MySQL 및 PostgreSQL: 데이터 보안 및 백업 전략 MySQL 및 PostgreSQL: 데이터 보안 및 백업 전략 Jul 13, 2023 pm 03:31 PM

MySQL 및 PostgreSQL: 데이터 보안 및 백업 전략 소개: 현대 사회에서 데이터는 비즈니스와 개인 생활에서 없어서는 안 될 부분이 되었습니다. 데이터베이스 관리 시스템의 경우 데이터 손실이나 손상으로부터 데이터를 보호하고 복구된 데이터의 신뢰성과 무결성을 보장하기 위해 데이터 보안 및 백업 전략이 중요합니다. 이 기사에서는 두 가지 주류 관계형 데이터베이스 시스템인 MySQL과 PostgreSQL의 데이터 보안 및 백업 전략에 중점을 둘 것입니다. 1. 데이터 보안: (1) 사용자 권리

PHP 프로그래밍에서 PostgreSQL 데이터베이스를 사용하는 방법은 무엇입니까? PHP 프로그래밍에서 PostgreSQL 데이터베이스를 사용하는 방법은 무엇입니까? Jun 12, 2023 am 09:27 AM

데이터베이스 기술의 발전으로 데이터베이스 관리 시스템도 다양한 선택을 제시합니다. 개발자는 자신의 필요와 선호도에 따라 가장 적합한 데이터베이스를 선택할 수 있습니다. 고급 오픈 소스 관계형 데이터베이스 시스템인 PostgreSQL은 개발자들의 관심과 사용이 점점 더 늘어나고 있습니다. 그렇다면 PHP 프로그래밍에서 PostgreSQL 데이터베이스를 어떻게 사용합니까? 1. PostgreSQL 데이터베이스를 설치하고 구성하려면 PostgreSQL을 설치하고 구성해야 합니다. 첫 번째

MySQL 및 PostgreSQL: 데이터베이스 쿼리 성능을 최적화하는 방법은 무엇입니까? MySQL 및 PostgreSQL: 데이터베이스 쿼리 성능을 최적화하는 방법은 무엇입니까? Jul 12, 2023 pm 03:15 PM

MySQL 및 PostgreSQL: 데이터베이스 쿼리 성능을 최적화하는 방법은 무엇입니까? 개요: 데이터베이스 쿼리 성능은 애플리케이션을 개발할 때 중요한 고려 사항입니다. 좋은 쿼리 성능은 애플리케이션 응답성과 사용자 경험을 향상시킵니다. 이 기사에서는 일반적으로 사용되는 두 가지 데이터베이스인 MySQL과 PostgreSQL을 중심으로 데이터베이스 쿼리 성능을 최적화하는 몇 가지 방법을 소개합니다. 데이터베이스 인덱스 최적화: 데이터베이스 인덱스는 쿼리 성능을 향상시키는 데 중요한 요소입니다. 인덱스는 데이터 검색 속도를 높이고 쿼리 검색 시간을 줄일 수 있습니다.

PHP는 오픈 소스 PostgreSQL 관계형 데이터베이스를 구현합니다. PHP는 오픈 소스 PostgreSQL 관계형 데이터베이스를 구현합니다. Jun 18, 2023 am 08:40 AM

인터넷의 발달로 인해 데이터의 양은 계속해서 증가하고 있으며, 데이터 관리의 필요성이 점점 더 시급해지고 있습니다. 관계형 데이터베이스는 데이터 관리의 중요한 방법이며, 그 중 PostgreSQL은 유연성, 확장성 및 보안으로 인해 인기가 높습니다. 이 기사에서는 PHP 언어를 사용하여 오픈 소스 PostgreSQL 관계형 데이터베이스를 구현하는 방법을 소개합니다. 해당 요구 사항이 있는 개발자에게 도움이 되기를 바랍니다. 개요 PostgreSQL은 SQL 표준을 따르며 다양한 기능을 갖춘 강력한 관계형 데이터베이스 시스템입니다.

See all articles