有關MyISAM引擎的鎖定機制


本文介紹下,mysql數據庫中MyISAM引擎的鎖定機制的相關知識,感興趣的朋友能夠參考下。html

本節內容: MyISAM引擎的鎖定機制mysql

 

在mysql數據庫中,MyISAM存儲引擎適合於讀頻率遠大於寫頻率這一狀況。 目前的應用可能會出如今某一時段讀寫頻率至關。sql

 

大體以下: 一個客戶端發出須要長時間運行的SELECT 其餘客戶端在同一個表上發出INSERT或者UPDATE,這個客戶將等待SELECT完成 另外一個客戶在同一個表上發出另外一個SELECT;因UPDATE或INSERT比SELECT有更高有優先級,該SELECT將等待UPDATE或INSERT完成,也將等待第一個SELECT完成 也就是說對MyISAM表的讀操做,不會阻塞其餘用戶對同一表的讀請求,但會阻塞對同一表的寫請求;對 MyISAM表的寫操做,則會阻塞其餘用戶對同一表的讀和寫操做 ;MyISAM表的讀操做與寫操做之間,以及寫操做之間是串行的!數據庫

 

解決方案: MyISAM存儲引擎有一個系統變量concurrent_insert,專門用以控制其併發插入的行爲,其值分別能夠爲0、1或2。 0 不容許併發操做 1 若是MyISAM表中沒有空洞(即表的中間沒有被刪除的行),MyISAM容許在一個進程讀表的同時,另外一個進程從表尾插入記錄。這也是MySQL的默認設置。 2 不管MyISAM表中有沒有空洞,都容許在表尾併發插入記錄 使用--low-priority-updates啓用mysqld。這將給全部更新(修改)一個表的語句以比SELECT語句低的優先級。在這種狀況下,在先前情形的最後的SELECT語句將在INSERT語句 前執行。併發

 

爲max_write_lock_count設置一個低值,使得在必定數量的WRITE鎖定後,給出READ鎖定 使用LOW_PRIORITY屬性給於一個特定的INSERT,UPDATE或DELETE較低的優先級 使用HIGH_PRIORITY屬性給於一個特定的SELECT 使用INSERT DELAYED語句htm

文章轉載:http://bbs.it-home.org/thread-17004-1-1.html進程

相關文章
相關標籤/搜索