從編譯到工具Mysql的最佳化方法

來源:互聯網
上載者:User

  一、在編譯時間最佳化mysql

  如果你從原始碼分發安裝mysql,要注意,編譯過程對以後的目標程式效能有重要的影響,不同的編譯方式可能得到類似的目標檔案,但效能可能相差很大,因此,在編譯安裝mysql適應仔細根據你的應用類型選擇最可能好的編譯選項。這種定製的mysql可以為你的應用提供最佳效能。

  技巧:選用較好的編譯器和較好的編譯器選項,這樣應用可提高效能10-30%。(mysql文檔如是說)

  1.1、使用pgcc(pentium gcc)編譯器

  該編譯器針對運行在奔騰處理器系統上的程式進行最佳化,用pgcc編譯mysql原始碼,總體效能可提高10%。當然如果你的伺服器不是用奔騰處理器,就不必用它了,因為它是專為奔騰系統設計的。

  1.2、僅使用你想使用的字元集編譯mysql

  mysql目前提供多達24種不同的字元集,為全球使用者以他們自己的語言插入或查看錶中的資料。卻省情況下,mysql安裝所有者這些字元集,熱然而,最好的選擇是指選擇一種你需要的。如,禁止除latin1字元集以外的所有其它字元集:

  ------------------------------------------------------------------------------

  %>./configure -with-extra-charsets=none [--other-configuration-options]

  ------------------------------------------------------------------------------

  1.3、將mysqld編譯成靜態執行檔案

  將mysqld編譯成靜態執行檔案而無需共用庫也能獲得更好的效能。通過在配置時指定下列選項,可靜態編譯mysqld。

  ------------------------------------------------------------------------------

  %>./configure -with-mysqld-ldflags=-all-static [--other-configuration-options]

  ------------------------------------------------------------------------------

  1.4、配置樣本

  下列配置命令常用於提高效能:

  ------------------------------------------------------------------------------

  %>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

  ------------------------------------------------------------------------------

  二、調整伺服器

  確保運用正確的編譯固然重要,但這隻是成功的第一步,配置眾多的mysql變數同樣對伺服器的正常運行起關鍵作用。你可以將這些變數的賦值存在一個設定檔中,以確保它們在每次啟動mysql時均起作用,這個設定檔就是my.cnf檔案。

  mysql已經提供了幾個my.cnf檔案的樣本,可在/usr/local/mysqld/share/mysql/目錄下找到。這些檔案分別命名為my-small.cnf、 my-medium.cnf、my-large.cnf和my-huge.cnf,規模說明可在描述設定檔適用的系統類別型標題中找到。如果在只有相當少記憶體的系統上運行mysql,而且只是偶爾的用一下,那麼my-small.cnf會比較理想,因為它命令mysqld只使用最少的資源。類似地,如果你計劃構建電子商務超市,而且系統擁有2g記憶體,那麼你可能要用到mysql-huge.cnf檔案了。為了利用這些檔案中的一個,你需要複製一個最適合需求的檔案,改名為my.cnf。你可以選擇使用設定檔三種作用範圍的一種:

  global:將my.cnf檔案複製到伺服器的/etc目錄下,這使得設定檔中的變數作用於全域,即對所有伺服器上的mysql資料庫伺服器有效。

  local:將my.cnf檔案複製到[mysql-install-dir]/var/目錄下,使得my.cnf作用於特定的伺服器。[mysql-install-dir]表示mysql安裝目錄。

  user:你可以再限制作用於特定的使用者,將my.cnf複製到使用者的根目錄下。

  究竟如何設定my.cnf中的這些變數呢?更進一步說,你可以設定哪一個變數。雖然所用變數對mysql伺服器相對通用,每一個變數與mysql的的某些組件有更特定的關係。如變數max_connects歸在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]標題下插入變數設定。

  三、表類型

  很多mysql使用者可能很驚訝,mysql確實為使用者提供5種不同的表類型,稱為dbd、heap、isam、merge和myiasm。dbd歸為事務安全類,而其他為非事務安全類。

  3.1、事務安全

  dbd

  berkeley db(dbd)表是支援交易處理的表,由sleepycat軟體公司開發。它提供mysql使用者期待已久的功能-事務控制。事務控制在任何資料庫系統中都是一個極有價值的功能,因為它們確保一組命令能成功地執行。

  3.2、非事務安全

  heap

  heap表是mysql中存取資料最快的表。這是因為他們使用儲存在動態記憶體中的一個雜湊索引。另一個要點是如果mysql或伺服器崩潰,資料將丟失。

  isam

  isam表是早期mysql版本的預設表類型,直到myiasm開發出來。建議不要再使用它。

  merge

  merge是一個有趣的新類型,在3.23.25之後出現。一個merge表實際上是一個相同myisam表的集合,合并成一個表,主要是為了效率原因。這樣可以提高速度、搜尋效率、修複效率並節省磁碟空間。

  myiasm

  這是mysql的預設表類型。它基於iasm代碼,但有很多有用的擴充。myiasm比較好的原因:

  myiasm表小於iasm表,所以使用較少資源。

  myiasm表在不同的平台上二進位層可移植。

  更大的鍵碼尺寸,更大的鍵碼上限。

  3.3、指定表類型

  你可在建立表時指定表的類型。下例建立一個heap表:

  --------------------------------------------------------------------

  mysql>create table email_addresses type=heap (

  ->email char(55) not null,

  ->name char(30) not null,

  ->primary key(email) );

  ---------------------------------------------------------------------

  bdb表需要一些配置工作。

  3.4、更多的表類型

  為了使mysql管理工作更有趣,即將發布的mysql 4.0將提供兩種新的表類型,稱為innobase和gemeni。

  四、最佳化工具

  mysql伺服器本身提供了幾條內建命令用於協助最佳化。

  4.1、show

  你可能有興趣知道mysql伺服器究竟更了什麼,下列命令給出一個總結:

  -----------------------------------

  mysql>show status;

  -----------------------------------

  它給出了一個相當長的狀態變數及其值的列表。有些變數包含了異常終止客戶的數量、異常終止串連的數量、串連嘗試的次數、最大並發串連數和大量其他有用的資訊。這些資訊對找出系統問題和低效極具價值。

  show還能做更多的事情。它可以顯示關於記錄檔、特定資料庫、表、索引、進程和許可權表中有價值的資訊。詳見mysql手冊。

  4.2、explain

  當你面對select語句時,explain解釋select命令如何被處理。這不僅對決定是否應該增加一個索引,而且對決定一個複雜的join如何被mysql處理都是有協助的。

  4.3、optimize

  optimize語句允許你恢複空間和合并資料檔案片段,對包含變長行的表進行了大量更新和刪除後,這樣做特別重要。optimize目前只工作於myiasm和bdb表。

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。