日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Postgresql页面xmax与multixact

發布時間:2024/3/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Postgresql页面xmax与multixact 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

結論1:

  • xmax和Infomask匹配使用,可能保存修改者的xid,也可能保存讀或寫行鎖的xid。
  • 如果保存讀寫行鎖的xid,只要加過行鎖,就算釋放了xmax也會一直記錄xid。
  • 如果保存讀行鎖的xid,如果有多個事務加行鎖,xmax會保存multixact數組的位置,具體信息存在multixact結構中(SLRU頁面同CLOG)。
  • 結論2:

    注意到PG使用xmax記錄行鎖的事務ID,那么判斷行鎖還有沒有就依賴xid的狀態了,也就是CLOG。

    在vacuum freeze的時候如果看到xmax上記錄的事務ID過舊,也需要freeze的:

    • vacuum_multixact_freeze_min_age 同 autovacuum_freeze_max_age : 五千萬開始正常vacuum freeze,用最新xid-五千萬=Limit,掃描頁面如果有臟數據順便freeze。
    • autovacuum_multixact_freeze_max_age 同 autovacuum_multixact_freeze_max_age : 兩億開始eager freeze取oldxmin為Limit,用Limit來freeze所有頁面。

    正常保存

    create table m7(id int primary key, info text); insert into m7 select generate_series(1,10), md5(random()::text); select lp,lp_off,lp_flags,lp_len,t_xmin,t_xmax,t_field3,t_ctid,t_infomask2,t_infomask,t_hoff,t_bits,t_oid from heap_page_items(get_raw_page('m7',0));lp | lp_off | lp_flags | lp_len | t_xmin | t_xmax | t_field3 | t_ctid | t_infomask2 | t_infomask | t_hoff | t_bits | t_oid ----+--------+----------+--------+------------+--------+----------+--------+-------------+------------+--------+--------+-------1 | 8128 | 1 | 61 | 1477538885 | 0 | 0 | (0,1) | 2 | 2050 | 24 | | 2 | 8064 | 1 | 61 | 1477538885 | 0 | 0 | (0,2) | 2 | 2050 | 24 | | 3 | 8000 | 1 | 61 | 1477538885 | 0 | 0 | (0,3) | 2 | 2050 | 24 | | 4 | 7936 | 1 | 61 | 1477538885 | 0 | 0 | (0,4) | 2 | 2050 | 24 | | 5 | 7872 | 1 | 61 | 1477538885 | 0 | 0 | (0,5) | 2 | 2050 | 24 | | 6 | 7808 | 1 | 61 | 1477538885 | 0 | 0 | (0,6) | 2 | 2050 | 24 | | 7 | 7744 | 1 | 61 | 1477538885 | 0 | 0 | (0,7) | 2 | 2050 | 24 | | 8 | 7680 | 1 | 61 | 1477538885 | 0 | 0 | (0,8) | 2 | 2050 | 24 | | 9 | 7616 | 1 | 61 | 1477538885 | 0 | 0 | (0,9) | 2 | 2050 | 24 | | 10 | 7552 | 1 | 61 | 1477538885 | 0 | 0 | (0,10) | 2 | 2050 | 24 | | postgres=# select lp,lp_len,t_xmin,t_xmax,t_ctid,t_infomask2,t_infomask,t_hoff from heap_page_items(get_raw_page('m7',0));lp | lp_len | t_xmin | t_xmax | t_ctid | t_infomask2 | t_infomask | t_hoff ----+--------+------------+------------+--------+-------------+------------+--------1 | 61 | 1477538885 | 1477538886 | (0,1) | 8194 | 258 | 242 | 61 | 1477538885 | 0 | (0,2) | 2 | 2050 | 243 | 61 | 1477538885 | 0 | (0,3) | 2 | 2050 | 244 | 61 | 1477538885 | 0 | (0,4) | 2 | 2050 | 245 | 61 | 1477538885 | 0 | (0,5) | 2 | 2050 | 246 | 61 | 1477538885 | 0 | (0,6) | 2 | 2050 | 247 | 61 | 1477538885 | 0 | (0,7) | 2 | 2050 | 248 | 61 | 1477538885 | 0 | (0,8) | 2 | 2050 | 249 | 61 | 1477538885 | 0 | (0,9) | 2 | 2050 | 2410 | 61 | 1477538885 | 0 | (0,10) | 2 | 2050 | 24

    id=1刪除提交

    id=2刪除回滾

    id=3行讀鎖

    id=4行寫鎖

    id=5行2讀鎖

    postgres=# select lp,lp_len,t_xmin,t_xmax,t_ctid,t_infomask2,t_infomask,t_hoff from heap_page_items(get_raw_page('m7',0));lp | lp_len | t_xmin | t_xmax | t_ctid | t_infomask2 | t_infomask | t_hoff ----+--------+------------+------------+--------+-------------+------------+--------1 | 61 | 1477538885 | 1477538886 | (0,1) | 8194 | 258 | 242 | 61 | 1477538885 | 1477538887 | (0,2) | 8194 | 258 | 243 | 61 | 1477538885 | 1477538889 | (0,3) | 2 | 466 | 244 | 61 | 1477538885 | 1477538890 | (0,4) | 8194 | 450 | 245 | 61 | 1477538885 | 343 | (0,5) | 2 | 4562 | 246 | 61 | 1477538885 | 0 | (0,6) | 2 | 2050 | 247 | 61 | 1477538885 | 0 | (0,7) | 2 | 2050 | 248 | 61 | 1477538885 | 0 | (0,8) | 2 | 2050 | 249 | 61 | 1477538885 | 0 | (0,9) | 2 | 2050 | 2410 | 61 | 1477538885 | 0 | (0,10) | 2 | 2050 | 24t_infomask 258: HEAP_HASVARWIDTH | HEAP_XMIN_COMMITTED 466: HEAP_HASVARWIDTH | HEAP_XMAX_KEYSHR_LOCK | HEAP_XMAX_EXCL_LOCK | HEAP_XMAX_LOCK_ONLY | HEAP_XMIN_COMMITTED 450: HEAP_HASVARWIDTH | HEAP_XMAX_EXCL_LOCK | HEAP_XMAX_LOCK_ONLY | HEAP_XMIN_COMMITTED 4562: HEAP_HASVARWIDTH | HEAP_XMAX_KEYSHR_LOCK | HEAP_XMAX_EXCL_LOCK | HEAP_XMAX_LOCK_ONLY | HEAP_XMIN_COMMITTED | HEAP_XMAX_IS_MULTI 2050: HEAP_HASVARWIDTH | HEAP_XMAX_INVALIDt_infomask2 8194: 0010000000000010 : HEAP_KEYS_UPDATED |11位保存元素數量,這里是兩列 2 : 0000000000000010 : 低11位保存元素數量,這里是兩列

    總結

    以上是生活随笔為你收集整理的Postgresql页面xmax与multixact的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。