史萊姆論壇
(
http://forum.slime.com.tw/)
-
論壇程式討論區
(
http://forum.slime.com.tw/f79.html)
Admin1 |
2007-12-12 08:45 PM |
01. MySQL 的整體架構
MySQL的整體架構
採用Client/Server架構www^slime^com^tw由於 MySQL採用了Client/Server架構,因此MySQL的Server端與Client端不一定要在同一台機器上,例如Server端可以是網路上的某台Linux機器,而Client端則是位在另外一台Windows機器上,其概念類似於Web Server與Browser之間的關係。 MySQL主要可以分為三大部份www^slime^com^tw- MySQL Server:MySQL資料庫系統的Server端,也就是mysqld這支程式執行時所在的機器。
- Client Program:MySQL資料庫系統的Client端,有了Client端你才可以與MySQL Server進行互動,例如連線至MySQL Server新增、刪除資料或是建立新的資料表等等。
- Non-Client Utility Program:一些用來協助管理MySQL Server的工具程式,例如myisamchk可用來修復受損的資料表。
MySQL所使用的通訊協定www^slime^com^tw既然MySQL是使用Client/Server架構,那麼當Client端需要與Server端溝通時便需要遵循特定的通訊協定,下表便是MySQL所使用的通訊協定。  若是MySQL的Client端與Server端皆位在同一台機器上,那麼在作業系統支援的前提下,Client端可以使用以上所提到的所有通訊協定與MySQL Server進行溝通。但若Client端與Server端各別位在不同的機器上,則Client只能夠透過TCP/IP與MySQL Server進行溝通。 二階層處理模式www^slime^com^tw當MySQL Server收到來自Client端送來的SQL Statement後,會分成二個階層來處理。 - 第一個階層-SQL 解析與最佳化:MySQL Server會先解析所收到的SQL Statement並對它進行最佳化,以得到較高的執行效率。在這個階層中並不會實際去存取儲存在資料庫中的資料。
- 第二個階層-由各種Storage Engine組成:Storage Engine可以視為用來管理資料表的軟體模組,由它來負責實際存取儲存在資料表中的資料。
MySQL如何使用磁碟空間www^slime^com^tw在MySQL Server安裝完畢後,相關的檔案將會放置在MySQL的Data Directory中,在Data Directory中大致有以下的資料。- 資料庫目錄:MySQL Server允許你同時管理多個資料庫,而每一個資料庫都會分別在Data Directory中建立同名的目錄。例如若是MySQL的Data Directory為 /var/lib/mysql,則當你建立一個名字為slime的新資料庫時,在系統便會自動在 /var/lib/mysql目錄下建立一個名為slime的新資料夾(/var/lib/mysql/slime)。
- 資料表的格式檔(*.frm):用來記錄資料表的實際結構,此檔案會位在資料庫目錄中。例如若在slime這個資料庫中建立一個名為first_home的資料表,則在 /var/lib/mysql/slime目錄下,系統便會自動產生slime.frm這個檔案。
- 資料檔(*.MYD)與索引檔(*.MYI):承上例,若slime這個資料表使用的Storage Engine為MyISAM,則系統會自動在資料庫目錄下建立slime.MYD與slime.MYI這兩個檔案。slime.MYD用來實際儲存slime這個資料表所包含的資料;slime.MYI則是用來儲存slime這個資料表的索引(Index)。註:MyISAM中的ISAM指的是:Indexed Sequential Access Method。
- InnoDB Storage Engine所使用的tablespace與Log File:與MyISAM Storage Engine不同的是,InnoDB會將所有的資料庫與資料表儲存在單一(或是多個)檔案中,預設是 ibdata1 這個檔案;而transaction所需使用的Log File則預設為ib_logfile0與ib_logfile1。上述三個檔案預設皆位在 /var/lib/mysql 目錄下(MySQL的Data Directory)。
- MySQL Server本身的Log File與Status File:在這些檔案中記錄了Server所執行的各種操作與狀態,主要用來進行Data Recovery、Replication或是分析Server的運作效率,以及檢測各種可能的問題。
MySQL如何使用記憶體www^slime^com^tw- Thread Handlers:MySQL Server是Multi-Threaded,一個來自Client端的連線即代表一個Thread,為了避免Client端在大量建立與終止連線時所造成的overhead,MySQL Server會將Thread 快取起來,以減少所需建立與終止的Thread數量。
- Memory Storage Engine:將資料表建立在記憶體之中(而非檔案系統)以加快存取效率,當MySQL Server重新啟動時該資料表也將會消失。
- Server建立的暫時性資料表:當MySQL Server在處理Query時會在記憶體內建立暫時性資料表,但若是該資料表的大小超過tmp_table_size所設定的上限,則Server會改在檔案系統上建立暫時性資料表並將Created_tmp_disk_tables的值加一。
<Server所使用的各種Buffer>
- Grant Table Buffer:用來存放Grant Table的Buffer,Grant Table中記錄了使用者的各項權限,在每次執行client端送過來的指令前,MySQL Server必須查核grant table以確定該使用者是否具備相對應的權限。為了加快查核的動作,MySQL Server會將grant table快取在memory中。
- Key Buffer:用來存放MyISAM table的索引(Index),以避免每次存取索引資料時(例如排序)都要重新從磁碟中讀取資料,但要注意的是MySQL只會對資料表的索引進行快取,而不會對資料表的內容進行快取。資料表內容的快取是交由作業系統來處理,而不是由MySQL負責。
- Table Cache:用來存放資料表的descriptors,以減低檔案重覆開啟與關閉的機率,降低系統負載。註:可以把資料表的descriptors看做是資料表在檔案系統上實際對應到的檔案。
- Query Cache:用來存放前一次的Query Result,以加快重覆執行某個Query時的效率。
- Host Cache:用來存放DNS名稱解析的結果,以降低不必要的DNS Query。
- InnoDB Storage Engine所使用的Log:主要用來記錄目前的transaction狀態,可用以進行roll back或是recommit。
參考資料: www^slime^com^tw
Paul Dubois, Stefan Hinz, Carsten Pedersen(2005), “MySQL 5.0 Certification Study Guide.”
|
所有時間均為台北時間。現在的時間是 10:06 PM。 |
|
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *