PostgreSQL源码定制:在线global read only
基于某云上功能需求,最近实现了类似于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);
session 1:尝试将PG实例设置为global read only。此时可以看到,不能设置为”Read Only“状态,设置”Read Only”操作没有返回。
原因为 session 2并没有提交。这个符合我们的设计初衷,就是read only设置成功返回时,数据库为一致状态,此后没有user 级别写事务。
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为准,进行主备一致性切换。
上面完全实现了在线更改PG实例read only状态。我们再将实例在线改回到read write。是不是非常方便呢?
------------------------------------华丽丽的分割线------------------------------------
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 的下载地址:请点这里
本文永久更新链接地址:

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

MySQL et PostgreSQL : meilleures pratiques en matière de développement Web Introduction : dans le monde moderne du développement Web, les bases de données sont un composant essentiel. Lors du choix d'une base de données, les choix courants sont MySQL et PostgreSQL. Cet article couvrira les meilleures pratiques d'utilisation de MySQL et PostgreSQL dans le développement Web et fournira quelques exemples de code. 1. Scénarios applicables MySQL convient à la plupart des applications Web, en particulier celles qui nécessitent des performances élevées, une évolutivité et une facilité d'utilisation.

MySQL et PostgreSQL : comparaison des performances et conseils d'optimisation Lors du développement d'applications Web, la base de données est un composant indispensable. Lors du choix d'un système de gestion de base de données, MySQL et PostgreSQL sont deux choix courants. Ce sont tous deux des systèmes de gestion de bases de données relationnelles (SGBDR) open source, mais il existe certaines différences en termes de performances et d'optimisation. Cet article comparera les performances de MySQL et PostgreSQL et fournira quelques conseils d'optimisation. Comparaison des performances comparant deux gestions de bases de données

Apprenez les fonctions de la base de données dans le langage Go et implémentez les opérations d'ajout, de suppression, de modification et d'interrogation des données PostgreSQL. Dans le développement de logiciels modernes, la base de données est un élément indispensable. En tant que langage de programmation puissant, le langage Go fournit une multitude de fonctions et de boîtes à outils d'exploitation de base de données, qui peuvent facilement mettre en œuvre des opérations d'ajout, de suppression, de modification et d'interrogation de la base de données. Cet article explique comment apprendre les fonctions de base de données en langage Go et utiliser la base de données PostgreSQL pour les opérations réelles. Étape 1 : Installez le pilote de base de données en langage Go pour chaque base de données

MySQL et PostgreSQL : sécurité des données et stratégies de sauvegarde Introduction : Dans la société moderne, les données sont devenues un élément indispensable de la vie professionnelle et personnelle. Pour les systèmes de gestion de bases de données, la sécurité des données et les stratégies de sauvegarde sont cruciales, à la fois pour protéger les données contre la perte ou l’endommagement et pour garantir la fiabilité et l’intégrité des données récupérées. Cet article se concentrera sur les stratégies de sécurité et de sauvegarde des données de deux systèmes de bases de données relationnelles grand public, MySQL et PostgreSQL. 1. Sécurité des données : (1) Droits des utilisateurs

Le langage Go est un langage de programmation rapide et efficace adapté à la création de services Web et d'applications back-end. PostgreSQL est un système de gestion de base de données relationnelle open source qui promet d'offrir une fiabilité, une évolutivité et une sécurité des données supérieures. Dans cet article, nous allons approfondir l'utilisation de PostgreSQL avec Go et fournir des exemples de code et des conseils pratiques. Installation et configuration de PostgreSQL Tout d'abord, nous devons installer et configurer PostgreSQL. Peut être trouvé sur le site officiel

Avec le développement de la technologie des bases de données, les systèmes de gestion de bases de données présentent également une variété de choix. Les développeurs peuvent choisir la base de données la plus adaptée en fonction de leurs besoins et préférences. En tant que système de base de données relationnelle open source avancé, PostgreSQL attire de plus en plus l'attention et l'utilisation des développeurs. Alors, comment utiliser la base de données PostgreSQL en programmation PHP ? 1. Installez et configurez la base de données PostgreSQL Avant d'utiliser PostgreSQL, vous devez l'installer et la configurer. d'abord

MySQL et PostgreSQL : Comment optimiser les performances des requêtes de base de données ? Présentation : les performances des requêtes de base de données sont une considération importante lors du développement d'applications. De bonnes performances de requête améliorent la réactivité des applications et l’expérience utilisateur. Cet article présentera quelques méthodes pour optimiser les performances des requêtes de base de données, en se concentrant sur deux bases de données couramment utilisées, MySQL et PostgreSQL. Optimisation des index de base de données : les index de base de données sont un facteur important dans l'amélioration des performances des requêtes. Les index peuvent accélérer la recherche de données et réduire le temps d'analyse des requêtes.

Avec le développement d’Internet, la quantité de données ne cesse de croître et le besoin de gestion des données devient de plus en plus urgent. Les bases de données relationnelles sont un moyen important de gestion de données, parmi lequel PostgreSQL est populaire pour sa flexibilité, son évolutivité et sa sécurité. Cet article présente comment utiliser le langage PHP pour implémenter une base de données relationnelle PostgreSQL open source. J'espère qu'il sera utile aux développeurs ayant les besoins correspondants. Présentation PostgreSQL est un puissant système de base de données relationnelle qui suit le standard SQL et possède de nombreux
