1. mysql在哪個文件查看鎖死表信息謝謝,或者如何查看
以下五種方法可以快速定位全局鎖的位置,僅供參考。
方法1:利用 metadata_locks 視圖
此方法僅適用於 MySQL 5.7 以上版本,該版本 performance_schema 新增了 metadata_locks,如果上鎖前啟用了元數據鎖的探針(默認是未啟用的),可以比較容易的定位全局鎖會話。
方法2:利用 events_statements_history 視圖此方法適用於 MySQL 5.6 以上版本,啟用 performance_schema.eventsstatements_history(5.6 默認未啟用,5.7 默認啟用),該表會 SQL 歷史記錄執行,如果請求太多,會自動清理早期的信息,有可能將上鎖會話的信息清理掉。
方法3:利用 gdb 工具如果上述兩種都用不了或者沒來得及啟用,可以嘗試第三種方法。利用 gdb 找到所有線程信息,查看每個線程中持有全局鎖對象,輸出對應的會話 ID,為了便於快速定位,我寫成了腳本形式。也可以使用 gdb 交互模式,但 attach mysql 進程後 mysql 會完全 hang 住,讀請求也會受到影響,不建議使用交互模式。
方法4:show processlist
如果備份程序使用的特定用戶執行備份,如果是 root 用戶備份,那 time 值越大的是持鎖會話的概率越大,如果業務也用 root 訪問,重點是 state 和 info 為空的,這里有個小技巧可以快速篩選,篩選後嘗試 kill 對應 ID,再觀察是否還有 wait global read lock 狀態的會話。
方法5:重啟試試!
2. 查詢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
(2)mysql查看鎖表sql擴展閱讀:
MySQL鎖定狀態查看命令
Checking table:正在檢查數據表(這是自動的)。
Closing tables:正在將表中修改的數據刷新到磁碟中,同時正在關閉已經用完的表。這是一個很快的操作,如果不是這樣的話,就應該確認磁碟空間是否已經滿了或者磁碟是否正處於重負中。
Connect Out:復制從伺服器正在連接主伺服器。
Copying to tmp table on disk:由於臨時結果集大於tmp_table_size,正在將臨時表從內存存儲轉為磁碟存儲以此節省內存。
Creating tmp table:正在創建臨時表以存放部分查詢結果。
deleting from main table:伺服器正在執行多表刪除中的第一部分,剛刪除第一個表。
3. 如何查詢鎖表的SQL
用下邊的語句查詢,如果想結束直接kill
SELECT SPID=p.spid,
DBName = convert(CHAR(20),d.name),
ProgramName = program_name,
LoginName = convert(CHAR(20),l.name),
HostName = convert(CHAR(20),hostname),
Status = p.status,
BlockedBy = p.blocked,
LoginTime = login_time,
QUERY = CAST(t.TEXT AS VARCHAR(MAX))
FROM MASTER.dbo.sysprocesses p
INNER JOIN MASTER.dbo.sysdatabases d
ON p.dbid = d.dbid
INNER JOIN MASTER.dbo.syslogins l
ON p.sid = l.sid
CROSS APPLY sys.dm_exec_sql_text(sql_handle) t
WHERE p.blocked = 0
AND EXISTS (SELECT 1
FROM MASTER.dbo.sysprocesses p1
WHERE p1.blocked = p.spid)
4. 如何查看mysql的鎖信息
方法1:利用 metadata_locks 視圖
此方法僅適用於 MySQL 5.7 以上版本,該版本 performance_schema 新增了 metadata_locks,如果上鎖前啟用了元數據鎖的探針(默認是未啟用的),可以比較容易的定位全局鎖會話。
方法2:利用 events_statements_history 視圖此方法適用於 MySQL 5.6 以上版本,啟用 performance_schema.eventsstatements_history(5.6 默認未啟用,5.7 默認啟用),該表會 SQL 歷史記錄執行,如果請求太多,會自動清理早期的信息,有可能將上鎖會話的信息清理掉。
方法3:利用 gdb 工具如果上述兩種都用不了或者沒來得及啟用,可以嘗試第三種方法。利用 gdb 找到所有線程信息,查看每個線程中持有全局鎖對象,輸出對應的會話 ID,為了便於快速定位,我寫成了腳本形式。也可以使用 gdb 交互模式,但 attach mysql 進程後 mysql 會完全 hang 住,讀請求也會受到影響,不建議使用交互模式。
方法4:show processlist
如果備份程序使用的特定用戶執行備份,如果是 root 用戶備份,那 time 值越大的是持鎖會話的概率越大,如果業務也用 root 訪問,重點是 state 和 info 為空的,這里有個小技巧可以快速篩選,篩選後嘗試 kill 對應 ID,再觀察是否還有 wait global read lock 狀態的會話。
方法5:重啟試試!
5. 如何查看MySQL資料庫的死鎖信息
查看MySQL資料庫的死鎖日誌
1. 使用終端或命令提示符登錄到MySQL,輸入命令:mysql -h xxxx.xxx.xxx -P 3306 -u username -p解釋:xxxx.xxx.xxx是資料庫IP地址,username是資料庫用戶名,輸入命令後,會讓你輸入username對應的密碼,就可以登錄了
4. 如何分析日誌,定位死鎖原因看3裡面的圖,紫色劃線部分分析:事務1,等待RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`,這個位置的X鎖事務2,持有RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`這個地方的S鎖事務2,等待這個地方的X鎖理論上這個事務2是可以提交的不會,死鎖,但是這個事務日誌只列印最後一部分死鎖,信息,這裡面隱含的條件是,事務1也持有RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`這個地方的S鎖,這樣,事務2不能加X鎖,同時事務1也不能加X鎖,產生死鎖。
6. 怎麼知道資料庫表已經鎖表了
可直接在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
select *from v$locked_object:可以獲得被鎖的對象的object_id及產生鎖的會話sid。通過查詢結果中的object_id,可以查詢到具體被鎖的對象。
(6)mysql查看鎖表sql擴展閱讀:
注意事項
也可以直接把這幾個視圖和表關聯起來,在查詢結果中直接得到「alter system kill session 'sid, serial#'」這樣的方便的kill sessoin命令。
如果執行kill session命令後,鎖並沒有除掉,session依然存在。這種情況,通過select spid from v$process where addr in(select paddr from v$session where sid = &sid)查詢到oracle會話在伺服器上的pid,然後登陸到伺服器上,執行kill -9 pid這樣就能殺掉進程解鎖了。
7. mysql專門用來查詢鎖表的SQL是什麼啊
//讀鎖
LOCK TABLES some_table READ
寫鎖
LOCK TABLES some_table WRITE
8. 怎樣查詢出SQLSERVER被鎖的表,以鎖表的SQL語句
查看被鎖表:
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='OBJECT'
spid 鎖表進程
tableName 被鎖表名