寫入請求將按它們到達(dá)服務(wù)器的順序進(jìn)行處理;
寫操作的優(yōu)先級(jí)要高于讀操作。
MyISAM和ISAM數(shù)據(jù)表的調(diào)度策略是在數(shù)據(jù)表鎖的幫助下實(shí)現(xiàn)的,在客戶程序要訪問數(shù)據(jù)表之前,需獲得相應(yīng)的鎖,在完成對數(shù)據(jù)表的操作后,再釋放該鎖。鎖的管理通常由服務(wù)器管理,也可人為地用LOCK TABLES和UNLOCK TABLES命令來申請和釋放鎖。寫操作時(shí),需要申請一個(gè)獨(dú)占性的鎖,也就是說在寫操作其間,該表只能由寫操作的客戶使用。讀操作時(shí),客戶必須申請一個(gè)允許其他客戶對數(shù)據(jù)表進(jìn)行寫操作的鎖,以確保客戶在讀的過程中數(shù)據(jù)表不會(huì)發(fā)生改變。但讀操作鎖不是獨(dú)占的,可有多個(gè)讀操作同時(shí)作用于同一個(gè)數(shù)據(jù)表。
通過一些修飾符可影響調(diào)度策略,如LOW_PRIORITY(用于DELETE,INSERT,LOAD DATA,REPLACE,UPDATE語句)、HIGH_PRIORITY(用于SELECT語句)、DELAYED(用于INSERT和REPLACE語句)。它們的作用是這樣的:
LOW_PRIORITY會(huì)使寫操作的優(yōu)先級(jí)降低到讀操作以下,也就是說讀操作會(huì)阻塞該級(jí)別的寫操作,SELECT的HIGH_PRIORITY有類似的作用。
INSERT語句中的DELAYED修飾會(huì)使插入操作被放入一個(gè)“延遲插入”隊(duì)列。并返回狀態(tài)信息給客戶,使客戶程序可在新數(shù)據(jù)行還沒插入到數(shù)據(jù)表之前繼續(xù)執(zhí)行后面的操作。如果一直有客戶讀該數(shù)據(jù)表,新數(shù)據(jù)行會(huì)一直待在隊(duì)列中,直到數(shù)據(jù)表沒有讀操作時(shí),服務(wù)器才會(huì)把隊(duì)列中的數(shù)據(jù)行真正插入到數(shù)據(jù)表中。該語句可用在以下場合,在一個(gè)有冗長查詢的數(shù)據(jù)表中插入數(shù)據(jù),而你又不想被阻塞,你就可發(fā)出INSERT DELAYED語句,把插入操作放入服務(wù)器“延遲插入”隊(duì)列,你無需等待就馬上可進(jìn)行接下來的操作。
當(dāng)一個(gè)數(shù)據(jù)表里從未進(jìn)行過刪除操作或剛剛對它進(jìn)行過碎片整理的情況下,用INSERT語句插入的數(shù)據(jù)行只會(huì)被添加到數(shù)據(jù)表的末尾,而不會(huì)插入到數(shù)據(jù)表的中間位置。這樣,對于MyISAM表,MySQL允許在有其它客戶正在讀操作的時(shí)間進(jìn)行寫操作。我們稱之這并發(fā)插入。要使用該技巧,需注意以下兩個(gè)問題:
不要在INSERT語句中使用LOW_PRIORITY修飾符。
讀操作應(yīng)用LOCK TABLES ... READ LOCAL而不是用LOCK TABLES ... READ語句來進(jìn)行數(shù)據(jù)表讀鎖定。LOCAL關(guān)鍵字只對數(shù)據(jù)表中已存在行進(jìn)行鎖定,不會(huì)阻塞把新行添加到數(shù)據(jù)表末尾。
BDB數(shù)據(jù)表使用頁面級(jí)操作鎖,InnoDB數(shù)據(jù)表使用數(shù)據(jù)行級(jí)操作鎖。所以這兩種表的并發(fā)性比MyISAM和ISAM數(shù)據(jù)表這種表級(jí)鎖的并發(fā)性會(huì)好很多。其中InnoDB的并發(fā)性最好。綜上所述,我們可得出以下結(jié)論:
MyISAM和ISAM數(shù)據(jù)表的檢索速度最快,但如果在檢索和修改操作較多的場合,會(huì)出鎖競爭的問題,造成等待時(shí)間延長。
BDB和InnoDB數(shù)據(jù)表能在有大量修改操作的環(huán)境下提供很好的并發(fā)性,從而提供更好的性能。
MyISAM和ISAM數(shù)據(jù)表由于進(jìn)行表級(jí)鎖定,所以不會(huì)出現(xiàn)死鎖現(xiàn)象,BDB和InnoDB數(shù)據(jù)表則存在死鎖的可能性。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com