mysql中的鎖問(wèn)題

鎖問(wèn)題
13.1 獲取鎖等待情況
可以通過(guò)檢查table_locks_waited 和table_locks_immediate 狀態(tài)變量來(lái)分析系統(tǒng)上的表鎖定爭(zhēng)奪:
mysql> show status like ‘table%’;
+—————————-+———-+
| variable_name | value |
+—————————-+———-+
| table_locks_immediate | 105 |
| table_locks_waited | 3 |
+—————————-+———-+
2 rows in set (0.00 sec)
可以通過(guò)檢查innodb_row_lock 狀態(tài)變量來(lái)分析系統(tǒng)上的行鎖的爭(zhēng)奪情況:
mysql> show status like ‘innodb_row_lock%’;
+—————————————-+———-+
| variable_name | value |
+—————————————-+———-+
| innodb_row_lock_current_waits | 0 |
| innodb_row_lock_time | 2001 |
| innodb_row_lock_time_avg | 667 |
| innodb_row_lock_time_max | 845 |
| innodb_row_lock_waits | 3 |
+—————————————-+———-+
5 rows in set (0.00 sec)
另外,針對(duì)innodb 類型的表,如果需要察看當(dāng)前的鎖等待情況,可以設(shè)置innodb monitors,然后通過(guò)show innodb status 察看,設(shè)置的方式是:
create table innodb_monitor(a int) engine=innodb;
監(jiān)視器可以通過(guò)發(fā)出下列語(yǔ)句來(lái)被停止:
drop table innodb_monitor;
設(shè)置監(jiān)視器后,在show innodb status 的顯示內(nèi)容中,會(huì)有詳細(xì)的當(dāng)前鎖等待的信息,包括表名、鎖類型、鎖定記錄的情況等等,便于進(jìn)行進(jìn)一步的分析和問(wèn)題的確定。打開(kāi)監(jiān)視器以后,默認(rèn)情況下每15 秒會(huì)向日志中記錄監(jiān)控的內(nèi)容,如果長(zhǎng)時(shí)間打開(kāi)會(huì)導(dǎo)致.err 文件變得非常的巨大,所以我們?cè)诖_認(rèn)問(wèn)題原因之后,要記得刪除監(jiān)控表以關(guān)閉監(jiān)視器。或者通過(guò)使用–console 選項(xiàng)來(lái)啟動(dòng)服務(wù)器以關(guān)閉寫日志文件。
13.2 什么情況下使用表鎖
表級(jí)鎖在下列幾種情況下比行級(jí)鎖更優(yōu)越:
1. 很多操作都是讀表。
2. 在嚴(yán)格條件的索引上讀取和更新,當(dāng)更新或者刪除可以用單獨(dú)的索引來(lái)讀取得到時(shí):
3. update tbl_name set column=value where unique_key_col=key_value;
4. delete from tbl_name where unique_key_col=key_value;
5. select 和insert 語(yǔ)句并發(fā)的執(zhí)行,但是只有很少的update 和delete 語(yǔ)句。
6. 很多的掃描表和對(duì)全表的group by 操作,但是沒(méi)有任何寫表。
13.3 什么情況下使用行鎖行級(jí)鎖定的優(yōu)點(diǎn):
1. 當(dāng)在許多線程中訪問(wèn)不同的行時(shí)只存在少量鎖定沖突。
2. 回滾時(shí)只有少量的更改。
3. 可以長(zhǎng)時(shí)間鎖定單一的行。
行級(jí)鎖定的缺點(diǎn):
1. 比頁(yè)級(jí)或表級(jí)鎖定占用更多的內(nèi)存。
2. 當(dāng)在表的大部分中使用時(shí),比頁(yè)級(jí)或表級(jí)鎖定速度慢,因?yàn)槟惚仨毇@取更多的鎖。
3. 如果你在大部分?jǐn)?shù)據(jù)上經(jīng)常進(jìn)行g(shù)roup by 操作或者必須經(jīng)常掃描整個(gè)表,比其它鎖定明顯慢很多。
4. 用高級(jí)別鎖定,通過(guò)支持不同的類型鎖定,你也可以很容易地調(diào)節(jié)應(yīng)用程序,因?yàn)槠滏i成本小于行級(jí)鎖定。

以上就是mysql中的鎖問(wèn)題的內(nèi)容,更多相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)(www.php.cn)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊15 分享