<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MySQL性能優化

    Posted on 2007-11-09 10:55 yukui 閱讀(143) 評論(0)  編輯  收藏 所屬分類: 技術
            MySQL實際上支持五種不同的表類型,有些人可能會對此感到不同尋常。這五種類型分別是BDB、HEAP、ISAM、MERGE以及MyISAM。其中BDB類型單獨屬于一類,稱為“事務安全型”(transaction-safe),其余的表類型屬于第二類,稱為“非事務安全型”(non-transaction-safe)。下面我們詳細介紹這些表類型。  

         事務安全型  

       ▲ BDB   

       BDB全稱是“Berkeley DB”,它是MySQL具有事務能力的表類型,由Sleepycat Software (http://www.sleepycat.com)開發。BDB表類型提供了MySQL用戶長久期盼的功能,即事務控制能力。在任何RDBMS中,事務控制能力都是一種極其重要和寶貴的功能。事務控制能力使得我們能夠確保一組命令確實已經全部執行成功,或者確保當任何一個命令出現錯誤時所有命令的執行結果均被回退??梢韵胂?,在電子銀行這類應用中事務控制能力是極其重要的。  

       非事務安全型   

       ▲ HEAP   
       HEAP表是訪問數據速度最快的MySQL表,這是因為這類表使用保存在內存中的散列索引。但有極其重要的一點必須注意,如果MySQL或者服務器崩潰,HEAP表中的數據將會丟失!  
       ▲ ISAM  
        ISAM表類型是MyISAM出現之前MySQL的默認表類型,所以現在這種表類型是不推薦使用的,建議改用MyISAM表。  
       ▲ MERGE  
        MERGE是一種值得關注的新式表類型,在3.23.25版中提供。MERGE表實際上由一組同樣的MyISAM表合并而成。之所以要把多個同樣的表合并成一個,主要是出于性能上的考慮,因為它能夠提高搜索速度、提高修復效率、節省磁盤空間。  
       當前的MERGE表類型仍舊屬于BETA版本,但相信正式版本很快就會出現。  
       ▲ MyISAM  
       MyISAM表類型是MySQL默認的表類型。MyISAM表類型以ISAM為基礎,但增加了許多有用的擴展。下面是部分用MyISAM表類型取代ISAM表類型的原因:  
     MyISAM表比ISAM表要小,因而占用資源更少。  
    MyISAM表在不同的平臺間二進制可移植。  
       MyISAM還有其他許多優點。請訪問http://www.mysql.com/doc/I/S/ISAM.html查看關于該表類型的完整說明。  
       表的類型在創建表時指定。在下面這個例子中我們創建了一個HEAP類型的表:

    mysql >CREATE TABLE email_addresses TYPE=HEAP ( 

        - >email char(55) NOT NULL, 

        - >name char(30) NOT NULL, 

        - >PRIMARY KEY(email) ); 

    創建BDB表需要更多的配置參數,請參考http://www.mysql.com/doc/B/D/BDB_overview.html了解完整說明以及要使用BDB表應該做哪些準備。  
       MySQL 4.0將增加兩種新的表類型,即Innobase和Gemeni。關于這兩種表類型現在能夠得到的信息還不多。  
       關于MySQL表類型,有待學習的知識實在太多,本文簡短的介紹不可能做到完整和詳盡。建議訪問MySQL文檔(http://www.mysql.com)了解更詳盡的信息。 
        正確的編譯方法固然重要,但它只是提高MySQL服務器性能工作的一部分。MySQL服務器的許多參數會影響服務器的性能表現,而且我們可以把這些參數保存到配置文件,使得每次MySQL服務器啟動時這些參數都自動發揮作用。這個配置文件就是my.cnf。 
       MySQL服務器提供了my.cnf文件的幾個示例,它們可以在/usr/local/mysql/share/mysql/目錄下找到,名字分別為my-small.cnf、my-medium.cnf、my-large.cnf以及my-huge.cnf。文件名字中關于規模的說明描述了該配置文件適用的系統類型。例如,如果運行MySQL服務器的系統內存不多,而且MySQL只是偶爾使用,那么使用my-small.cnf配置文件最為理想,這個配置文件告訴mysqld daemon使用最少的系統資源。反之,如果MySQL服務器用于支持一個大規模的在線商場,系統擁有2G的內存,那么使用mysql-huge.cnf最為合適。  
       要使用上述示例配置文件,我們應該先復制一個最適合要求的配置文件,并把它命名為my.cnf。這個復制得到的配置文件可以按照如下三種方式使用:  
        全局:把這個my.cnf文件復制到服務器的/etc目錄,此時文件中所定義的參數將全局有效,即對該服務器上運行的所有MySQL數據庫服務器都有效。
        局部:把這個my.cnf文件復制到[MYSQL-INSTALL-DIR]/var/將使該文件只對指定的服務器有效,其中[MYSQL-INSTALL-DIR]表示安裝MySQL的目錄。  
        用戶:最后,我們還可以把該文件的作用范圍局限到指定的用戶,這只需把my.cnf文件復制到用戶的根目錄即可。
       那么,如何設置my.cnf文件中的參數呢?或者進一步說,哪些參數是我們可以設置的呢?所有這些參數都對MySQL服務器有著全局性的影響,但同時每一個參數都和MySQL的特定部分關系較為密切。例如,max_connections參數屬于mysqld一類。那么,如何才能得知這一點呢?這只需執行如下命令:  
    % >/usr/local/mysql/libexec/mysqld --help 
       該命令將顯示出和mysqld有關的各種選項和參數。要尋找這些參數非常方便,因為這些參數都在“Possible variables for option --set-variable (-O) are”這行內容的后面。找到這些參數之后,我們就可以在my.cnf文件中按照如下方式設置所有這些參數:  
    set-variable = max_connections=100 
       這行代碼的效果是:同時連接MySQL服務器的最大連接數量限制為100。不要忘了在my.cnf文件[mysqld]小節加上一個set-variable指令,具體請參見配置文件中的示例。
        許多新手往往把重新編譯源代碼看成是一種無可避免的災禍,其實編譯源代碼還能對程序的最終性能起到顯著的影響。編譯過程可以用不同流水線上裝配同樣型號的汽車比擬:第一條流水線由素質較低的工人操作,裝配程序未能盡善盡美,零件裝配誤差較大;第二條流水線由高素質的技術工人操作,汽車裝配程序合理,且利用最好的工具保證產品的高質量。雖然兩條流水線上裝配出來的汽車外觀一模一樣,但兩種汽車的性能表現卻可能大不相同。對于編譯器來說情況也完全相似,有些編譯器裝配出來的程序要比其他編譯器的更好。
       編譯時考慮所有可用的選項也是極其重要的。很可能某些編譯器的默認選項值不能符合要求,或者,為了滿足應用的特定需求,我們需要指定一些特殊的編譯選項。正如MySQL文檔所指出的,只要采用了更好的編譯器或者使用更合理的編譯選項,應用性能的提高程度可以達到10-30%。 
        既然如此,編譯時具體應該注意哪些問題才能讓MySQL數據庫運行得更快呢?  
       ▲ 使用pgcc編譯器  
       如果系統使用的是奔騰處理器,那么pgcc(Pentium GCC)正是為這些系統下運行的程序提供的專用編譯器。pgcc是gcc編譯器(http://www.gnu.org/software/gcc/)的奔騰優化版,用pgcc編譯MySQL代碼可以讓整體性能提高10%以上!關于pgcc的更多信息,請參見http://www.goof.com/pcg/。當然,如果系統使用的不是奔騰處理器,采用這種方法提高MySQL的運行速度就不合適了,因為正如其名字所示,pgcc是專門為奔騰系統提供的。  
       ▲ 把mysqld編譯成靜態模式  
       以不帶共享庫的形式編譯mysqld同樣可以提高性能。在配置行加入下面這個選項可以將mysqld編譯成靜態模式:  
    % >./configure -with-mysqld-ldflags=-all-static [--其他配置選項] 
      ▲ 配置示例   

     下面的配置命令經常用于提高MySQL的性能:  

    % >CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 

    -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti"  

    ./configure --prefix=/usr/local --enable-assembler --with-mysqld-ldflags=-all-static  

    --disable-shared 

       詳細解釋每個gcc選項的作用已經超出了本文的范圍,請訪問gcc的說明文檔了解這些信息(http://gcc.gnu.org/)。注意不要拘泥于這個例子,請在命令行執行man gcc仔細了解每一個gcc選項的含義。

    posts - 131, comments - 12, trackbacks - 0, articles - 32

    Copyright © yukui

    主站蜘蛛池模板: 亚洲欧洲日韩国产综合在线二区| 亚洲毛片一级带毛片基地| 亚洲色无码专区一区| 亚洲成人免费在线| 久久久久亚洲av无码尤物| 很黄很污的网站免费| 亚洲成AV人片在| 99热这里只有精品6免费| 久久精品蜜芽亚洲国产AV| 国产92成人精品视频免费 | 亚洲一区二区三区免费视频| 亚洲av无码专区国产乱码在线观看| 婷婷精品国产亚洲AV麻豆不片| 亚洲一区二区三区在线| 成人女人A级毛片免费软件 | 国产猛烈高潮尖叫视频免费| 春暖花开亚洲性无区一区二区| 国内精品免费在线观看| 亚洲精品高清久久| 无码中文字幕av免费放| 亚洲一本到无码av中文字幕| 四虎免费永久在线播放| fc2成年免费共享视频网站| 亚洲av鲁丝一区二区三区| 91精品国产免费久久久久久青草 | 日韩a毛片免费观看| 亚洲综合国产精品第一页| 最近中文字幕大全免费版在线| 无码人妻精品一二三区免费| 亚洲欧洲精品成人久久曰| 免费一级一片一毛片| 免费国产午夜高清在线视频| 亚洲福利视频一区二区三区| 日本19禁啪啪无遮挡免费动图| 91亚洲国产成人久久精品网址| 91在线视频免费观看| 亚洲an日韩专区在线| 免费一级国产生活片| 一级毛片免费观看| 国产综合成人亚洲区| 亚洲av无码不卡|