Rumah pangkalan data tutorial 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 的下载地址:请点这里

本文永久更新链接地址

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

MySQL dan PostgreSQL: Amalan Terbaik dalam Pembangunan Web MySQL dan PostgreSQL: Amalan Terbaik dalam Pembangunan Web Jul 14, 2023 pm 02:34 PM

MySQL dan PostgreSQL: Amalan Terbaik dalam Pembangunan Web Pengenalan: Dalam dunia moden pembangunan web, pangkalan data merupakan komponen penting. Apabila memilih pangkalan data, pilihan biasa ialah MySQL dan PostgreSQL. Artikel ini akan merangkumi amalan terbaik untuk menggunakan MySQL dan PostgreSQL dalam pembangunan web dan menyediakan beberapa contoh kod. 1. Senario yang boleh digunakan MySQL sesuai untuk kebanyakan aplikasi web, terutamanya yang memerlukan prestasi tinggi, kebolehskalaan dan kemudahan penggunaan.

MySQL dan PostgreSQL: Perbandingan prestasi dan petua pengoptimuman MySQL dan PostgreSQL: Perbandingan prestasi dan petua pengoptimuman Jul 13, 2023 pm 03:33 PM

MySQL dan PostgreSQL: Perbandingan Prestasi dan Petua Pengoptimuman Semasa membangunkan aplikasi web, pangkalan data adalah komponen yang sangat diperlukan. Apabila memilih sistem pengurusan pangkalan data, MySQL dan PostgreSQL adalah dua pilihan biasa. Kedua-duanya ialah sistem pengurusan pangkalan data hubungan sumber terbuka (RDBMS), tetapi terdapat beberapa perbezaan dalam prestasi dan pengoptimuman. Artikel ini akan membandingkan prestasi MySQL dan PostgreSQL dan memberikan beberapa petua pengoptimuman. Perbandingan prestasi membandingkan dua pengurusan pangkalan data

Pelajari fungsi pangkalan data dalam bahasa Go dan laksanakan operasi penambahan, pemadaman, pengubahsuaian dan pertanyaan data PostgreSQL Pelajari fungsi pangkalan data dalam bahasa Go dan laksanakan operasi penambahan, pemadaman, pengubahsuaian dan pertanyaan data PostgreSQL Jul 31, 2023 pm 12:54 PM

Pelajari fungsi pangkalan data dalam bahasa Go dan laksanakan operasi penambahan, pemadaman, pengubahsuaian dan pertanyaan data PostgreSQL Dalam pembangunan perisian moden, pangkalan data adalah bahagian yang amat diperlukan. Sebagai bahasa pengaturcaraan yang berkuasa, bahasa Go menyediakan pelbagai fungsi operasi pangkalan data dan kit alat, yang boleh melaksanakan operasi penambahan, pemadaman, pengubahsuaian dan pertanyaan pangkalan data dengan mudah. Artikel ini akan memperkenalkan cara mempelajari fungsi pangkalan data dalam bahasa Go dan menggunakan pangkalan data PostgreSQL untuk operasi sebenar. Langkah 1: Pasang pemacu pangkalan data dalam bahasa Go untuk setiap pangkalan data

Menggunakan PostgreSQL dalam Go: Panduan Lengkap Menggunakan PostgreSQL dalam Go: Panduan Lengkap Jun 18, 2023 am 09:28 AM

Bahasa Go ialah bahasa pengaturcaraan yang pantas dan cekap sesuai untuk membina perkhidmatan web dan aplikasi bahagian belakang. PostgreSQL ialah sistem pengurusan pangkalan data hubungan sumber terbuka yang menjanjikan untuk memberikan kebolehpercayaan, skalabiliti dan keselamatan data yang lebih tinggi. Dalam artikel ini, kami akan mendalami penggunaan PostgreSQL dalam Go dan memberikan beberapa contoh dan petua kod praktikal. Memasang dan menyediakan PostgreSQL Pertama, kita perlu memasang dan menyediakan PostgreSQL. Boleh didapati di laman web rasmi

