鎖
1、查看表鎖, Table_locks_waited較高表明鎖爭用比較嚴重
show status like 'table%'2、查看行鎖,Innodb_row_lock_waits和InnoDB_row_lock_time_avg較高表明鎖爭用比較嚴重
show status like 'innodb_row_lock%'3、加寫表鎖(需手動unclock tables,用commit不會自動解鎖)
lock table user write;4、加讀表鎖(需手動unclock tables,用commit不會自動解鎖)lock table user read;5、加讀表鎖(需手動unclock tables,用commit不會自動解鎖),并支持另一個事務的insert操作lock table user read local;6、加共享行鎖(提交事務,自動解鎖)select * from user where id=2 lock in share mode; 7、加排他行鎖(提交事務,自動解鎖)delete from user where id=2 for update;8、其他說明
INSERT...SELECT...和 CREATE TABLE...SELECT...語句,會鎖原表
set global concurrent_insert=2; -- 設置是否開啟并發insert,0=不開啟,1=沒有空洞的情況下,允許insert,2=不管有沒有空洞,都允許插入select @@LOW_PRIORITY_UPDATES; -- 默認情況下,寫鎖比讀鎖優先級高,所以寫鎖會先得到鎖,用這個命令可以降低寫鎖的級別select @@max_write_lock_count; -- 當寫鎖達到指定數量,會降低寫鎖優先級事務1、開啟事務
set autocommit=0;2、提交事務(不會自動釋放表鎖)commit;3、回滾事務rollback;4、設置事務的隔離級別會“可重復讀”SET session TRANSACTION ISOLATION LEVEL REPEATABLE READ;5、設置事務的隔離級別為“序列化”SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
| 
 
 | 
新聞熱點
疑難解答