詳解數倉的鎖相關參數及視圖

来源:https://www.cnblogs.com/huaweiyun/archive/2022/10/10/16775116.html
-Advertisement-
Play Games

摘要:GaussDB(DWS) 中鎖等待可以設置等待超時相關參數,一旦等鎖的時間超過參數配置值會拋錯。 本文分享自華為雲社區《GaussDB(DWS) 鎖相關參數及視圖詳解》,作者: yd_220527686。 一、鎖相關參數 GaussDB(DWS) 中鎖等待可以設置等待超時相關參數,一旦等鎖的時 ...


摘要:GaussDB(DWS) 中鎖等待可以設置等待超時相關參數,一旦等鎖的時間超過參數配置值會拋錯。

本文分享自華為雲社區《GaussDB(DWS) 鎖相關參數及視圖詳解》,作者: yd_220527686。

一、鎖相關參數

GaussDB(DWS) 中鎖等待可以設置等待超時相關參數,一旦等鎖的時間超過參數配置值會拋錯。跟鎖相關的參數有4個,具體含義如下:

1.deadlock_timeout

表示死鎖檢測時間,到達該時間後進行死鎖檢測,預設1秒。

2.lockwait_timeout

當出現表鎖衝突的時候生效,當等待表鎖的時間超過配置的時間,拋錯返回,預設20分鐘。

3.update_lockwait_timeout

當出現記錄鎖衝突的時候生效,如果等待記錄鎖的時間超過update_lockwait_timeout,拋錯返回,預設2分鐘。

4.ddl_lock_timeout

當出現八級表鎖衝突的時候生效,當等待獲取八級鎖的時間超過配置的時間,拋錯返回,預設值為0,表示不生效,需用戶手動開啟(在8.1.3版本及更高版本生效)。

二、鎖相關參數之間的邏輯

在8.1.3版本中,新增加參數ddl_lock_timeout,其優先順序高於lockwait_timeout。deadlock_timeout、lockwait_timeout和ddl_lock_timeout的邏輯關係如下:

  1. 當ddl_lock_timeout生效,且申請的鎖是八級鎖時,鎖等待超時報錯的時間為ddl_lock_timeout的值;當申請的鎖不是八級鎖時,鎖等待超時報錯的時間為lockwait_timeout的值;
  2. 如果參數lockwait_timeout > deadlock_timeout時,同時啟死鎖定時器和鎖超時定時器。當參數lockwait_timeout <= deadlock_timeout時,只啟動鎖超時定時器,不啟動死鎖定時器。

三、構建死鎖和鎖超時場景示例

構建3個元素的死鎖場景如下:

首先執行第一行(按照session號從小到大執行)然後執行第二行(按照session號從小到大執行),可以通過獲取對應鎖的SQL語句,獲得鎖。表鎖還可以手動的使用SQL語句的方式進行強制上鎖,SQL語句的格式如下所示:

LOCK TABLE [ name ] IN [ lockmode ] MODE;

其中 lockmode 可以是以下之一:

ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE
| SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE

要註意的是LOCK語句只能在事務塊中執行,事務結束會釋放。

設置deadlock_timeout、lockwait_timeout和ddl_lock_timeout的值,預期如下:

1.當ddl_lock_timeout = 0,lockwait_timeout>deadlock_timeout > 0:

2.當ddl_lock_timeout = 0,deadlock_timeout>lockwait_timeout > 0:

3.當ddl_lock_timeout != 0,ddl_lock_timeout>deadlock_timeout > 0:

4.當ddl_lock_timeout != 0,deadlock_timeout>ddl_lock_timeout > 0:

5.當ddl_lock_timeout != 0,deadlock_timeout=ddl_lock_timeout > 0:

四、鎖等待查詢

1. 通過查詢pg_locks視圖查看單個節點的鎖持有和等待狀態,pg_locks視圖的結構如下圖:

