国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql(MyISAM)的讀寫互斥鎖問題的解決方法

2020-01-19 00:04:16
字體:
來源:轉載
供稿:網友
由于沒辦法在短期內增加讀的服務器,所以采取對Mysql進行了一些配置,以犧牲數據實時性為代價,來換取所有服務器的生命安全。呵呵,具體相關調整以及思路如下:

MyISAM在讀操作占主導的情況下是很高效的。可一旦出現大量的讀寫并發,同InnoDB相比,MyISAM的效率就會直線下降,而且,MyISAM和 InnoDB的數據存儲方式也有顯著不同:通常,在MyISAM里,新數據會被附加到數據文件的結尾,可如果時常做一些UPDATE,DELETE操作之后,數據文件就不再是連續的,形象一點來說,就是數據文件里出現了很多洞洞,此時再插入新數據時,按缺省設置會先看這些洞洞的大小是否可以容納下新數據,如果可以,則直接把新數據保存到洞洞里,反之,則把新數據保存到數據文件的結尾。之所以這樣做是為了減少數據文件的大小,降低文件碎片的產生。但 InnoDB里則不是這樣,在InnoDB里,由于主鍵是cluster的,所以,數據文件始終是按照主鍵排序的,如果使用自增ID做主鍵,則新數據始終是位于數據文件的結尾。

了解了這些基礎知識,下面說說MyISAM幾個容易忽視的配置選項:

concurrent_insert:

通常來說,在MyISAM里讀寫操作是串行的,但當對同一個表進行查詢和插入操作時,為了降低鎖競爭的頻率,根據concurrent_insert的設置,MyISAM是可以并行處理查詢和插入的:

當concurrent_insert=0時,不允許并發插入功能。

當concurrent_insert=1時,允許對沒有洞洞的表使用并發插入,新數據位于數據文件結尾(缺省)。

當concurrent_insert=2時,不管表有沒有洞洞,都允許在數據文件結尾并發插入。

這樣看來,把concurrent_insert設置為2是很劃算的,至于由此產生的文件碎片,可以定期使用OPTIMIZE TABLE語法優化。

max_write_lock_count:

缺省情況下,寫操作的優先級要高于讀操作的優先級,即便是先發送的讀請求,后發送的寫請求,此時也會優先處理寫請求,然后再處理讀請求。這就造成一個問題:一旦我發出若干個寫請求,就會堵塞所有的讀請求,直到寫請求全都處理完,才有機會處理讀請求。此時可以考慮使用max_write_lock_count:

max_write_lock_count=1

有了這樣的設置,當系統處理一個寫操作后,就會暫停寫操作,給讀操作執行的機會。

low-priority-updates:

我們還可以更干脆點,直接降低寫操作的優先級,給讀操作更高的優先級。

low-priority-updates=1

綜合來看,concurrent_insert=2是絕對推薦的,至于max_write_lock_count=1和low-priority-updates=1,則視情況而定,如果可以降低寫操作的優先級,則使用low-priority-updates=1,否則使用max_write_lock_count=1。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 读书| 盐城市| 林周县| 读书| 新龙县| 东方市| 武平县| 红河县| 繁峙县| 高平市| 鄢陵县| 安岳县| 东乡| 军事| 商城县| 蒙城县| 石台县| 东乌| 侯马市| 临漳县| 镇雄县| 舟山市| 聂荣县| 疏附县| 临颍县| 仁化县| 红原县| 仙桃市| 星子县| 芜湖市| 鄂托克前旗| 双桥区| 临澧县| 台前县| 延津县| 南木林县| 鄢陵县| 淄博市| 林西县| 榆树市| 大邑县|