Mysql基礎教程 mysql進階

Mysql并發插入



My ISAM表鎖(并發插入)


并發插入(Concurrent Inserts)


上文提到過MyISAM表的讀和寫是串行的,但這是就總體而言的。在一定條件下,MyISAM表也支持查詢和插入操作的并發進行。這里面的并發就是同時進行的意思。


我們先來看看我們的系統對我們并發的設置操作。MyISAM存儲引擎有一個系統變量concurrent_insert,專門用以控制其并發插入的行為,其值分別可以為0、1或2。


1)當concurrent_insert設置為0時,不允許并發插入。


2)當concurrent_insert設置為1時,如果MyISAM表中沒有空洞(即表的中間沒有被刪除的行),MyISAM允許在一個進程讀表的同時,另一個進程從表尾插入記錄。這也是MySQL的默認設置。


3)當concurrent_insert設置為2時,無論MyISAM表中有沒有空洞,都允許在表尾并發插入記錄。



示例1:concurrent_insert設置為2


開啟客戶端1。


0.png


開啟客戶端2。


1.png


均使用companys這個數據庫。


2.png


在這個數據庫下面,我們首先來看一下這個變量值是AUTO。


3.png


先把concurrent_insert設置為2。


4.png


給employees這張表加一個讀的鎖,允許它并發操作。


5.png


這個表已經被我讀的鎖鎖定了,不能夠更新。


6.png


把剛剛的插入語句放到另一個客戶端去執行,這里面我們是能夠執行的。


7.png


我們可以查看剛剛插入的數據5678。


8.png


另一個客戶端插入這個數據,被我當前的鎖定的這張表它實際上是不能訪問的。這里5678是不存在的,是因為5678是另一個非鎖定的客戶端它插入以后的。


9.png


在客戶端1,我們再進行更新,這里是不能進行更新的,是因為這里被讀的鎖鎖定了,一旦被讀的鎖鎖定了之后,在客戶端1只能進行查詢操作。而另一個客戶端,由于我們剛剛把concurrent_insert設置為2,實際上它是可以進行插入的,但是它插入的這個值不能被我們這個鎖定的session給訪問的到。


90.png


再次解鎖。


91.png


查詢employees這張表。


92.png



案例2


concurrent_insert設置為1。


93.png


給employees進行一個讀的鎖。


94.png


在另一個客戶端插入5698,它實際上已經在等待了,這里面已經出現了表的互動,它是不允許并發插入的,一旦我們給它解鎖之后,它才可以實現數據的插入。


95.png


解鎖。


96.png


已經插入,這是我們的并發插入,這里的并發插入實際上是lock這樣的關鍵字。


97.png



My ISAM鎖的調度


思考?


 一個進程請求某個MyISAM表的讀鎖,同時另一個進程也請求同一表的寫鎖?Mysql如何處理呢?


答案:寫進程先獲得鎖,即使讀請求先到鎖等待隊列,寫請求后到,寫請起后到,寫鎖也會插到讀鎖隊列。Mysql認為寫請求比讀請求更重要。MyISAM不太適合于有大量更新操作和查詢操作的原因,因為,大量的更新操作會造成查詢操作很難獲得讀鎖,從而可能永遠阻塞。讀的這個進程會一直等到這個寫的進程完成之后,它才會得到這個請求。


解決方法


執行 set low_priority_updates =1;使該連接發出的更新請求優先級降低。它的優先級降低那么實際上這個查詢操作就更能獲得我們這個鎖。 其中insert,delete也可以通過此種方法指定。


示例


優先級降低,那么我們讀的時候就能夠獲得這個鎖。


98.png


我們這一小節主要講解了并發插入數據,這個并發插入數據主要的含義就是當我們對這張表加一個讀的這個鎖的時候,允許另一個session對這張表進行一個數據的插入,但是這個數據插入不能夠被讀的這個鎖訪問的到。另外就是我們在操作讀的這個鎖的時候,如下:給張表加入一個進程,給這個表加一個讀的鎖。


99.png


加一個讀的鎖之后,現在是誒辦法對這個表進行一個插入操作的,那么更新操作實際上也是一樣的,直到我們把這個鎖解鎖之后。還有就是concurrent_insert這個值是否允許并發,或者說設置在什么情況下可以進行并發。


990.png



【本文由麥子學院獨家原創,轉載請注明出處并保留原文鏈接】

logo
? 2012-2016 www.jvbprd.live
蜀ICP備13014270號-4 Version 5.0.0 release20160127

免費領取價值1888元求職寶典!

客服熱線 400-862-8862

回到頂部

彩票安徽25选5 开车赚钱平安 凤凰彩票游戏 蚂蚁帮扶如何快速赚钱 大乐购苹果 哪些游戏工作室赚钱方法 苹果系统打码赚钱软件 无本钱如何赚钱方法 4399捕鱼大亨无敌版 亚运城销售赚钱吗 ok99彩票游戏 赚钱软件几分钟就 块的 二元期权赚钱不 大圣捕鱼游戏视频 试玩游戏可以赚钱的 微信扫码用户自己转发赚钱 qq宠物欢乐捕鱼