最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

PostgreSQL技術(shù)大講堂 - 第19講:凍結(jié)TXIDS概述

2023-06-15 16:35 作者:北京CUUG  | 我要投稿



PostgreSQL從小白到專(zhuān)家,是從入門(mén)逐漸能力提升的一個(gè)系列教程,內(nèi)容包括對(duì)PG基礎(chǔ)的認(rèn)知、包括安裝使用、包括角色權(quán)限、包括維護(hù)管理、、等內(nèi)容,希望對(duì)熱愛(ài)PG、學(xué)習(xí)PG的同學(xué)們有幫助,歡迎持續(xù)關(guān)注CUUG PG技術(shù)大講堂。

第19講:凍結(jié)TXIDS

內(nèi)容1:PostgreSQL TXID介紹

內(nèi)容2:PostgreSQL TXID使用原理使用

內(nèi)容3:凍結(jié)TXID來(lái)解決TXID環(huán)繞問(wèn)題

內(nèi)容4:如何凍結(jié)TIXD


TXID介紹

· 事務(wù)id(txid)

當(dāng)一個(gè)事務(wù)開(kāi)始時(shí),PostgreSQL中的事務(wù)管理系統(tǒng)會(huì)為該事務(wù)分配一個(gè)唯一標(biāo)識(shí)符,即事務(wù)ID(txid).PostgreSQL中的txid被定義為一個(gè)32位的無(wú)符號(hào)整數(shù),也就是說(shuō),它能記錄大約42億個(gè)事務(wù)。通常txid對(duì)我們是透明的,但是我們可以利用PostgreSQL內(nèi)部的函數(shù)來(lái)獲取當(dāng)前事務(wù)的txid。

testdb=# BEGIN;

BEGIN

testdb=# SELECT txid_current();

txid_current

--------------

100

(1 row)

請(qǐng)注意,BEGIN命令沒(méi)有指定txid。在PostgreSQL中,當(dāng)?shù)谝粋€(gè)命令在BEGIN命令執(zhí)行之后執(zhí)行時(shí),事務(wù)管理器會(huì)分配一個(gè)tixd,然后它的事務(wù)開(kāi)始。


TXID使用原理

· TXID結(jié)構(gòu)

TxID=2的32次方=42億

前21億個(gè)TxID是“過(guò)去的”

后21億個(gè)TxID是“未來(lái)的”


TXID環(huán)繞

· TXID環(huán)繞

假設(shè)元組tuple_1的txid為100,即tuple_1的t_xmin為100。服務(wù)器已經(jīng)運(yùn)行很長(zhǎng)一段時(shí)間了,Tuple_1沒(méi)有被修改。當(dāng)前的txid是21億+100,執(zhí)行SELECT命令。此時(shí),Tuple_1可見(jiàn),因?yàn)閠xid 100是過(guò)去的。接著,又執(zhí)行相同的SELECT命令,此時(shí)當(dāng)前的txid就變成是21億+101了,根據(jù)行可見(jiàn)性規(guī)則判斷Tuple_1就不再可見(jiàn),因?yàn)閠xid 100變成是未來(lái)的了。


凍結(jié)TXID

· 解決TXID環(huán)繞問(wèn)題的方法—凍結(jié)TXID

解決事務(wù)環(huán)繞問(wèn)題的方法是凍結(jié),其做法是把21億以前事務(wù)所修改的行做一個(gè)標(biāo)記位(即凍結(jié)),根據(jù)行可見(jiàn)性規(guī)則,凡是被標(biāo)識(shí)位凍結(jié)行在判斷的時(shí)候就不依賴t_xmin了,讓行數(shù)據(jù)變成可見(jiàn)。

若TXID使用過(guò)一輪以后,被凍結(jié)的行如果被新事務(wù)修改,則原來(lái)的標(biāo)記位就會(huì)消除(即解凍),此時(shí)此行是否可見(jiàn),就要根據(jù)行可見(jiàn)性規(guī)則進(jìn)行判斷。


凍結(jié)處理

· 凍結(jié)處理有兩種模式

lazy mode (惰性模式)

eager mode (急切模式)

· Lazy Mode

凍結(jié)極限txid定義如下:

freezeLimit_txid=(OldestXmin-vacuum_freeze_min_age)

AutoVacuum操作會(huì)進(jìn)行凍結(jié)操作,每分鐘都會(huì)執(zhí)行一次,被選中的表都會(huì)進(jìn)行vacuum操作,包含凍結(jié)txid內(nèi)容。

· Eager Mode

當(dāng)滿足以下條件時(shí),執(zhí)行緊急模式:

pg_database.datfrozenxid<(OldestXmin-vacuum_freeze_table_age)

· pg_database.datfrozenxid 和pg_class.relfrozenxid(s)之間的凍結(jié)對(duì)比

· 如何顯示被凍結(jié)的對(duì)象信息

testdb=# VACUUM table_1;

VACUUM

testdb=# SELECT n.nspname as "Schema", c.relname as "Name", c.relfrozenxid

FROM pg_catalog.pg_class c

LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace

WHERE c.relkind IN ('r','')

AND n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast'

AND pg_catalog.pg_table_is_visible(c.oid)

ORDER BY c.relfrozenxid::text::bigint DESC;

Schema | Name | relfrozenxid

------------+-------------------------+--------------

public | table_1 | 100002000

public | table_2 | 1846

pg_catalog | pg_database | 1827

pg_catalog | pg_user_mapping | 1821

pg_catalog | pg_largeobject | 1821

· 顯示被凍結(jié)的數(shù)據(jù)庫(kù)信息

testdb=# SELECT datname, datfrozenxid FROM pg_database WHERE datname = 'testdb';

datname | datfrozenxid

---------+--------------

testdb | 1821

(1 row)

· 使用VM提高凍結(jié)效率

以上就是Part 19 - 凍結(jié)TXIDS 的內(nèi)容,歡迎進(jìn)群一起探討交流,往期視頻,聯(lián)系cuug


PostgreSQL技術(shù)大講堂 - 第19講:凍結(jié)TXIDS概述的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
孟津县| 延川县| 元朗区| 公主岭市| 丰原市| 育儿| 广饶县| 靖远县| 石景山区| 福清市| 乐平市| 马鞍山市| 扬中市| 孟连| 宁南县| 桦川县| 安吉县| 新巴尔虎右旗| 龙口市| 沁水县| 桃园县| 嘉义县| 临朐县| 昌黎县| 桦南县| 灌阳县| 民权县| 镇远县| 新郑市| 安陆市| 临沧市| 青川县| 甘德县| 隆安县| 同江市| 阿拉尔市| 千阳县| 塔河县| 永城市| 会昌县| 崇信县|