mysql> show status like 'table%';
成都創(chuàng)新互聯(lián)公司主營(yíng)溫宿網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App定制開(kāi)發(fā),溫宿h5小程序開(kāi)發(fā)搭建,溫宿網(wǎng)站營(yíng)銷(xiāo)推廣歡迎溫宿等地區(qū)企業(yè)咨詢(xún)
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Table_locks_immediate | 19 |
| Table_locks_waited | 0 |
+-----------------------+-------+
2 rows in set (0.00 sec)
MyISAM表讀操作,不會(huì)阻塞其他用戶(hù)對(duì)同一表的讀請(qǐng)求,但會(huì)阻塞對(duì)同一表的寫(xiě)請(qǐng)求;
MyISAM表的寫(xiě)操作,會(huì)阻塞其他用戶(hù)對(duì)同一表的讀請(qǐng)求和寫(xiě)請(qǐng)求。
MyISAM表的讀操作和寫(xiě)操作之間,以及寫(xiě)操作之間是串行的
MyISAM表在執(zhí)行SELECT語(yǔ)句之前,會(huì)自動(dòng)給涉及到的表加讀鎖,在執(zhí)行UPDATE、DELETE、INSERT之前,自動(dòng)給涉及到的表加寫(xiě)鎖。
mysql> lock table tbl_name1 read/write;
mysql> lock tables tbl_name1 read [local], tbl_name2 write [local];
mysql> unlock tables;
mysql> lock table tbl_name1 as tb1 read;
mysql> select a.id from tbl_name tb1;
MyISAM的讀寫(xiě)操作是串行的,但一定程度上,也是支持查詢(xún)和插入的并發(fā)進(jìn)行,但不可以刪除和更新。
0-> 不允許并發(fā)插入;
1-> 在MyISAM表沒(méi)有孔洞的前提下,允許在讀的同時(shí),另一個(gè)進(jìn)程從尾部插入記錄(默認(rèn))
2-> 不論有無(wú)空洞,都可以在表尾并發(fā)插入
mysql> optimize table tbl_name;
已經(jīng)知道,MyISAM存儲(chǔ)引擎的讀鎖和寫(xiě)鎖是互斥的,讀寫(xiě)操作是串行的,但是,及時(shí)讀請(qǐng)求先到達(dá)等待隊(duì)列,寫(xiě)請(qǐng)求后到達(dá)等待隊(duì)列,寫(xiě)鎖也會(huì)插入到讀鎖之前,因?yàn)镸ySQL認(rèn)為寫(xiě)操作比讀操作重要。
同時(shí),這也是MyISAM表不適合有大量更新和查詢(xún)操作的原因,因?yàn)榇罅康母潞筒樵?xún)操作會(huì)占據(jù)鎖等待隊(duì)列,讀鎖會(huì)被長(zhǎng)時(shí)間等待。
為了解決這個(gè)問(wèn)題,我們有一些參數(shù)設(shè)置來(lái)調(diào)節(jié)MyISAM的調(diào)度行為。
啟動(dòng)low-priority-updates,使得MyISAM 默認(rèn)基于讀請(qǐng)求以?xún)?yōu)先的權(quán)利;
降低更新請(qǐng)求的的優(yōu)先級(jí)
mysql> set LOW_PRIORITY_UPDATES=1
指定INSERT、UPDATE、DELETE語(yǔ)句的LOW_PRIORITY屬性,降低該語(yǔ)句的優(yōu)先級(jí)
一種折中的方案:給系統(tǒng)參數(shù)max_write_locl_count設(shè)置一個(gè)合適的值,當(dāng)表的讀操作達(dá)到該值之后,MySQL就暫時(shí)將寫(xiě)請(qǐng)求的優(yōu)先級(jí)降低。
InnoDB與MyISAM的大不同支出在于:1、支持事務(wù);2、采用了行級(jí)鎖。
mysql> show status like 'innodb_row_lock%';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| Innodb_row_lock_current_waits | 0 |
| Innodb_row_lock_time | 0 |
| Innodb_row_lock_time_avg | 0 |
| Innodb_row_lock_time_max | 0 |
| Innodb_row_lock_waits | 0 |
+-------------------------------+-------+
5 rows in set (0.00 sec)
允許一個(gè)事務(wù)去讀一行,阻止其他事務(wù)獲得相同數(shù)據(jù)集的排他鎖
允許獲得排他鎖的事務(wù)更新數(shù)據(jù),阻止其他事務(wù)取得相同數(shù)據(jù)集的共享讀鎖和排他寫(xiě)鎖
事務(wù)在給一個(gè)數(shù)據(jù)行加共享鎖之前,必須先取得該表的IS鎖
事務(wù)在給一個(gè)數(shù)據(jù)行加排他鎖之前,必須先取得該表的IX鎖
對(duì)于UPDATE、DELETE、INSERT語(yǔ)句,InnoDB自動(dòng)給涉及數(shù)據(jù)集加排他鎖;對(duì)于SELECT語(yǔ)句,InnoDB不會(huì)加任何鎖。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。