標籤:
MySQL效能調優與架構設計——第1章 MySQL 基本介紹
前言:
作為最為流行的開來源資料庫軟體之一, MySQL 資料庫軟體已經是廣為人知了。 但是為了照顧對MySQL還不熟悉的讀者,這章我們將對 MySQL 做一個簡單的介紹。主要內容包括MySQL 各功能模組組成,各模組協同工作原理, Query 處理的流程等。
1.1 MySQLServer 簡介
1.1.1 什麼是 MySQL
MySQL 是由MySQL AB公司(目前已經被SUN公司收歸麾下,SUN已經被Oracle收購)自主研發的,目前IT行業最流行的開放原始碼的資料庫管理系統之一,它同時也是一個支援多線程高並發多使用者的關係型資料庫管理系統。
MySQL 資料庫以其簡單高效可靠的特點, 在最近短短几年的時間就從一個名不見經傳的資料庫系統,變成一個在IT行業幾乎是無人不知的開來源資料庫管理系統。從微型的嵌入式
系統,到小型的web網站,至大型的企業級應用,到處都可見其身影的存在。為何一個開源的資料庫管理系統會變得如此的流行呢?在我2003年第一次接觸MySQL之前,也是非常的納悶?或許在我大概的向您介紹一下其發展曆程之後,心中的這個問題就會消失了。
1.1.2 艱難誕生
1985年,瑞典的幾位志同道合小夥子(以David Axmark 為首) 成立了一家公司, 這就是MySQL AB的前身。這個公司最初並不是為了開發資料庫產品,而是在實現他們想法的過程中, 需要一個資料庫。他們希望能夠使用開源的產品。 但在當時並沒有一個合適的選擇,沒辦法,那就自己開發吧。在最初, 他們只是自己設計了一個利用索引順序存取資料的方法, 也就是ISAM ( Indexed Sequential Access Method) 儲存引擎核心演算法的前身, 利用ISAM結合mSQL來實現他們的應用需求。在早期,他們主要是為瑞典的一些大型零售商提供資料倉儲服務。在系統使用過程中,隨著資料量越來越大,系統複雜度越來越高, ISAM和mSQL的組合逐漸不堪重負。 在分析效能瓶頸之後,他們發現問題出在mSQL上面。不得已,他們拋棄了mSQL,重新開發了一套功能類似的資料存放區引擎,這就是ISAM 儲存引擎。大家可能已經注意到他們當時的主要客戶是資料倉儲,應該也容易理解為什麼直至現在, MySQL 最擅長的是查詢效能,而不是交易處理(需要藉助第三方儲存引擎) 。軟體誕生,自然該給她取一個好聽並且容易記住的名字。時至今日, MySQL AB仍然沒有公布當初為什麼給這個資料庫系統取名為MySQL。據傳MySQL是取自創始人之一Monty Widenius的女兒的名字或許大家會認為這僅僅是我的猜測,不以為然,其實也並不是完全沒有根據的。大家或許知道MySQL最近正在研發的用來替代MyISAM儲存引擎的新一代儲存引擎產品Maria, 為什麼叫Maria? 筆者對這個問題也比較感興趣, 曾經和 MySQL前 CTO
David 溝通過。得到的答案是, Maria 是以他小女兒的名字命名的。看來,這是幾位 MySQL 的創始人為自己的軟體命名的一個習慣。在MySQL誕生之初, 其功能還非常粗糙, 和當時已經成熟穩定運營多年的商務資料庫管理系統完全不能比。 MySQL之所以能夠成功,和幾個創始人最初採用的策略關係非常大。
1.1.3 尋求發展
MySQL誕生的時候, 正是互連網開始高速發展的時期。MySQL AB通過最佳化MySQL滿足了互連網開發用者對資料庫產品的需求:標準化查詢語言的支援,高效的資料存取,不必關注事務完整性,簡單易用,而且成本低廉。當時大量的小公司都願意採用MySQL作為資料庫應用系統的資料庫管理系統,所以MySQL的使用者數量不斷的增長,進一步促進了 MySQL自身的不斷改進和完善,進入了一個非常好的良性迴圈。合理地把握需求, 準確地定位勘探,為MySQL後面的發展鋪平了道路。我們看到,MySQL一開始就沒有拿大型的企業管理軟體的資料庫系統來定位自己,沒有將所有的IT 行業定位為自己的目標使用者, 而是選擇的當時並不受重視的一小部分Web開發人員作為自己的客戶來重點培養發展。這種做法或許值得我們的IT企業學習。
1.1.4 巨人崛起
可以說, 正是MySQL最初抓住了互連網客戶, 造就了今天MySQL在互連網行業的巨大成功。當然, MySQL的高速發展,同時也離不開另外一個很關鍵的因素,那就是開放原始碼。在 2000年的時候, MySQL公布了自己的原始碼,並採用 GPL( GNU General Public License)許可協議,正式進入開源世界。雖然在當時的環境下,開源還沒有現在這樣流行,但是那是開源世界開始真正讓大多數世人所接受並開始推崇的起步階段。 當然MySQL的成功並不僅僅是因為以上的這些原因, 但我們不能否認正是MySQL這一戰略性質的策略讓MySQL在進一步拓展自己的客戶群 的路上一路東風。此後MySQL的發展路程我想就不需要我繼續再次羅嗦了,因為基本上都可以從MySQL的官方網站( http://www.mysql.com)得到相應的答案。
1.2 MySQL 與其他資料庫的簡單比較
前面我們簡單介紹了MySQL的發展曆程, 從中瞭解了MySQL快速崛起的必要的條件。接下來,我們通過MySQL在功能,效能,以及其易用性方面和其他主流的資料庫做一個基本的
比較,來瞭解一下MySQL成為當下最流行的開來源資料庫軟體的充分條件。
1.2.1 功能比較
作為一個成熟的資料庫管理系統, 要滿足各種各樣的商業需求, 功能肯定是會被列入重點參考對象的。 MySQL雖然在早期版本的時候功能非常簡單,只能做一些很基礎的結構化資料存取操作, 但是經過多年的改進和完善之後, 已經基本具備了所有通用資料庫管理系統所需要的相關功能。
MySQL基本實現了ANSI SQL 92的大部分標準, 僅有少部分並不經常被使用的部分沒有實現。比如在欄位類型支援方面,另一個著名的開來源資料庫PostGreSQL支援的類型是最完整的,而Oracle和其他一些商務資料庫,比如DB2、 Sybase等,較MySQL來說也要相對少一些。這一點,我們可以通過TCX的crash-me測試套件所得出的測試報告得知。在事務支援方面,雖然MySQL自己的儲存引擎並沒有提供,但是已經通過第三方外掛程式式儲存引擎Innodb實現了SQL 92標準所定義的四個交易隔離等級的全部, 只是在實現的過程中每一種的實現方式可能有一定的區別,這在當前商用資料庫管理系統中都不多見。比如,大家所熟知的大名鼎鼎的Oracle資料庫就僅僅實現了其中的兩種 ( Serializable和Read Commited),而PostGreSQL,同樣支援四種隔離等級。
不過在可程式化支援方面,MySQL和其他資料庫相比還有一定的差距, 雖然最新版的MySQL已經開始提供一些簡單的可程式化支援,如開始支援 Procedure, Function, Trigger等, 但是所支援的功能還比較有限,和其他幾大商用資料庫管理系統相比,還存在較大的不足。 如Oracle有強大的PL/SQL, SQL Server 有T-SQL, PostGreSQL也有功能很完善的PL/PGSQL的支援。
整體來說, 雖然在功能方面MySQL資料庫作為一個通用的資料庫管理系統暫時還無法和PostGreSQL相比,但是其功能完全可以滿足我們的通用商業需求,提供足夠強大的服務。而且不管是哪一種資料庫在功能方面都不敢聲稱自己比其他任何一款商用通用資料庫管理系統都強, 甚至都不敢聲稱能夠自己擁有某一資料庫產品的所有功能。 因為每一款資料庫管理系統都有起自身的優勢, 也有起自身的限制, 這隻能代表每一款產品所傾向的方向不一樣而已。
1.2.2 易用性比較
從系統易用性方面來比較, 每一個使用過MySQL的使用者都能夠明顯地感覺出MySQL在這方面與其他通用資料庫管理系統之間的優勢所在。 尤其是相對於一些大型的商務資料庫管理系統如Oracle、 DB2以及Sybase來說,對於普通使用者來說,操作的難易程度明顯不處於一個層級。 MySQL一直都奉行簡單易用的原則,也正是靠這一特性,吸引了大量的初級資料庫使用者最終選擇了MySQL。也正是這一批又一批的初級使用者,在經過了幾年時間的成長之後,很多都已經成為了進階資料庫使用者,而且也一直都在伴隨著MySQL成長。
從安裝方面來說, MySQL 安裝包大小僅僅只有100MB左右, 這幾大商務資料庫完全不在一個數量級。 安裝難易程度也要比 Oracle 等商務資料庫簡單很多, 不論是通過已經編譯好的二進位分發包還是源碼編譯安裝,都非常簡單。再從資料庫建立來比較, MySQL 僅僅只需要一個簡單的 CREATE DATABASE 命令,即可在瞬間完成建庫的動作, 而 Oracle 資料庫與之相比,建立一個資料庫簡直就是一個非常龐大的工程。當然,二者資料庫的概念存在一定差別也不可否認。
1.2.3 效能比較
效能方面, 一直是MySQL引以為自豪的一個特點。 在權威的第三方評測機構多次測試較量各種資料庫 TPCC 值的過程中, MySQL一直都有非常優異的表現,而且在其他所有商用的通用資料庫管理系統中,僅僅只有Oracle資料庫能夠與其一較高下。至於各種資料庫詳細的效能資料, 我這裡就不便記錄, 大家完全可以通過網上第三方評測機構公布的資料瞭解具體細節資訊。
MySQL一直以來奉行一個原則,那就是在保證足夠的穩定性的前提下,儘可能的提高自身的處理能力。 也就是說, 在效能和功能方面, MySQL第一考慮的要素主要還是效能, MySQL希望自己是一個在滿足客戶99%的功能需求的前提下,花掉剩下的大部分精力來效能努力,而不是希望自己是成為一個比其他任何資料庫的功能都要強大的資料庫產品。
1.2.4 可靠性
關於可靠性的比較, 並沒有太多詳細的評測比較資料, 但是從目前業界的交流中可以瞭解到, 幾大商業廠商的資料庫的可靠性肯定是沒有太多值得懷疑的。 但是做為開來源資料庫管理系統的代表, MySQL也有非常優異的表現,而並不是像有些人心中所懷疑的那樣,因為不是商業廠商所提供,就會不夠穩定不夠健壯。從當前最火的Facebook這樣大型的網站都是使用MySQL資料庫,就可以看出, MySQL在穩定可靠性方面,並不會比我們的商業廠商的產品有太多遜色。 而且排在全球前10位的大型網站裡面, 大部分都有部分業務是運行在MySQL資料庫環境上,如Yahoo, Google等。
總的來說, MySQL資料庫在發展過程中一直有自己的三個原則:簡單、高效、可靠。 從上面的簡單比較中,我們也可以看出,在MySQL自己的所有三個原則上面,沒有哪一項是做得不好的。而且,雖然功能並不是MySQL自身所追求的三個原則之一,但是考慮到目前使用者量的急劇增長,使用者需求越來越越多樣化, MySQL也不得不在功能方面做出大量的努力, 來不斷滿足客戶的新需求。比如最近版本中出現的Eent Scheduler(類似於Oracle的Job功能) , Partition功能,自主研發的Maria儲存引擎在功能方面的擴充, Falcon儲存引擎對事務的支援等等,都證明了MySQL在功能方面也開始了不懈的努力。任何一種產品,都不可能是完美的,也不可能適用於所有使用者。我們只有衡量了每一種產品的各種特性之後,從中選擇出一種最適合於自身的產品。
1.3 MySQL 的主要適用情境
據說目前MySQL使用者已經達千萬層級了, 其中不乏企業級使用者。 可以說是目前最為流行的開來源資料庫管理系統軟體了。 任何產品都不可能是萬能的, 也不可能適用於所有的應用情境。那麼MySQL到底在什麼情境下適用什麼情境下不適用呢?
1、 Web網站系統
Web網站,是MySQL最大的客戶群,也是MySQL發展史上最為重要的支撐力量,這一點在最開始的MySQL Server簡介部分就已經說明過。
MySQL之所以能成為Web網站開發人員們最青睞的資料庫管理系統, 是因為MySQL資料庫的安裝配置都非常簡單,使用過程中的維護也不像很多大型商務資料庫管理系統那麼複雜,而且效能出色。還有一個非常重要的原因就是MySQL是開放原始碼的,完全可以免費使用。
2、日誌記錄系統
MySQL資料庫的插入和查詢效能都非常的高效,如果設計地較好,在使用 MyISAM儲存引擎的時候,兩者可以做到互不鎖定,達到很高的並發效能。所以,對需要大量的插入和查詢日誌記錄的系統來說, MySQL是非常不錯的選擇。 比如處理使用者的登入日誌, 動作記錄等,都是非常適合的應用情境。
3、資料倉儲系統
隨著現在資料倉儲資料量的飛速增長, 我們需要的儲存空間越來越大。 資料量的不斷增長,使資料的統計分析變得越來越低效,也越來越困難。怎麼辦?這裡有幾個主要的解決思路,一個是採用昂貴的高效能主機以提高計算效能,用高端存放裝置提高I/O效能,效果理想,但是成本非常高;第二個就是通過將資料複製到多台使用大容量硬碟的廉價pc server上, 以提高整體計算效能和I/O能力, 效果尚可, 儲存空間有一定限制, 成本低廉; 第三個,通過將資料水平分割, 使用多台廉價的pc server和本地磁碟來存放資料, 每台機器上面都只有所有資料的一部分,解決了資料量的問題,所有pc server一起並行計算,也解決了計算能力問題, 通過中間代理程式調配各台機器的運算任務, 既可以解決計算效能問題又可以解決I/O效能問題,成本也很低廉。在上面的三個方案中,第二和第三個的實現, MySQL都
有較大的優勢。 通過MySQL的簡單複製功能, 可以很好的將資料從一台主機複製到另外一台,不僅僅在區域網路內可以複製,在廣域網路同樣可以。當然,很多人可能會說,其他的資料庫同樣也可以做到,不是只有 MySQL有這樣的功能。確實,很多資料庫同樣能做到,但是MySQL是免費的,其他資料庫大多都是按照主機數量或者cpu數量來收費,當我們使用大量的pc server的時候, license費用相當驚人。第一個方案,基本上所有資料庫系統都能夠實現,但是其高昂的成本並不是每一個公司都能夠承擔的。
4、嵌入式系統
嵌入式環境對軟體系統最大的限制是硬體資源非常有限, 在嵌入式環境下啟動並執行軟體系統,必須是輕量級低消耗的軟體。MySQL在資源的使用方面的伸縮性非常大,可以在資源非常充裕的環境下運行,也可以在資源非常少的環境下正常運行。它對於嵌入式環境來說,是一種非常合適的資料庫系統,而且MySQL有專門針對於嵌入式環境的版本。
1.4 小結
從最初的誕生, 到發展成為目前最為流行的開來源資料庫管理軟體, MySQL 已經走過了較長的一段路,也正是這段不尋常的路,造就了今天 MySQL 的成就。通過本章的資訊,我想各位讀者應該是比較清楚 MySQL 的大部分基本資料了,對於MySQL 主要特長,以及適用情境,都有了一個初步的瞭解。在後續章節中我們將會針對這些內容做更為詳細深入的介紹。
摘自:《MySQL效能調優與架構設計》簡朝陽
轉載請註明出處:
JesseLZJ
出處:http://jesselzj.cnblogs.com
MySQL效能調優與架構設計——第1章 MySQL 基本介紹