locktype | database | relation | page | tuple | virtualxid | transactionid | classid | objid | objsubid | virtualtransaction | pid |           mode           | granted | fastpath 
---------------+----------+----------+------+-------+------------+---------------+---------+-------+----------+--------------------+-----------------+--------------------------+---------+----------
 relation      | 15835 | 11835 | | | | | | | | 13/3755 | 139776366208768 | AccessShareLock | t       | t
 virtualxid | | | | | 13/3755 | | | | | 13/3755 | 139776366208768 | ExclusiveLock | t       | t
 virtualxid | | | | | 12/38 | | | | | 12/38 | 139776382990080 | ExclusiveLock | t       | t
 virtualxid | | | | | 8/263 | | | | | 8/263 | 139776720103168 | ExclusiveLock | t       | t
 virtualxid | | | | | 7/314 | | | | | 7/314 | 139776736884480 | ExclusiveLock | t       | t
 virtualxid | | | | | 5/717 | | | | | 5/717 | 139776778299136 | ExclusiveLock | t       | t
 transactionid | | | | | | 210480 | | | | 12/38 | 139776382990080 | ExclusiveLock | t       | f
 relation      | 15835 | 16980 | | | | | | | | 12/38 | 139776382990080 | ShareUpdateExclusiveLock | t       | f
 relation      | 15835 | 16980 | | | | | | | | 12/38 | 139776382990080 | ShareRowExclusiveLock | t       | f

其中:

locktype:表示鎖類型,包括表鎖、事務鎖、擴展鎖、自定義鎖等;

relation:表示表的oid,如果是表鎖,relation列會顯示表的oid

transactionid:表示事務號,如果是事務鎖,transactionid列會顯示session的事務號

mode:表示鎖級別,級別1-8級;

pid:表示session的線程號;

granted:'t’表示持有鎖,'f’表示等待鎖;

2. 通過pgxc_lockwait_detail和pgxc_wait_detail查看鎖等待狀態,該方法僅適用於8.1.3及以上版本;

1、pgxc_lockwait_detail系統視圖,顯示每個節點中鎖等待鏈詳細信息

查詢語句:

select *  from pgxc_lockwait_detail;

其中:

level:表示等待鏈中的層級,以1開始,每顯示一層等待關係level會加1。

lock_wait_hierarchy:表示等待鏈,以節點名稱:進程號->幾點名稱:等待進程號->節點名稱:等待進程號->…。

wait_for_pid:表示鎖衝突線程的線程號

conflict_mode:表示鎖衝突線程持有的衝突鎖級別

query:表示查詢語句

2、pgxc_wait_detail系統視圖,顯示所有節點SQL等待從上之下的等待鏈詳細信息,包括wait_node、query等

查詢語句:

select *  from pgxc_wait_detail;
level | lock_wait_hierarchy | node_name | db_name | thread_name | query_id | tid | lwtid | ptid | tlevel | smpid | wait_status | wait_event | exec_cn | wait_node |                                       query                                       | application_name | backend_start | xact_start | query_start | waiting | state
-------+---------------------------------------------------------+--------------+----------+-------------+--------------------+-----------------+-------+------+--------+-------+----------------------------------+------------+---------+--------------+-----------------------------------------------------------------------------------+------------------+-------------------------------+-------------------------------+-------------------------------+---------+--------
 1 | cn_5002:140698314475264 | cn_5002      | postgres | OM | 144959613006392061 | 140698314475264 | 21820 | | 0 | 0 | wait node(total 3): dn_6005_6006 | | t       | dn_6005_6006 | +| OM | 2022-10-08 18:02:55.810858+08 | 2022-10-08 18:03:10.478458+08 | 2022-10-08 18:02:55.819575+08 | t       | active
 | | | | | | | | | | | | | | | INSERT INTO scheduler.bandwidth_history_table +| | | | | |
 | | | | | | | | | | | | | | | SELECT timestamp, node_name, "rxpck/s", "txpck/s", "rxkB/s", "txkB/s"+| | | | | |
 | | | | | | | | | | | | | | | FROM (select '2022-10-08 18:02:55' as timestamp), PGXC_COMM_STATUS; +| | | | | |
 | | | | | | | | | | | | | | | | | | | | | 
 2 | cn_5002:140698314475264 -> dn_6005_6006:140246537033472 | dn_6005_6006 | postgres | cn_5002     | 144959613006392061 | 140246537033472 | 1587 | | 0 | 0 | none                             | | f       | | SELECT * FROM pg_comm_status; | cn_5002          | 2022-10-08 12:01:38.70103+08 | 2022-10-08 18:03:10.478458+08 | 2022-10-08 18:03:10.493286+08 | f       | active

