hive鎖表解決

2021-08-22 08:24:35 字數 3048 閱讀 8664

查詢是否鎖表

show locks ;
發現表(fact_hz_zlfa)被鎖,

臨時解決方案

對錶解鎖

unlock table fact_hz_zlfa ;
解決方案:

find / -name hive-site.xml
關閉鎖機制:

set hive.support.concurrency=false; 預設為true
failed: error in acquiring locks: locks on the underlying objects cannot be acquired. retry after some time
解決辦法:關閉併發,set hive.support.concurrency=false;

hive存在兩種鎖,共享鎖shared (s)和互斥鎖exclusive (x),
其中只觸發s鎖的操作可以併發的執行,只要有乙個操作對錶或者分割槽出發了x鎖,則該錶或者分割槽不能併發的執行作業。
各個操作鎖出發的鎖如下:
hive command

locks acquired

select .. t1 partition p1

s on t1, t1.p1

insert into t2(partition p2) select .. t1 partition p1

s on t2, t1, t1.p1 and x on t2.p2

insert into t2(partition p.q) select .. t1 partition p1

s on t2, t2.p, t1, t1.p1 and x on t2.p.q

alter table t1 rename t2

x on t1

alter table t1 add cols

x on t1

alter table t1 replace cols

x on t1

alter table t1 change cols

x on t1

alter table t1 add partition p1

s on t1, x on t1.p1

alter table t1 drop partition p1

s on t1, x on t1.p1

alter table t1 touch partition p1

s on t1, x on t1.p1

*alter table t1 set serdeproperties *
s on t1

*alter table t1 set serializer *
s on t1

*alter table t1 set file format *
s on t1

*alter table t1 set tblproperties *
x on t1

drop table t1

x on t1

補充一條,load data (local) inpath ' ' into table xx partition() 出發的鎖操作同insert
直接在hadoop上 hadoop dfs -put xx yy 不觸發鎖。(可以用在shell上 執行 hadoop dfs -put file hdfsmulu 這兩天命令來代替 load data,避免鎖)
load data 時若分割槽不存在會建立分割槽,而hadoop dfs -put不會, 需先呼叫alter table add partition來建立分割槽。 若乙個操作正在讀取表中資料,這時向表的分割槽中put資料,

該資料在本次讀時不會被載入,下次讀操作時才會被載入。

檢視鎖命令:
對於不存在的分割槽,當表正在讀時,利用load data 不能向新分割槽中匯入資料,而採用alter table add partition 加上put的方式可以向其中匯入資料(個人理解load data partition在

完成後才會觸發更新元資料的操作,而在其未完成之前時需要load 資料的 由於該錶的所以分割槽已經被加了s鎖,故不能執行。而alter table add partition 該分割槽是新建立出來的,其它的

操作未對其執行加鎖操作,把第二步put換為load data也是可以的)

Oracle 鎖表解決

有時候有測試介面,或者查詢sql語句,資料會無限阻塞,而且後台也不報錯。有可能是表被鎖住得原因 用以下sql 檢視鎖表記錄 select t2.username,t2.sid,t2.serial t2.logon time from v locked object t1,v session t2 w...

ORACLE鎖表解決

查詢發生阻塞的sql 從上述執行結果可以看出,發生了行鎖,會話143阻塞了會話138!查詢鎖住的物件 導致143會話,持有tab test表的行鎖沒有釋放鎖的sql select l.session id sid,s.serial l.locked mode,l.oracle username,s....

mysql鎖解決方法 mysql鎖表解決方法

如果有 super 許可權,則可以看到全部的執行緒,否則,只能看到自己發起的執行緒 id列 乙個標識,你要kill 乙個語句的時候很有用。user列 顯示當前使用者,如果不是root,這個命令就只顯示你許可權範圍內的sql語句。host列 顯示這個語句是從哪個ip 的哪個埠上發出的。可用來追蹤出問題...