Heim Datenbank MySQL-Tutorial 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 的下载地址:请点这里

本文永久更新链接地址

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MySQL und PostgreSQL: Best Practices in der Webentwicklung MySQL und PostgreSQL: Best Practices in der Webentwicklung Jul 14, 2023 pm 02:34 PM

MySQL und PostgreSQL: Best Practices in der Webentwicklung Einführung: In der modernen Welt der Webentwicklung sind Datenbanken ein wesentlicher Bestandteil. Bei der Auswahl einer Datenbank werden häufig MySQL und PostgreSQL gewählt. In diesem Artikel werden Best Practices für die Verwendung von MySQL und PostgreSQL in der Webentwicklung behandelt und einige Codebeispiele bereitgestellt. 1. Anwendbare Szenarien MySQL eignet sich für die meisten Webanwendungen, insbesondere für solche, die hohe Leistung, Skalierbarkeit und Benutzerfreundlichkeit erfordern.

MySQL und PostgreSQL: Leistungsvergleich und Optimierungstipps MySQL und PostgreSQL: Leistungsvergleich und Optimierungstipps Jul 13, 2023 pm 03:33 PM

MySQL und PostgreSQL: Leistungsvergleich und Optimierungstipps Bei der Entwicklung von Webanwendungen ist die Datenbank ein unverzichtbarer Bestandteil. Bei der Auswahl eines Datenbankverwaltungssystems sind MySQL und PostgreSQL zwei gängige Optionen. Bei beiden handelt es sich um relationale Open-Source-Datenbankverwaltungssysteme (RDBMS), es gibt jedoch einige Unterschiede in der Leistung und Optimierung. In diesem Artikel wird die Leistung von MySQL und PostgreSQL verglichen und einige Optimierungstipps gegeben. Leistungsvergleich im Vergleich zweier Datenbankverwaltungen

Erlernen Sie Datenbankfunktionen in der Go-Sprache und implementieren Sie Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgänge für PostgreSQL-Daten Erlernen Sie Datenbankfunktionen in der Go-Sprache und implementieren Sie Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgänge für PostgreSQL-Daten Jul 31, 2023 pm 12:54 PM

Erlernen Sie die Datenbankfunktionen in der Go-Sprache und implementieren Sie das Hinzufügen, Löschen, Ändern und Abfragen von PostgreSQL-Daten. In der modernen Softwareentwicklung ist die Datenbank ein unverzichtbarer Bestandteil. Als leistungsstarke Programmiersprache bietet die Go-Sprache eine Fülle von Datenbankbetriebsfunktionen und Toolkits, mit denen sich problemlos Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgänge der Datenbank implementieren lassen. In diesem Artikel erfahren Sie, wie Sie Datenbankfunktionen in der Go-Sprache erlernen und die PostgreSQL-Datenbank für tatsächliche Vorgänge verwenden. Schritt 1: Installieren Sie den Datenbanktreiber in der Go-Sprache für jede Datenbank

MySQL und PostgreSQL: Datensicherheits- und Sicherungsstrategien MySQL und PostgreSQL: Datensicherheits- und Sicherungsstrategien Jul 13, 2023 pm 03:31 PM

MySQL und PostgreSQL: Datensicherheit und Backup-Strategien Einführung: In der modernen Gesellschaft sind Daten zu einem unverzichtbaren Bestandteil des Geschäfts- und Privatlebens geworden. Für Datenbankverwaltungssysteme sind Datensicherheit und Backup-Strategien von entscheidender Bedeutung, um sowohl Daten vor Verlust oder Beschädigung zu schützen als auch die Zuverlässigkeit und Integrität wiederhergestellter Daten sicherzustellen. Dieser Artikel konzentriert sich auf die Datensicherheits- und Sicherungsstrategien zweier gängiger relationaler Datenbanksysteme, MySQL und PostgreSQL. 1. Datensicherheit: (1) Rechte des Nutzers

Verwenden von PostgreSQL in Go: Die vollständige Anleitung Verwenden von PostgreSQL in Go: Die vollständige Anleitung Jun 18, 2023 am 09:28 AM

Die Go-Sprache ist eine schnelle und effiziente Programmiersprache, die sich zum Erstellen von Webdiensten und Back-End-Anwendungen eignet. PostgreSQL ist ein relationales Open-Source-Datenbankverwaltungssystem, das eine höhere Zuverlässigkeit, Skalierbarkeit und Datensicherheit verspricht. In diesem Artikel befassen wir uns ausführlich mit der Verwendung von PostgreSQL in Go und geben einige praktische Codebeispiele und Tipps. PostgreSQL installieren und einrichten Zuerst müssen wir PostgreSQL installieren und einrichten. Zu finden auf der offiziellen Website

Wie verwende ich die PostgreSQL-Datenbank in der PHP-Programmierung? Wie verwende ich die PostgreSQL-Datenbank in der PHP-Programmierung? Jun 12, 2023 am 09:27 AM

Mit der Entwicklung der Datenbanktechnologie bieten Datenbankverwaltungssysteme auch eine Vielzahl von Möglichkeiten. Entwickler können entsprechend ihren Anforderungen und Vorlieben die am besten geeignete Datenbank auswählen. Als fortschrittliches relationales Open-Source-Datenbanksystem erregt PostgreSQL bei Entwicklern immer mehr Aufmerksamkeit und Nutzung. Wie nutzt man also die PostgreSQL-Datenbank in der PHP-Programmierung? 1. Installieren und konfigurieren Sie die PostgreSQL-Datenbank. Bevor Sie PostgreSQL verwenden können, müssen Sie diese zunächst installieren und konfigurieren. Erste

MySQL und PostgreSQL: Wie optimiert man die Leistung von Datenbankabfragen? MySQL und PostgreSQL: Wie optimiert man die Leistung von Datenbankabfragen? Jul 12, 2023 pm 03:15 PM

MySQL und PostgreSQL: Wie optimiert man die Leistung von Datenbankabfragen? Überblick: Die Leistung von Datenbankabfragen ist ein wichtiger Gesichtspunkt bei der Entwicklung von Anwendungen. Eine gute Abfrageleistung verbessert die Reaktionsfähigkeit der Anwendung und das Benutzererlebnis. In diesem Artikel werden einige Methoden zur Optimierung der Datenbankabfrageleistung vorgestellt, wobei der Schwerpunkt auf zwei häufig verwendeten Datenbanken liegt: MySQL und PostgreSQL. Optimierung von Datenbankindizes: Datenbankindizes sind ein wichtiger Faktor zur Verbesserung der Abfrageleistung. Indizes können die Datensuche beschleunigen und die Zeit für das Scannen von Abfragen verkürzen.

PHP implementiert die relationale Open-Source-PostgreSQL-Datenbank PHP implementiert die relationale Open-Source-PostgreSQL-Datenbank Jun 18, 2023 am 08:40 AM

Mit der Entwicklung des Internets wachsen die Datenmengen immer weiter und der Bedarf an Datenmanagement wird immer dringlicher. Relationale Datenbanken sind eine wichtige Methode der Datenverwaltung, wobei PostgreSQL aufgrund seiner Flexibilität, Skalierbarkeit und Sicherheit beliebt ist. In diesem Artikel wird erläutert, wie Sie die PHP-Sprache zum Implementieren einer relationalen Open-Source-PostgreSQL-Datenbank verwenden. Ich hoffe, dass er für Entwickler mit entsprechenden Anforderungen hilfreich ist. Überblick PostgreSQL ist ein leistungsstarkes relationales Datenbanksystem, das dem SQL-Standard folgt und über viele davon verfügt

See all articles