其中:

wait_status:當前線程的等待狀態

wait_event:持有此鎖或者在等待此鎖的事務的虛擬id

exec_cn:是否執行sql語句的cn節點

wait_node:鎖級別級別

query:查詢語句

backend_start:後端進程啟動時間,即客戶端連接伺服器的時間

xact_start:當前事務的啟動時間

query_start:開始當前活躍查詢的時間

waiting:是否正處於等待狀態

state:後端當前總體狀態

tips:為保證查詢鏈條正確,在使用pgxc_wait_detail和pgxc_lockwait_detail時不能進行排序和分組。

想瞭解GuassDB(DWS)更多信息,歡迎微信搜索“GaussDB DWS”關註微信公眾號,和您分享最新最全的PB級數倉黑科技,後臺還可獲取眾多學習資料哦。

 

點擊關註,第一時間瞭解華為雲新鮮技術~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Mac哪款觸控板手勢增強軟體好用呢?Multitouch mac是Mac平臺上一款mac觸控板手勢增強軟體,Multitouch mac版添加了各種不同的觸控板手勢,手指輕點、輕掃等就能快速進行操作,使用非常便捷。 詳情:Multitouch for Mac(觸控板手勢增強軟體) 簡單介紹 Mult ...
  • Mac上哪款策略游戲好玩?鋼鐵戰隊Iron Marines for mac推薦給大家,這是一款Mac平臺上好玩的策略游戲,該游戲的創作者同《王國保衛戰》三部曲相同,又是一款超凡的太空奇幻歷險之作。玩家將在游戲中指導你的部隊參加3個不同世界的21次任務,準備好發動英勇的攻擊,堅守陣地,拯救平民,潛入超 ...
  • 視圖和用戶許可權 1.視圖(view) 看一個需求 emp表的列信息很多,有些信息是個人重要信息(比如:sal、comm、mgr、hiredate),如果我們希望某個用戶只能查詢emp表的empno、enamel、job和deptno信息,有什麼辦法呢? 答案是使用視圖。 1.1基本原理 視圖是一個虛 ...
  • 我們偶爾需要在已有表,並且有數據的情況下,修改其某個欄位的類型或改變他的長度,但是因為表中有數據,所以不可以直接修改,需要換個思路。 -- Create table create table TABLE1 ( col1 number(9), col2 char(20) ); -- 嘗試修改 -- 修 ...
  • 在 StoneDB 1.0 版本中,InnoDB 引擎處理 OLTP 的事務型業務,Tianmu 引擎處理 OLAP 的分析型業務。因此,需要在主從複製環境的基礎上做讀寫分離,所有的寫操作和部分讀操作走 InnoDB 引擎,所有的分析類查詢走 Tianmu 引擎。讀寫分離方案既可以使用第三方中間件, ...
  • MGR 的新主選舉演算法,在節點版本一致的情況下,其實也挺簡單的。 首先比較權重,權重越高,選為新主的優先順序越高。 如果權重一致,則會進一步比較節點的 server_uuid。server_uuid 越小,選為新主的優先順序越高。 所以,在節點版本一致的情況下,會選擇權重最高,server_uuid 最 ...
  • Hadoop是Apache基金會旗下最知名的基礎架構開源項目之一。自2006年誕生以來,逐步發展成為海量數據存儲、處理最為重要的基礎組件,形成了非常豐富的技術生態。 作為國內頂尖的 Hadoop 開源生態技術峰會,第四屆 China Apache Hadoop Meetup於 2022年9月24日在 ...
  • 點亮 ⭐️ Star · 照亮開源之路 GitHub:https://github.com/apache/dolphinscheduler ​ 版本發佈 感謝本次的 Release Manager --@zhuangchong,是他主導了我們這個版本的發佈流程,引導社區進行版本內容溝通,發版前的問題 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...