程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 高機能MySQL念書筆記 找出誰持有鎖

高機能MySQL念書筆記 找出誰持有鎖

編輯:MySQL綜合教程

高機能MySQL念書筆記 找出誰持有鎖。本站提示廣大學習愛好者:(高機能MySQL念書筆記 找出誰持有鎖)文章只能為提供參考,不一定能成為您想要的結果。以下是高機能MySQL念書筆記 找出誰持有鎖正文


成績的配景:在現實應用MySQL時,假如拜訪量比擬年夜,那末極可能會湧現年夜量Locked狀況的過程,然則卻不克不及便利的辨認是哪條SQL惹起的成績,許多人碰到此類成績時,多半是經由過程PhpMyAdmin查詢可疑SQL,然後KILL失落,但成績是可疑SQL能夠會許多,如許一一測驗考試太甚愚笨,有的人一怒之下極可能會重啟MySQL,但如斯治本不治標的辦法確定更弗成取。

開端試驗,在test數據庫先樹立一個測試表foo(留意:是MyISAM表類型),添加若干數據:

CREATE TABLE IF NOT EXISTS `foo` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`str` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

INSERT INTO `foo` (`id`, `str`) VALUES
(1, 'a'),
(2, 'b');

翻開一個MySQL敕令行終端:

mysql> USE test;
mysql> SELECT SLEEP(12345) FROM foo;

再翻開一個MySQL敕令行終端:

mysql> USE test;
mysql> UPDATE foo SET str='bar';

此時履行SHOW PROCESSLIST,可以看到曾經湧現Locked景象了:

10 User sleep SELECT sleep(12345) FROM foo
20 Locked UPDATE foo SET str = 'bar'

固然,我們曉得是SLEEP梗塞了UPDATE,但假如不是這個試驗,面臨異樣的情形,好比說幾百個SQL查詢同時映入視線,我們若何來斷定呢?此時沒人能打包票,只能瞎蒙了,經歷有時刻很主要,但我們還須要明白的敕令,在這裡就是:

mysqladmin debug

留意:若何你沒有設定“.my.cnf”設置裝備擺設文件的話,能夠須要輸出用戶名和暗碼參數

敕令履行後,不會有任何明白的輸入,不要焦急,有價值的器械此時曾經被保留到了毛病日記裡:

mysql> SHOW VARIABLES LIKE 'log_error';

找到毛病日記的詳細途徑後,翻開,檢查日記的最初部門:

10 test.foo Locked - read Low priority read lock
20 test.foo Waiting - write High priority write lock

如斯,我們就可以看到id是10的SQL梗塞了id是20的SQL,至於詳細的SQL,到SHOW PROCESSLIST裡對比一下就可以看到了。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved