MYSQL使用指南
1. 批量載入比單行載入的效率高,因為在每條記錄被載入后,鍵緩存(key cache)不用刷新(flush);
2. 沒有索引的數(shù)據(jù)表的載入速度比有索引的要快一些。
3. 較短的SQL語句比較長的SQL語句快,因為它們所涉及到服務(wù)器端分析過程較少,同時通過網(wǎng)絡(luò)把它們從客戶端發(fā)送到服務(wù)器上的速度也更快。
4. LOAD DATA(所有形式的)比INSERT效率高,因為它是批量載入數(shù)據(jù)行的。
查看可優(yōu)化變量
mysqld --verbose --help
查看使用情況
MySQL系統(tǒng)變量的值
bin> SHOW VARIABLES;
bin> SHOW VARIABLES like ‘key_%’;
mysqladmin variables extended-status -h127.0.0.1 -uroot -P3306 -p status
提供服務(wù)器的狀態(tài)信息
bin> show status;
bin> SHOW STATUS LIKE 'key_read%';
bin> SHOW STATUS LIKE 'Qcache_%';
mysqladmin extended-status -h127.0.0.1 -uroot -P3306 -p status
a). myisamchk -a ..\data\asdb\* 更新一下表中的鍵碼分布統(tǒng)計。
b) key_buffer_size只對MyISAM表起作用,指定索引緩沖區(qū)的大小,它決定索引處理的速度,尤其是索引讀的速度。64M在 256M機(jī)器上很正常,可用內(nèi)存的 30-40%,合理的值取決于索引大小、數(shù)據(jù)量以及負(fù)載。
query_cache_size:從4.0.1開始,MySQL提供了查詢緩沖機(jī)制。使用查詢緩沖,MySQL將SELECT語句和查詢結(jié)果存放在緩沖區(qū)中,今后對于同樣的SELECT語句(區(qū)分大小寫),將直接從緩沖區(qū)中讀取結(jié)果。其值可為:并發(fā)數(shù)*表空間*記錄數(shù)*緩沖數(shù)=8K表空間*20條*10用戶*10個=16M)
table_cache。table_cache指定表高速緩存的大小。每當(dāng)MySQL訪問一個表時,如果在表緩沖區(qū)中還有空間,該表就被打開并放入其中,這樣可以更快地訪問表內(nèi)容。打開一個表的開銷可能很大。它需要用到操作系統(tǒng)的資源以及內(nèi)存。如果你有200多個表的話,那么設(shè)置為 1024 也許比較合適(每個線程都需要打開表),對于有1G內(nèi)存的機(jī)器,推薦值是128-256。
e) max_connections。并發(fā)連接數(shù)目最大,100 超過這個值就會自動恢復(fù),出了問題能自動解決
f) thread_cache�?梢詮�(fù)用的保存中的線程的數(shù)量。如果有,新的線程從緩存中取得,當(dāng)斷開連接的時候如果有空間,客戶的線置在緩存中。如果有很多新的線程,為了提高性能可以這個變量值。它的目的是在通常的操作中無需創(chuàng)建新線程,通常至少設(shè)置為 16。
g) sort_buffer_size 每個線程的排序緩存堆大小,該參數(shù)對應(yīng)的分配內(nèi)存是每連接獨占,如果有100個連接,那么實際分配的總共排序緩沖區(qū)大小為100 × 2 = 200MB
h) read_buffer_size 每個線程的順序掃描緩存堆大小,每連接獨占
i) join_buffer_size 聯(lián)合查詢操作所能使用的緩沖區(qū)大小,和sort_buffer_size一樣,該參數(shù)對應(yīng)的分配內(nèi)存也是每連接獨享!
i) skip-external-locking 避免MySQL的外部鎖定,減少出錯幾率增強(qiáng)穩(wěn)定性,比如文件鎖。
j) skip-name-resolve 禁止MySQL對外部連接進(jìn)行DNS解析,使用這一選項可以消除MySQL進(jìn)行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠(yuǎn)程主機(jī)連接授權(quán)都要使用IP地址方式,否則MySQL將無法正常處理連接請求!
k) back_log = 100 指定MySQL可能的連接數(shù)量。當(dāng)MySQL主線程在很短的時間內(nèi)接收到非常多的連接請求,該參數(shù)生效,主線程花費很短的時間檢查連接并且啟動一個新線程。
l) skip-networking 開啟該選項可以徹底關(guān)閉MySQL的TCP/IP連接方式,如果WEB服務(wù)器是以遠(yuǎn)程連接的方式訪問MySQL數(shù)據(jù)庫服務(wù)器則不要開啟該選項!否則將無法正常連接!
m) interactive_timeout 服務(wù)器在關(guān)閉它前在一個交互連接上等待行動的豪秒數(shù)。一個交互的客戶被定義為對 mysql_real_connect()使用 CLIENT_INTERACTIVE 選項的客戶。
n) wait_timeout 服務(wù)器在關(guān)閉它之前在一個連接上等待行動的豪秒數(shù)
MySql問題
客戶端連不上服務(wù)器
可能服務(wù)沒有啟動
客戶端連不上遠(yuǎn)程服務(wù)器
可能該用戶沒有在遠(yuǎn)程連接的權(quán)限,賦權(quán)即可
由于臨時斷電,或使用kill -9中止mysql服務(wù)進(jìn)程,或者是mysql正在高速運(yùn)轉(zhuǎn)時進(jìn)行強(qiáng)制備份操作時等,所有的這些都可能會毀壞mysql的數(shù)據(jù)文件。留下錯誤的或不一致的狀態(tài)。
myisamchk程序?qū)τ脕頇z查和修改mysql數(shù)據(jù)文件,myisamchk會誤以為發(fā)生了錯誤,并會試圖進(jìn)行修復(fù)--這將導(dǎo)致mysql服務(wù)的崩潰!為避免這種情況的發(fā)生:
1. 禁止強(qiáng)殺mysql進(jìn)程
2. 禁止mysql啟動時拷貝數(shù)據(jù)文件
一旦出現(xiàn)數(shù)據(jù)破壞,可以:
1. 檢查某表 d:\mysql5\bin\> myisamchk ..\data\asdb\k_key
2. 檢查所有表 myisamchk ..\data\asdb\*.myi
3. 檢查一旦出現(xiàn)錯誤提示table is marked as crashed,要恢復(fù)
恢復(fù)步驟
a. 關(guān)閉mysql服務(wù)
b. 備份損壞的文件表和數(shù)據(jù),位于在data目錄下
c. 執(zhí)行如下命令:myisamchk --recover --quick ..\data\asdb\k_key.myi
d. 如果不行:myisamchk --safe-recover ..\data\asdb\k_key.myi