六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

8 分鐘了解 TDengine 的 WAL 機(jī)制

WAL(Write Ahead Log),是 TDengine Database 的一個(gè)重要的功能模塊,它可以實(shí)現(xiàn)數(shù)據(jù)的容錯(cuò)能力,保證數(shù)據(jù)的高可用。

聽著復(fù)雜,其實(shí)也很簡(jiǎn)單。對(duì)于關(guān)系型數(shù)據(jù)庫的使用者來說,它大概就相當(dāng)于 Oracle 中的 redolog ,MySQL 中的 binlog 和 redolog,里面記錄的是一切關(guān)于數(shù)據(jù)庫的更新修改操作。

Write Ahead Log 翻譯一下是“預(yù)寫日志”,含義就是:在數(shù)據(jù)寫入存儲(chǔ)之前,先按照時(shí)間順序在日志中做一下記錄,這樣就可以確保應(yīng)用能夠通過這個(gè)日志將數(shù)據(jù)庫恢復(fù)到任意的某個(gè)狀態(tài),即使數(shù)據(jù)庫因?yàn)閿嚯姷纫馔馐鹿叔礄C(jī),也能避免數(shù)據(jù)的丟失。

目前,TDengine Database 的社區(qū)版尚不支持將數(shù)據(jù)回滾到指定時(shí)間,如有需要,可以聯(lián)系我們的企業(yè)版團(tuán)隊(duì)來解決。

TDengine 中的 WAL 實(shí)現(xiàn)機(jī)制稍有特殊。它把 WAL 分為兩部分,一種是 mnode 目錄下的 WAL,一種是 vnode 目錄下的 WAL。(為了方便本文的閱讀,這里需要大家首先了解 TDengine 的基礎(chǔ)架構(gòu):管理節(jié)點(diǎn)(mnode)和虛擬數(shù)據(jù)節(jié)點(diǎn)(vnode)的概念

在 TDengine 的數(shù)據(jù)文件路徑下(默認(rèn)為/var/lib/taos),就可以看到上述目錄結(jié)構(gòu)。

目錄結(jié)構(gòu)

mnode 的 WAL 內(nèi)容是持久化在硬盤上的,作為最重要的管理節(jié)點(diǎn),它的 WAL 記錄著所有關(guān)于數(shù)據(jù)庫的 DDL 操作(比如創(chuàng)建刪除操作:create dnode,create account,create mnode,create user,create table, drop dnode ,drop table等,或者修改操作:alter database,alter table ,alter user等)

而 vnode 目錄下的 WAL 則主要負(fù)責(zé)記錄著寫入數(shù)據(jù)的操作,與此同時(shí)也記錄著對(duì)表的 DDL 操作,在觸發(fā)落盤后會(huì)清零。(這就是我們?cè)谥暗奈恼隆热纭?a href="http://www.fjzmyy.cn/2021/06/09/2445.html" target="_blank" rel="noreferrer noopener">存儲(chǔ)成本僅為OpenTSDB的1/10,TDengine的最大殺手锏竟然是什么?》——中經(jīng)常提及的部分,大家可以結(jié)合此文閱讀,以加深理解。)

之后,寫入 vnode 的時(shí)序數(shù)據(jù)會(huì)落盤到數(shù)據(jù)文件目錄 /vnode/vnodeX/tsdb/data 下面。而對(duì)于表的 DDL 操作(也就是表的元數(shù)據(jù))則會(huì)落盤到數(shù)據(jù)文件目錄/vnode/vnodeX/tsdb/meta文件中,如下所示:

落盤文件
vnode工作流程

上面的第二張圖是 vnode 的工作流程,從這里我們可以更清楚地看到時(shí)序數(shù)據(jù)和元數(shù)據(jù)是如何在寫滿三分之一的 buffer pool 后落地到磁盤的(一個(gè) meta 文件,一個(gè)數(shù)據(jù)文件組:.data、.head、.last文件)。

總結(jié)而言,mnode 通過 WAL 記錄了集群、用戶、數(shù)據(jù)庫以及表的元數(shù)據(jù)等信息。而 vnode 通過 WAL 記錄了數(shù)據(jù)和表的元數(shù)據(jù),并且會(huì)在落盤觸發(fā)后清零,而其記錄的表的元數(shù)據(jù)會(huì)被寫入到 meta 文件,時(shí)序數(shù)據(jù)會(huì)被寫入到 data 目錄。

在了解了 WAL 的作用后,接下來會(huì)衍生出細(xì)節(jié)的場(chǎng)景:

首先,WAL 是將數(shù)據(jù)庫數(shù)據(jù)更新操作按照時(shí)間順序追加更新的日志文件。數(shù)據(jù)庫進(jìn)程 taosd 在啟動(dòng)的時(shí)候會(huì)逐行讀取 mnode 下的 WAL 文件并操作,直到最后一行,才能順利啟動(dòng)服務(wù)。

這樣的構(gòu)造下,可能會(huì)導(dǎo)致這個(gè)問題出現(xiàn):

1. 當(dāng)累計(jì)的 DDL 操作過多時(shí),TDengine 的啟動(dòng)會(huì)變慢——那么要如何避免這種情況的發(fā)生呢?

首先,當(dāng)子表數(shù)量絕對(duì)大的時(shí)候,這個(gè)情況是沒法避免的。但是這是一個(gè)很大的數(shù)量級(jí),對(duì)于絕大多數(shù)用戶都是達(dá)不到的。

更容易出現(xiàn)的是這種情況:這個(gè)環(huán)境表數(shù)量并不是很多,但是卻充滿了頻繁的刪庫刪表重建表等操作。比如,創(chuàng)建一個(gè)十萬子表的超級(jí)表后刪掉,然后再重建這個(gè)超級(jí)表。等到數(shù)據(jù)庫啟動(dòng)加載 WAL 的時(shí)候,即便前面的 create table 和 drop table 都是無效的操作,但是還會(huì)被操作一遍,而且刪表操作本身在加載的時(shí)候也會(huì)更慢一些,從而大幅拖慢 TDengine 的啟動(dòng)速度。

因此,為了避免這種情況,生產(chǎn)環(huán)境上一定要慎重。尤其是要盡量杜絕刪庫、刪除超級(jí)表這些重大操作,如果是為了調(diào)試,反復(fù)重建的測(cè)試操作一定要在測(cè)試環(huán)境進(jìn)行,生產(chǎn)環(huán)境不可延用測(cè)試環(huán)境直接建庫建表投入使用,除非該服務(wù)器的 TDengine 已經(jīng)卸載干凈。

2. 那如果是使用時(shí)間太久,或者各種更改表結(jié)構(gòu)的操作無可避免,導(dǎo)致 mnode 下的 WAL 過大,是不是無解了呢?

對(duì)于這種情況,在 2.1.5 版本之后,我們提供了離線壓縮 Mnode WAL 的方案來解決:

1)單機(jī):

  1. systemctl stop taosd。
  2. taosd –compact-mnode-wal,如果執(zhí)行正常的話,會(huì)在數(shù)據(jù)文件目錄下生成 mnode_bak 目錄,用于保存原數(shù)據(jù)。
  3. systemctl start taosd,這樣 TDengine 就會(huì)使用壓縮過的 wal 日志來啟動(dòng)數(shù)據(jù)庫服務(wù)進(jìn)程。

2)集群:

  1. show mnodes ,確認(rèn) mnode 節(jié)點(diǎn)所在的服務(wù)器,并且區(qū)分 mnode 的 master 和 slave。
  2. systemctl stop taosd,停止集群所有節(jié)點(diǎn)。
  3. 【可選】移出所有mnode 節(jié)點(diǎn)上的 mnode_bak目錄。
  4. 在 mnode master 服務(wù)器上,以 root 權(quán)限執(zhí)行 taosd –compact-mnode-wal 。
  5. 將 mnode master 壓縮后的 mnode/wal/* 文件復(fù)制到其他 slave 節(jié)點(diǎn)對(duì)應(yīng)目錄。
  6. 重啟集群。

值得注意的是,taosd –compact-mnode-wal 命令第一次的運(yùn)行時(shí)間與壓縮前集群?jiǎn)?dòng)時(shí)間基本相同,要等到下次再啟動(dòng)的時(shí)候速度才會(huì)變快。

此外,在未來的 TDengine 3.0 版本中,這也會(huì)是我們的重大的優(yōu)化項(xiàng)。由于 WAL 也會(huì)變成分布式的存儲(chǔ),屆時(shí),即使是在億級(jí)別表數(shù)量的情況下,TDengine 的啟停速度也都不再會(huì)是問題。而且這項(xiàng)優(yōu)化不過是 3.0 版本諸多特性的冰山一角。這項(xiàng)調(diào)整的背后代表著 TDengine 對(duì)于很多重要模塊的優(yōu)化重構(gòu),穩(wěn)定性和性能都會(huì)大幅提高,多項(xiàng)重磅功能也會(huì)上線。

從 1.0 時(shí)代跟過來的老用戶應(yīng)該會(huì)對(duì) 2.0 的版本的進(jìn)步深有感觸,3.0 版本可以說更是青出于藍(lán)。

讓我們一起期待。