GP 鎖表查詢


01, 查詢鎖表情況

SQL> select * from gp_toolkit.gp_locks_on_relation WHERE lorrelname like '%wpp_cdefect_glass_f%';
詳細查詢:
SELECT pid,rolname, rsqname, granted,  
current_query, datname  
FROM pg_roles, gp_toolkit.gp_resqueue_status, pg_locks, pg_stat_activity  
WHERE pg_roles.rolresqueue=pg_locks.objid  
AND pg_locks.objid=gp_toolkit.gp_resqueue_status.queueid  
AND pg_stat_activity.procpid=pg_locks.pid;

02, 鎖相關視圖描述

    pg_stat_activity

      視圖pg_stat_activity每行顯示一個服務器進程同時詳細描述與之關聯的用戶會話和查詢。只有在檢查視圖的用戶是超級用戶或者是正在報告的進程的擁有者時,這些列才可見。

名稱    

類型    

描述

datid    

oid        

數據庫OID

datname     

name       

數據庫名稱

procpid     

integer    

服務進程的進程ID

sess_id     

integer    

會話ID

usesysid    

oid        

角色ID

usename     

name       

角色名

current_query

text       

進程正在執行的當前查詢

waiting     

boolean    

如果正等待一個鎖則為真,否則為假

query_start    

timestamptz

查詢開始執行的時間

backend_start  

timestamptz

后台進程開始的時間

client_addr    

inet       

客戶端地址

client_port    

integer    

客戶端端口

application_name

text       

客戶端應用名

xact_start     

timestamptz

事務開始時間

waiting_reason 

text       

服務進程正在等待的原因。值可以是:lock或replication



        重點關注procpid,current_query,waiting,waiting_reason等列。

  pg_locks

    pg_locks 視圖提供了有關在Greenplum數據庫中由開放事務持有的鎖的信息的訪問。pg_locks 包含一行關於每個積極可鎖對象,請求的鎖模式和相關事務。 因此,如果多個事務正在持有或等待其上的鎖,同樣的可鎖對象可能會出現多次。 但是,目前沒有鎖的對象根本就不會出現。
有幾種不同類型的可鎖對象:整個關系(如表),關系的個別頁,關系的個別元組,事務Id和通用數據庫對象。另外,擴展關系的權利表示為單獨的可鎖對象。

類型

描述

locktype

text

可鎖對象的類型:relation,extend,page,tuple,transactionid,object,userlock,resource       queue,或advisory

database

oid

該對象存在的數據庫的Oid,如果該對象是共享對象,則為0。如果對象是事務ID,則為空。

relation

oid

關系的Oid,如果對象不是關系或者關系的一部分,則為NULL。

page

integer

關系中的頁碼,如果對象不是元組或者關系頁則為NULL

tuple

smallint

頁中的元組號,如果該對象不是個元組則為NULL。

transactionid

xid

事務的Id,如果該對象不是一個事務Id,則為NULL。

classid

oid

包含對象的系統目錄的Oid,如果對象不是一般數據庫對象,則為NULL。

objid

oid

其系統目錄中對象的Oid,如果對象不是一般數據庫對象,則為NULL。

objsubid

smallint

對一個表列來說,這是列號(classid和objid引用表本身)。對於所有其他的對象類型,此列為0。如果對象不是數據庫對象,則為NULL。

transaction

xid

等待或持有該鎖的事務的Id。

pid

integer

持有或等待該鎖的事務進程的進程Id,如果鎖由准備(prepared)的事務持有,則為NULL。

mode

text

該進程所持有或期望的鎖模式的名稱。

granted

boolean

鎖被持有為真,鎖為等待為假。

mppsessionid

integer

與鎖相關的客戶端會話的id。

mppiswriter

boolean

指明該鎖是否由一個寫進程所持有。

gp_segment_id

integer

該Greenplum持有該鎖的段的id(dbid)



  重點關注pid,mode,granted等列。

gp_toolkit.gp_locks_on_relation

  該視圖顯示了當前所有表上持有鎖,以及查詢關聯的鎖的相關聯的會話信息。該視圖能夠被所有用戶訪問,但是非超級用戶只能夠看到他們有權限訪問的關系上持有的鎖。

列       描述

lorlocktype   能夠加鎖對象的類型:relation、 extend、page、tuple、transactionid、object、userlock、resource queue以及advisory

lordatabase   對象存在的數據庫對象ID,如果對象為一個共享對象則該值為0。

lorrelname   關系名。

lorrelation   關系對象ID。

lortransaction 鎖所影響的事務ID 。

lorpid     持有或者等待該鎖的服務器端進程的進程ID 。如果該鎖被一個預備事務持有則為NULL。

lormode    由該進程持有或者要求的鎖模式名。

lorgranted   顯示是否該鎖被授予(true)或者未被授予(false)。

lorcurrentquery 會話中的當前查詢。


03,解決鎖問題

  select pg_terminate_backend(procpid);

  執行對應的pid即可完成清理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM