一在編譯時優化MySQL 如果你從源代碼分發安裝MySQL
要注意
編譯過程對以後的目標程序性能有重要的影響
不同的編譯方式可能得到類似的目標文件
但性能可能相差很大
因此
在編譯安裝MySQL適應仔細根據你的應用類型選擇最可能好的編譯選項
這種定制的MySQL可以為你的應用提供最佳性能
技巧
選用較好的編譯器和較好的編譯器選項
這樣應用可提高性能
%
(MySQL文檔如是說)
使用pgcc(Pentium GCC)編譯器
該編譯器()針對運行在奔騰處理器系統上的程序進行優化
用pgcc編譯MySQL源代碼
總體性能可提高
%
當然如果你的服務器不是用奔騰處理器
就不必用它了
因為它是專為奔騰系統設計的
僅使用你想使用的字符集編譯MySQL
MySQL目前提供多達
種不同的字符集
為全球用戶以他們自己的語言插入或查看表中的數據
卻省情況下
MySQL安裝所有者這些字符集
熱然而
最好的選擇是指選擇一種你需要的
如
禁止除Latin
字符集以外的所有其它字符集
%>
/configure
with
extra
charsets=none [
other
configuration
options]
將mysqld編譯成靜態執行文件
將mysqld編譯成靜態執行文件而無需共享庫也能獲得更好的性能
通過在配置時指定下列選項
可靜態編譯mysqld
%>
/configure
with
mysqld
ldflags=
all
static [
other
configuration
options]
配置樣本
下列配置命令常用於提高性能
%>CFLAGS=
O
mpentiumpro
fomit
frame
pointer
CXX=gcc CXXFLAGS=
O
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時均起作用
這個配置文件就是f文件
MySQL已經提供了幾個f文件的樣本
可在/usr/local/mysqld/share/mysql/目錄下找到
這些文件分別命名為f
f
f和f
規模說明可在描述配置文件適用的系統類型標題中找到
如果在只有相當少內存的系統上運行MySQL
而且只是偶爾的用一下
那麼f會比較理想
因為它命令mysqld只使用最少的資源
類似地
如果你計劃構建電子商務超市
而且系統擁有
G內存
那麼你可能要用到f文件了
為了利用這些文件中的一個
你需要復制一個最適合需求的文件
改名為f
你可以選擇使用配置文件三種作用范圍的一種
Global
將f文件復制到服務器的/etc目錄下
這使得配置文件中的變量作用於全局
即對所有服務器上的MySQL數據庫服務器有效
Local
將f文件復制到[MYSQL
INSTALL
DIR]/var/目錄下
使得f作用於特定的服務器
[MYSQL
INSTALL
DIR]表示MySQL安裝目錄
User
你可以再限制作用於特定的用戶
將f復制到用戶的根目錄下
究竟如何設置f中的這些變量呢?更進一步說
你可以設置哪一個變量
雖然所用變量對MySQL服務器相對通用
每一個變量與MySQL的的某些組件有更特定的關系
如變量max_connects歸在mysqld類別下
執行下列命令即可知道
%>/usr/local/mysql/libexec/mysqld
help
它顯示大量的選項及與mysqld相關的變量
你可以很容易地在該行文字之下找出變量
Possible variables for option
set
variable (
O) are
然後你可以如下設置f中的那些變量
set
variable = max_connections=
它設置MySQL服務器的最大並發連接數為
要確保在f文件中的[mysqld]標題下插入變量設置
三表類型 很多MySQL用戶可能很驚訝
MySQL確實為用戶提供
種不同的表類型
稱為DBD
HEAP
ISAM
MERGE和MyIASM
DBD歸為事務安全類
而其他為非事務安全類
事務安全
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