熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

MySQL優化簡明指南淺析

2013-11-23 20:58:24  來源: MySQL 

  在編譯時優化MySQL
  
  如果你從源代碼分發安裝MySQL要注意編譯過程對以後的目標程序性能有重要的影響不同的編譯方式可能得到類似的目標文件但性能可能相差很大因此在編譯安裝MySQL適應仔細根據你的應用類型選擇最可能好的編譯選項這種定制的MySQL可以為你的應用提供最佳性能
  
  技巧選用較好的編譯器和較好的編譯器選項這樣應用可提高性能%(MySQL文檔如是說)
  
  使用pgcc(Pentium GCC)編譯器
  
  該編譯器()針對運行在奔騰處理器系統上的程序進行優化用pgcc編譯MySQL源代碼總體性能可提高%當然如果你的服務器不是用奔騰處理器就不必用它了因為它是專為奔騰系統設計的
  
  僅使用你想使用的字符集編譯MySQL
  
  MySQL目前提供多達種不同的字符集為全球用戶以他們自己的語言插入或查看表中的數據卻省情況下MySQL安裝所有者這些字符集熱然而最好的選擇是指選擇一種你需要的禁止除Latin字符集以外的所有其它字符集
  
  
  %>/configure withextracharsets=none [otherconfigurationoptions]
  
  
  將mysqld編譯成靜態執行文件
  
  將mysqld編譯成靜態執行文件而無需共享庫也能獲得更好的性能通過在配置時指定下列選項可靜態編譯mysqld
  
  
  %>/configure withmysqldldflags=allstatic [otherconfigurationoptions]
  
  
  配置樣本
  
  下列配置命令常用於提高性能
  
  %>CFLAGS=O mpentiumpro fomitframepointer CXX=gcc CXXFLAGS=O mpentiumpro fomitframepointer felideconstructors fnoexceptions fnortti /configure prefix=/usr/local enableassembler withmysqldldflags=allstatic disableshared
  
  調整服務器
  
  確保運用正確的編譯固然重要但這只是成功的第一步配置眾多的MySQL變量同樣對服務器的正常運行起關鍵作用你可以將這些變量的賦值存在一個配置文件中以確保它們在每次啟動MySQL時均起作用這個配置文件就是f文件
  
  MySQL已經提供了幾個f文件的樣本可在/usr/local/mysqld/share/mysql/目錄下找到這些文件分別命名為f ff和f規模說明可在描述配置文件適用的系統類型標題中找到如果在只有相當少內存的系統上運行MySQL而且只是偶爾的用一下那麼f會比較理想因為它命令mysqld只使用最少的資源類似地如果你計劃構建電子商務超市而且系統擁有G內存那麼你可能要用到f文件了
  
  為了利用這些文件中的一個你需要復制一個最適合需求的文件改名為f你可以選擇使用配置文件三種作用范圍的一種
  
  Global將f文件復制到服務器的/etc目錄下這使得配置文件中的變量作用於全局即對所有服務器上的MySQL數據庫服務器有效
  Local將f文件復制到[MYSQLINSTALLDIR]/var/目錄下使得f作用於特定的服務器[MYSQLINSTALLDIR]表示MySQL安裝目錄
  User你可以再限制作用於特定的用戶將f復制到用戶的根目錄下
  究竟如何設置f中的這些變量呢?更進一步說你可以設置哪一個變量雖然所用變量對MySQL服務器相對通用每一個變量與MySQL的的某些組件有更特定的關系如變量max_connects歸在mysqld類別下執行下列命令即可知道
  
  %>/usr/local/mysql/libexec/mysqld help
  
  它顯示大量的選項及與mysqld相關的變量你可以很容易地在該行文字之下找出變量
  
  Possible variables for option setvariable (O) are
  
  然後你可以如下設置f中的那些變量
  
  setvariable = max_connections=
  
  它設置MySQL服務器的最大並發連接數為要確保在f文件中的[mysqld]標題下插入變量設置
  
  表類型
  
  很多MySQL用戶可能很驚訝MySQL確實為用戶提供種不同的表類型稱為DBDHEAPISAMMERGE和MyIASMDBD歸為事務安全類而其他為非事務安全類
  
  事務安全
  
  DBD
  Berkeley DB(DBD)表是支持事務處理的表由Sleepycat軟件公司()開發它提供MySQL用戶期待已久的功能事務控制事務控制在任何數據庫系統中都是一個極有價值的功能因為它們確保一組命令能成功地執行
  
  非事務安全
  
  HEAP
  
  HEAP表是MySQL中存取數據最快的表這是因為他們使用存儲在動態內存中的一個哈希索引另一個要點是如果MySQL或服務器崩潰數據將丟失
  
  ISAM
  
  ISAM表是早期MySQL版本的缺省表類型直到MyIASM開發出來建議不要再使用它
  
  MERGE
  
  MERGE是一個有趣的新類型之後出現一個MERGE表實際上是一個相同MyISAM表的集合合並成一個表主要是為了效率原因這樣可以提高速度搜索效率修復效率並節省磁盤空間
  
  MyIASM
  
  這是MySQL的缺省表類型它基於IASM代碼但有很多有用的擴展MyIASM比較好的原因
  
  MyIASM表小於IASM表所以使用較少資源
  MyIASM表在不同的平台上二進制層可移植
  更大的鍵碼尺寸更大的鍵碼上限
  指定表類型
  
  你可在創建表時指定表的類型下例創建一個HEAP表
  
  mysql>CREATE TABLE email_addresses TYPE=HEAP (
  >email char() NOT NULL
  >name char() NOT NULL
  >PRIMARY KEY(email) );
  
  BDB表需要一些配置工作參見
  
  更多的表類型
  
  為了使MySQL管理工作更有趣即將發布的MySQL 將提供兩種新的表類型稱為Innobase和Gemeni
  
  優化工具
  
  MySQL服務器本身提供了幾條內置命令用於幫助優化
  
  SHOW
  
  你可能有興趣知道MySQL服務器究竟更了什麼下列命令給出一個總結
  
  mysql>show status;
  
  它給出了一個相當長的狀態變量及其值的列表有些變量包含了異常終止客戶的數量異常終止連接的數量連接嘗試的次數最大並發連接數和大量其他有用的信息這些信息對找出系統問題和低效極具價值
  
  SHOW還能做更多的事情它可以顯示關於日志文件特定數據庫索引進程和權限表中有價值的信息詳見MySQL手冊
  
  EXPLAIN
  
  當你面對SELECT語句時EXPLAIN解釋SELECT命令如何被處理這不僅對決定是否應該增加一個索引而且對決定一個復雜的Join如何被MySQL處理都是有幫助的
  
  OPTIMIZE
  
  OPTIMIZE語句允許你恢復空間和合並數據文件碎片對包含變長行的表進行了大量更新和刪除後這樣做特別重要OPTIMIZE目前只工作於MyIASM和BDB表
From:http://tw.wingwit.com/Article/program/MySQL/201311/29369.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.