程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 有關MyISAM引擎的鎖定機制,myisam引擎機制

有關MyISAM引擎的鎖定機制,myisam引擎機制

編輯:MySQL綜合教程

有關MyISAM引擎的鎖定機制,myisam引擎機制



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

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

 

在mysql數據庫中,MyISAM存儲引擎適合於讀頻率遠大於寫頻率這一情況。 目前的應用可能會出現在某一時段讀寫頻率相當。

 

大致如下: 一個客戶端發出需要長時間運行的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語句

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


教,一個全是MyISAM存儲引擎的數據庫是怎解決並發問題與事務處理的? - 技術問答

MySQL的MyISAM內部有這些機制,實現其並發控制的,但是它並不支持外鍵
 

MyISAM引擎是什,常用作什

MyISAM是默認存儲引擎。它基於更老的ISAM代碼,但有很多有用的擴展。(注意MySQL 5.1不支持ISAM)。

每個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。.frm文件存儲表定義。數據文件的擴展名為.MYD (MYData)。索引文件的擴展名是.MYI (MYIndex)。

要明確表示你想要用一個MyISAM表格,請用ENGINE表選項指出來:

CREATE TABLE t (i INT) ENGINE = MYISAM;
注釋:老版本的MySQL使用TYPE而不是ENGINE(例如,TYPE = MYISAM)。MySQL 5.1為向下兼容而支持這個語法,但TYPE現在被輕視,而ENGINE是首先的用法。

一般地,ENGINE選項是不必要的;除非默認已經被改變了,MyISAM是默認存儲引擎。

如下是MyISAM存儲引擎的一些特征:

· 所有數據值先存儲低字節。這使得數據機和操作系統分離。二進制輕便性的唯一要求是機器使用補碼(如最近20年的機器有的一樣)和IEEE浮點格式(在主流機器中也完全是主導的)。唯一不支持二進制兼容性的機器是嵌入式系統。這些系統有時使用特殊的處理器。

先存儲數據低字節並不嚴重地影響速度;數據行中的字節一般是未聯合的,從一個方向讀未聯合的字節並不比從反向讀更占用更多的資源。服務器上的獲取列值的代碼與其它代碼相比並不顯得時間緊。

· 大文件(達63位文件長度)在支持大文件的文件系統和操作系統上被支持。

· 當把刪除和更新及插入混合的時候,動態尺寸的行更少碎片。這要通過合並相鄰被刪除的塊,以及若下一個塊被刪除,就擴展到下一塊來自動完成。

· 每個MyISAM表最大索引數是64。 這可以通過重新編譯來改變。每個索引最大的列數是16個。

· 最大的鍵長度是1000字節。這也可以通過編譯來改變。對於鍵長度超過250字節的情況,一個超過1024字節的的鍵塊被用上。

· BLOB和TEXT列可以被索引。

· NULL值被允許在索引的列中。這個占每個鍵的0-1個字節。

· 所有數字鍵值以高字節為先被存儲以允許一個更高地索引壓縮。

· 當記錄以排好序的順序插入(就像你使用一個AUTO_INCREMENT列之時),索引樹被劈開以便高節點僅包含一個鍵。這改善了索引樹的空間利用率。

· 每表一個AUTO_INCREMEN列的內部處理。MyISAM為INSERT和UPDATE操作自動更新這一列。這使得AUTO_INCREMENT列更快(至少10%)。在序列頂的值被刪除之後就不能再利用。(當AUTO_INCREMENT列被定義為多列索引的最後一列,可以出現重使用從序列頂部刪除的值的情況)。AUTO_INCREMENT值可用ALTER TABLE或myisamch來重置。

· 如果數據文件中間的表沒有自由塊了,在其它線程從表讀的同時,你可以INSERT新行到表中。(這被認識為並發操作)。自由塊的出現是作為刪除行的結果,或者是用比當前內容多的數據對動態長度行更新的結果。當所有自由塊被用完(填滿),未來的插入又變成並發。

· 你可以把數據文件和索引文件放在不同目錄,用DATA DIRECTORY和INDEX DIRECTORY選項CREATE TABLE以獲得更......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved