❶ 查詢mysql 哪些表正在被鎖狀態
可直接在mysql命令行執行:show engine innodb statusG;
查看造成死鎖的sql語句,分析索引情況,然後優化sql然後show processlist;
show status like 『%lock%』
show OPEN TABLES where In_use > 0; 這個語句記錄當前鎖表狀態
另外可以打開慢查詢日誌,linux下打開需在my.cnf的[mysqld]裡面加上以下內容:
slow_query_log=TRUE(有些mysql版本是ON)
slow_query_log_file=/usr/local/mysql/slow_query_log.txt
long_query_time=3
(1)如何排查鎖表的原因擴展閱讀:
MySQL鎖定狀態查看命令
Checking table:正在檢查數據表(這是自動的)。
Closing tables:正在將表中修改的數據刷新到磁碟中,同時正在關閉已經用完的表。這是一個很快的操作,如果不是這樣的話,就應該確認磁碟空間是否已經滿了或者磁碟是否正處於重負中。
Connect Out:復制從伺服器正在連接主伺服器。
Copying to tmp table on disk:由於臨時結果集大於tmp_table_size,正在將臨時表從內存存儲轉為磁碟存儲以此節省內存。
Creating tmp table:正在創建臨時表以存放部分查詢結果。
deleting from main table:伺服器正在執行多表刪除中的第一部分,剛刪除第一個表。
❷ sql server 怎麼查找鎖表原因
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--查看被鎖表:
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='OBJECT'
--spid 鎖表進程
--tableName 被鎖表名
-- 解鎖:
declare @spid int
Set @spid = 57 --鎖表進程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)
❸ oracle怎麼查看錶死鎖住的原因
1.可能在Oracle中可以有計時器,在頻繁操作資料庫,update,insert,delete語句,在jobs中能查看到(如圖)
3.可能在.net程序中使用到Thead(線程)頻繁的操作資料庫update,insert,delete語句(這個條為個人觀點,還未得到證實)
【注釋】:此處更新數據量都比較大,比如說update的資料庫條數可能在1000條以上,
導致其他操作在等待(update跟其他操作都是同一張表)
4.可能使用到事務處理(Tran),沒有提交事務(CommintTran)或者沒有回滾事務(Rollback)
【注釋】:在SqlServer資料庫裡面有一個隱式事務,關閉時候,每次修改插入都需要手動提交,不然就會導致死鎖
❹ oracle 表鎖住了什麼原因
首先你要知道表鎖住了是不是正常鎖?因為任何DML語句都會對表加鎖。
你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業務需求,不建議隨便KILL session,如果這個鎖表是正常業務你把session kill掉了會影響業務的。
建議先查原因再做決定。
(1)鎖表查詢的代碼有以下的形式:
select count(*) from v$locked_object;
select * from v$locked_object;
(2)查看哪個表被鎖
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
(3)查看是哪個session引起的
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
(4)查看是哪個sql引起的
select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid
and b.SQL_ID = c.sql_id and c.sql_id = ''
order by b.logon_time;
(5)殺掉對應進程
執行命令:alter system kill session'1025,41';
其中1025為sid,41為serial#.
https://..com/question/433728939051752164.html