查詢是否鎖表
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 的哪個埠上發出的。可用來追蹤出問題...