MySQL dan PostgreSQL: Keselamatan Data dan Strategi Sandaran MySQL dan PostgreSQL: Keselamatan Data dan Strategi Sandaran Jul 13, 2023 pm 03:31 PM

MySQL dan PostgreSQL: Keselamatan Data dan Strategi Sandaran Pengenalan: Dalam masyarakat moden, data telah menjadi bahagian penting dalam perniagaan dan kehidupan peribadi. Untuk sistem pengurusan pangkalan data, keselamatan data dan strategi sandaran adalah penting, kedua-duanya untuk melindungi data daripada kehilangan atau kerosakan dan untuk memastikan kebolehpercayaan dan integriti data yang dipulihkan. Artikel ini akan memberi tumpuan kepada keselamatan data dan strategi sandaran dua sistem pangkalan data hubungan arus perdana, MySQL dan PostgreSQL. 1. Keselamatan data: (1) Hak pengguna

Bagaimana untuk menggunakan pangkalan data PostgreSQL dalam pengaturcaraan PHP? Bagaimana untuk menggunakan pangkalan data PostgreSQL dalam pengaturcaraan PHP? Jun 12, 2023 am 09:27 AM

Dengan perkembangan teknologi pangkalan data, sistem pengurusan pangkalan data juga menyediakan pelbagai pilihan Pembangun boleh memilih pangkalan data yang paling sesuai mengikut keperluan dan pilihan mereka. Sebagai sistem pangkalan data hubungan sumber terbuka termaju, PostgreSQL semakin menarik perhatian dan penggunaan oleh pembangun. Jadi, bagaimana untuk menggunakan pangkalan data PostgreSQL dalam pengaturcaraan PHP? 1. Pasang dan konfigurasikan pangkalan data PostgreSQL Sebelum menggunakan PostgreSQL, anda perlu memasang dan mengkonfigurasinya. pertama

MySQL dan PostgreSQL: Bagaimana untuk mengoptimumkan prestasi pertanyaan pangkalan data? MySQL dan PostgreSQL: Bagaimana untuk mengoptimumkan prestasi pertanyaan pangkalan data? Jul 12, 2023 pm 03:15 PM

MySQL dan PostgreSQL: Bagaimana untuk mengoptimumkan prestasi pertanyaan pangkalan data? Gambaran Keseluruhan: Prestasi pertanyaan pangkalan data adalah pertimbangan penting semasa membangunkan aplikasi. Prestasi pertanyaan yang baik meningkatkan responsif aplikasi dan pengalaman pengguna. Artikel ini akan memperkenalkan beberapa kaedah untuk mengoptimumkan prestasi pertanyaan pangkalan data, memfokuskan pada dua pangkalan data yang biasa digunakan, MySQL dan PostgreSQL. Pengoptimuman indeks pangkalan data: Indeks pangkalan data merupakan faktor penting dalam meningkatkan prestasi pertanyaan. Indeks boleh mempercepatkan carian data dan mengurangkan masa pengimbasan pertanyaan.

PHP melaksanakan pangkalan data hubungan PostgreSQL sumber terbuka PHP melaksanakan pangkalan data hubungan PostgreSQL sumber terbuka Jun 18, 2023 am 08:40 AM

Dengan pembangunan Internet, jumlah data terus berkembang, dan keperluan untuk pengurusan data menjadi semakin mendesak. Pangkalan data perhubungan ialah cara pengurusan data yang penting, antaranya PostgreSQL popular untuk fleksibiliti, skalabiliti dan keselamatannya. Artikel ini memperkenalkan cara menggunakan bahasa PHP untuk melaksanakan pangkalan data hubungan PostgreSQL sumber terbuka Saya harap ia akan membantu pembangun dengan keperluan yang sepadan. Gambaran Keseluruhan PostgreSQL ialah sistem pangkalan data hubungan yang berkuasa yang mengikut standard SQL dan mempunyai banyak

See all articles