史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 論壇程式討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2007-12-12, 08:45 PM   #1
Admin1
管理員
 
Admin1 的頭像
榮譽勳章
UID - 112827
在線等級: 級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時級別:29 | 在線時長:972小時 | 升級還需:48小時
註冊日期: 2007-02-18
VIP期限: 0000-00
文章: 3507
精華: 0
現金: 1702 金幣
資產: 10196 金幣
預設 SQL - 01. MySQL 的整體架構

MySQL的整體架構

採用Client/Server架構www^slime^com^tw
由於 MySQL採用了Client/Server架構,因此MySQLServer端與Client端不一定要在同一台機器上,例如Server端可以是網路上的某台Linux機器,而Client端則是位在另外一台Windows機器上,其概念類似於Web ServerBrowser之間的關係。
MySQL主要可以分為三大部份www^slime^com^tw
  1. MySQL ServerMySQL資料庫系統的Server端,也就是mysqld這支程式執行時所在的機器。
  2. Client ProgramMySQL資料庫系統的Client端,有了Client端你才可以與MySQL Server進行互動,例如連線至MySQL Server新增、刪除資料或是建立新的資料表等等。
  3. Non-Client Utility Program:一些用來協助管理MySQL Server的工具程式,例如myisamchk可用來修復受損的資料表。
MySQL所使用的通訊協定www^slime^com^tw
既然MySQL是使用Client/Server架構,那麼當Client端需要與Server端溝通時便需要遵循特定的通訊協定,下表便是MySQL所使用的通訊協定。
http://luchinwei.myweb.hinet.net/mysql_certification/protocol_table.jpg
若是MySQLClient端與Server端皆位在同一台機器上,那麼在作業系統支援的前提下,Client端可以使用以上所提到的所有通訊協定與MySQL Server進行溝通。但若Client端與Server端各別位在不同的機器上,則Client只能夠透過TCP/IPMySQL Server進行溝通。
二階層處理模式www^slime^com^tw
MySQL Server收到來自Client端送來的SQL Statement後,會分成二個階層來處理。
  1. 第一個階層-SQL 解析與最佳化:MySQL Server會先解析所收到的SQL Statement並對它進行最佳化,以得到較高的執行效率。在這個階層中並不會實際去存取儲存在資料庫中的資料。
  2. 第二個階層-由各種Storage Engine組成:Storage Engine可以視為用來管理資料表的軟體模組,由它來負責實際存取儲存在資料表中的資料。
MySQL如何使用磁碟空間www^slime^com^tw
MySQL Server安裝完畢後,相關的檔案將會放置在MySQLData Directory中,在Data Directory中大致有以下的資料。
  • 資料庫目錄:MySQL Server允許你同時管理多個資料庫,而每一個資料庫都會分別在Data Directory中建立同名的目錄。例如若是MySQLData 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 EngineMyISAM,則系統會自動在資料庫目錄下建立slime.MYDslime.MYI這兩個檔案。slime.MYD用來實際儲存slime這個資料表所包含的資料;slime.MYI則是用來儲存slime這個資料表的索引(Index)。註:MyISAM中的ISAM指的是:Indexed Sequential Access Method。

  • InnoDB Storage Engine所使用的tablespaceLog File:與MyISAM Storage Engine不同的是,InnoDB會將所有的資料庫與資料表儲存在單一(或是多個)檔案中,預設是 ibdata1 這個檔案;而transaction所需使用的Log File則預設為ib_logfile0ib_logfile1。上述三個檔案預設皆位在 /var/lib/mysql 目錄下(MySQLData Directory)
  • MySQL Server本身的Log FileStatus File:在這些檔案中記錄了Server所執行的各種操作與狀態,主要用來進行Data RecoveryReplication或是分析Server的運作效率,以及檢測各種可能的問題。
MySQL如何使用記憶體www^slime^com^tw
  • Thread HandlersMySQL ServerMulti-Threaded,一個來自Client端的連線即代表一個Thread,為了避免Client端在大量建立與終止連線時所造成的overheadMySQL 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 TableBufferGrant 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.”

此帖於 2007-12-13 12:47 PM 被 Admin1 編輯.
Admin1 目前離線  
送花文章: 8870, 收花文章: 2195 篇, 收花: 5820 次
回覆時引用此帖
有 2 位會員向 Admin1 送花:
heavenheaven (2007-12-13),tmsyy (2007-12-13)
感謝您發表一篇好文章
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
討論 - 辨識 MySQL Slow Queries 的一般性原則 Admin1 論壇程式討論區 0 2007-06-24 01:17 PM
MySQL 效能監控工具--mysqlreport Admin1 作業系統操作技術文件 1 2007-06-17 09:24 PM


所有時間均為台北時間。現在的時間是 11:21 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1