偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

UDB高可用數(shù)據(jù)庫內(nèi)核深度優(yōu)化

云計(jì)算
UDB是UCloud提供的云數(shù)據(jù)庫,支持實(shí)例級別的高可用。UCloud數(shù)據(jù)庫團(tuán)隊(duì)在數(shù)據(jù)庫原生復(fù)制的多個(gè)方面進(jìn)行了深度優(yōu)化,提升UDB高可用數(shù)據(jù)庫的功能和性能。

UDB是UCloud提供的云數(shù)據(jù)庫,支持實(shí)例級別的高可用。UCloud數(shù)據(jù)庫團(tuán)隊(duì)在數(shù)據(jù)庫原生復(fù)制的多個(gè)方面進(jìn)行了深度優(yōu)化,提升UDB高可用數(shù)據(jù)庫的功能和性能。

一、UDB高可用數(shù)據(jù)庫架構(gòu)

UDB高可用數(shù)據(jù)庫產(chǎn)品以虛擬IP、HAProxy、單節(jié)點(diǎn)UDB數(shù)據(jù)庫搭建雙節(jié)點(diǎn)高可用架構(gòu):

  • 雙節(jié)點(diǎn)的UDB數(shù)據(jù)庫保證數(shù)據(jù)庫數(shù)據(jù)的全量冗余,同時(shí)保證數(shù)據(jù)庫的可用性;
  • HAProxy在同一時(shí)間只連接一個(gè)UDB節(jié)點(diǎn),避免多點(diǎn)寫入帶來的數(shù)據(jù)沖突問題;
  • 雙節(jié)點(diǎn)HAProxy保證Proxy的可用性;
  • 虛擬IP在HAProxy發(fā)生宕機(jī)時(shí)通過IP漂移的方式對HAProxy進(jìn)行切換,用戶不需要再次修改IP。

在上述架構(gòu)中,從節(jié)點(diǎn)UDB的數(shù)據(jù)是否完整、是否與主庫保證數(shù)據(jù)一致性是整個(gè)高可用架構(gòu)的關(guān)鍵,所以用于數(shù)據(jù)傳輸?shù)陌胪綇?fù)制起著至關(guān)重要的作用。針對原生的半同步復(fù)制,UDB數(shù)據(jù)庫作了內(nèi)核層面的深度優(yōu)化。

二、UDB數(shù)據(jù)庫深度優(yōu)化

UDB數(shù)據(jù)庫產(chǎn)品是以開源數(shù)據(jù)庫MySQL Community Server 5.7.16為基線版本,圍繞高可用架構(gòu)做內(nèi)核深度優(yōu)化。

復(fù)制流程,如上圖所示,主要經(jīng)過如下幾個(gè)步驟:

  • MySQL Server執(zhí)行SQL成功后,記錄binlog;
  • Dump線程讀取binlog后,發(fā)送到從機(jī)IO線程;
  • IO線程將接收到的binlog記錄到relay log中,同時(shí)記錄接收進(jìn)度到master.info中;
  • SQL讀取relay log中的日志內(nèi)容進(jìn)行復(fù)現(xiàn),同時(shí)記錄復(fù)制日志的進(jìn)度到relay-log.info中。

我們在原生復(fù)制的基礎(chǔ)上做了內(nèi)核的深度優(yōu)化,針對上述流程中的部分步驟,在功能和性能上做了改進(jìn),使得 UDB高可用數(shù)據(jù)庫產(chǎn)品更加穩(wěn)定。

2.1 Relay log文件記錄的優(yōu)化

2.1.1 存在的問題

在MySQL中,binlog是以event為基本單位進(jìn)行記錄,以MySQL 5.7 ROW格式(開啟GTID)的binlog為例,一個(gè)DML(insert)會(huì)以5個(gè)event的格式記錄到binlog中(其他操作均以一個(gè)或者多個(gè)event組成,不再一一羅列),分別為:

  • GTID_EVENT:記錄當(dāng)前事務(wù)的GTID
  • QUERY_EVENT:事務(wù)開始
  • TABLE_MAP_EVENT:操作對應(yīng)的表
  • WRITE_ROW_EVENT:插入記錄
  • XID_EVENT:提交事務(wù)

全部event組成一個(gè)完整的事務(wù),完整的事務(wù)才會(huì)被SQL線程正確復(fù)現(xiàn)到從庫上。當(dāng)前IO線程接收binlog時(shí),是以event為單位進(jìn)行接收,即接收到一個(gè)event,記錄到relay log中后再繼續(xù)接收下一個(gè)。這種做法是低效的,也沒有充分利用到MySQL本身的文件緩存。

2.1.2 優(yōu)化方案

優(yōu)化IO線程記錄relay log的方式,將以event為單位記錄,修改為以事務(wù)為單位進(jìn)行記錄。合并IO線程小的IO操作,提高IO性能。

將單個(gè)的event寫操作合并為多個(gè)event統(tǒng)一寫操作,將小的IO操作合并成較大的IO操作,提高IO性能。

2.2 Master.info文件記錄的優(yōu)化

2.2.1 存在的問題

Master.info文件在搭建復(fù)制時(shí),記錄主庫IP、PORT等連接主庫的相關(guān)信息,在復(fù)制過程中,記錄IO線程從主庫接收到的binlog的文件名和位置,文件和位置會(huì)在每次記錄relay log成功后更新。

在基于GTID搭建復(fù)制后,master.info中記錄的binlog文件和位置不再作為復(fù)制的依據(jù),所以master.info中記錄的binlog的文件和位置不再是有效的數(shù)據(jù),也就沒有必要每次進(jìn)行更新。

2.2.2 優(yōu)化方案

在IO線程記錄relay log成功后,更新master.info文件之前,添加判斷。如果開啟了GTID并且使用GTID作為復(fù)制的依據(jù)(auto_position=1),那么不再更新master.info中binlog的文件和位置。

其它的master.info操作仍然保留,如change master、shutdown等操作。

2.3 Relay log鎖的優(yōu)化

2.3.1 存在的問題

在IO線程和SQL線程復(fù)制進(jìn)度相似的情況下,在操作relay log時(shí),會(huì)使用同一塊文件緩存,在讀寫文件緩存時(shí),需要加鎖來保證操作的正確性。而IO線程和SQL線程需要頻繁地讀寫這塊公共內(nèi)存,就需要對同一把鎖頻繁的競爭,從而導(dǎo)致性能下降。

2.3.2 優(yōu)化方案

將IO線程和SQL線程對relay log的操作拆分開來,不再使用同一塊文件緩存。雖然這樣做會(huì)導(dǎo)致SQL線程增加一次讀IO操作。但是消除了對鎖的競爭,大大地提高了IO線程和SQL線程整體的性能。

三、總結(jié)

優(yōu)化后的復(fù)制流程圖如下:

數(shù)據(jù)庫原生復(fù)制流程中包括記錄binlog、記錄relay log、記錄master.info、relay-log.info等,針對上述流程中的部分步驟以及其他未列出的優(yōu)化,在功能和性能上進(jìn)行改進(jìn),UDB高可用數(shù)據(jù)庫在功能和性能上均得到了明顯的提升,UDB高可用數(shù)據(jù)庫可以提供更加可靠、高效的服務(wù)。

責(zé)任編輯:趙寧寧 來源: ucloud博客
相關(guān)推薦

2017-08-25 09:50:42

數(shù)據(jù)庫MySQL內(nèi)核優(yōu)化

2022-10-30 15:16:16

DML語句元組

2023-11-17 07:16:01

2019-11-19 08:32:26

數(shù)據(jù)庫HLC事務(wù)

2024-03-27 12:14:56

數(shù)據(jù)庫高可用GDS

2011-03-09 08:53:02

MySQL優(yōu)化集群

2013-01-22 15:35:19

UCSRAC數(shù)據(jù)中心

2024-04-03 09:27:49

后端開發(fā)數(shù)據(jù)庫內(nèi)核

2021-06-23 06:58:29

12306系統(tǒng)MySQL高可用預(yù)扣庫存

2010-10-28 15:37:36

高可用架構(gòu)

2015-05-04 14:17:16

數(shù)據(jù)庫架構(gòu)高可用

2024-09-13 08:59:20

2013-09-09 09:39:02

云數(shù)據(jù)庫京東云

2010-08-02 16:38:39

DB2 UDB for

2017-03-15 15:14:03

MySQL數(shù)據(jù)庫高可用性

2021-01-21 10:23:43

數(shù)據(jù)庫架構(gòu)技術(shù)

2012-05-29 18:05:00

2019-09-06 08:53:32

數(shù)據(jù)庫高可用容災(zāi)

2009-03-23 10:32:47

SQLServer數(shù)據(jù)庫數(shù)據(jù)類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號