《Mysql應用一些mysql啟動參數的說明和優化方法》要點:
本文介紹了Mysql應用一些mysql啟動參數的說明和優化方法,希望對您有用。如果有疑問,可以聯系我們。
back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中.只有如果期望在一個短時間內有很多連接,你需要增加它,換句話說,這值對到來的TCP/IP連接的偵聽隊列的大小.你的操作系統在這個隊列大小上有它自己的限制. Unix listen(2)系統調用的手冊頁應該有更多的細節.檢查你的OS文檔找出這個變量的最大值.試圖設定back_log高于你的操作系統的限制將是無效的.
connect_timeout
mysqld服務器在用Bad handshake(糟糕的握手)應答前正在等待一個連接報文的秒數.
delayed_insert_timeout
一個INSERT DELAYED線程應該在終止之前等待INSERT語句的時間.
delayed_insert_limit
在插入delayed_insert_limit行后,INSERT DELAYED處理器將檢查是否有任何SELECT語句未執行.如果這樣,在繼續前執行允許這些語句.
delayed_queue_size
應該為處理INSERT DELAYED分配多大一個隊列(以行數).如果排隊滿了,任何進行INSERT DELAYED的客戶將等待直到隊列又有空間了.
flush_time
如果這被設置為非零值,那么每flush_time秒所有表將被關閉(以釋放資源和sync到磁盤).
interactive_timeout
服務器在關上它前在一個交互連接上等待行動的秒數.一個交互的客戶被定義為對mysql_real_connect()使用CLIENT_INTERACTIVE選項的客戶.也可見wait_timeout.
join_buffer_size
用于全部聯結(join)的緩沖區大小(不是用索引的聯結).緩沖區對2個表間的每個全部聯結分配一次緩沖區,當增加索引不可能時,增加該值可得到一個更快的全部聯結.(通常得到快速聯結的最佳方法是增加索引.)
key_buffer_size
索引塊是緩沖的并且被所有的線程共享.key_buffer_size是用于索引塊的緩沖區大小,增加它可得到更好處理的索引(對所有讀和多重寫),到你能負擔得起那樣多.如果你使它太大,系統將開始換頁并且真的變慢了.記住既然MySQL不緩存讀取的數據,你將必須為OS文件系統緩存留下一些空間.為了在寫入多個行時得到更多的速度,使用LOCK TABLES.見7.24LOCK TABLES/UNLOCK TABLES語法.
long_query_time
如果一個查詢所用時間超過它(以秒計),Slow_queries記數器將被增加.
max_allowed_packet
一個包的最大尺寸.消息緩沖區被初始化為net_buffer_length字節,但是可在需要時增加到max_allowed_packet個字節.缺省地,該值太小必能捕捉大的(可能錯誤)包.如果你正在使用大的BLOB列,你必須增加該值.它應該象你想要使用的最大BLOB的那么大.
max_connections
允許的同時客戶的數量.增加該值增加mysqld要求的文件描述符的數量.見下面對文件描述符限制的注釋.見18.2.4 Too many connections錯誤.
max_connect_errors
如果有多于該數量的從一臺主機中斷的連接,這臺主機阻止進一步的連接.你可用FLUSH HOSTS命令疏通一臺主機.
max_delayed_threads
不要啟動多于的這個數字的線程來處理INSERT DELAYED語句.如果你試圖在所有INSERT DELAYED線程在用后向一張新表插入數據,行將被插入,就像DELAYED屬性沒被指定那樣.
max_join_size
可能將要讀入多于max_join_size個記錄的聯結將返回一個錯誤.如果你的用戶想要執行沒有一個WHERE子句、花很長時間并且返回百萬行的聯結,設置它.
max_sort_length
在排序BLOB或TEXT值時使用的字節數(每個值僅頭max_sort_length個字節被使用;其余的被忽略).
max_tmp_tables
(該選擇目前還不做任何事情).一個客戶能同時保持打開的臨時表的最大數量.
net_buffer_length
通信緩沖區在查詢之間被重置到該大小.通常這不應該被改變,但是如果你有很少的內存,你能將它設置為查詢期望的大小.(即,客戶發出的SQL語句期望的長度.如果語句超過這個長度,緩沖區自動地被擴大,直到max_allowed_packet個字節.)
record_buffer
每個進行一個順序掃描的線程為其掃描的每張表分配這個大小的一個緩沖區.如果你做很多順序掃描,你可能想要增加該值.
sort_buffer
每個需要進行排序的線程分配該大小的一個緩沖區.增加這值加速ORDER BY或GROUP BY操作.見18.5 MySQL在哪兒存儲臨時文件.
table_cache
為所有線程打開表的數量.增加該值能增加mysqld要求的文件描述符的數量.MySQL對每個唯一打開的表需要2個文件描述符,見下面對文件描述符限制的注釋.對于表緩存如何工作的信息,見10.2.4 MySQL怎樣打開和關閉表.
tmp_table_size
如果一張臨時表超出該大小,MySQL產生一個The table tbl_name is full形式的錯誤,如果你做很多高級GROUP BY查詢,增加tmp_table_size值.
thread_stack
每個線程的棧大小.由crash-me測試檢測到的許多限制依賴于該值.缺省隊一般的操作是足夠大了.見10.8 使用你自己的基準.
wait_timeout
服務器在關閉它之前在一個連接上等待行動的秒數.也可見interactive_timeout.
MySQL使用是很具伸縮性的算法,因此你通常能用很少的內存運行或給MySQL更多的被存以得到更好的性能.
如果你有很多內存和很多表并且有一個中等數量的客戶,想要最大的性能,你應該一些象這樣的東西:
shell> safe_mysqld -O key_buffer=16M -O table_cache=128 \
-O sort_buffer=4M -O record_buffer=1M &
如果你有較少的內存和大量的連接,使用這樣一些東西:
shell> safe_mysqld -O key_buffer=512k -O sort_buffer=100k \
-O record_buffer=100k &
或甚至:
shell> safe_mysqld -O key_buffer=512k -O sort_buffer=16k \
-O table_cache=32 -O record_buffer=8k -O net_buffer=1K &
如果有很多連接,“交換問題”可能發生,除非mysqld已經被配置每個連接使用很少的內存.當然如果你對所有連接有足夠的內存,mysqld執行得更好.
注意,如果你改變mysqld的一個選項,它實際上只對服務器的那個例子保持.
為了明白一個參數變化的效果,這樣做:
shell> mysqld -O key_buffer=32m --help
保證--help選項是最后一個;否則,命令行上在它之后列出的任何選項的效果將不在反映在輸出中.
重要的MySQL啟動選項
back_log 如果需要大量新連接,修改它.
thread_cache_size 如果需要大量新連接,修改它.
key_buffer_size 索引頁池,可以設成很大.
bdb_cache_size BDB表使用的記錄和鍵嗎高速緩存.
table_cache 如果有很多的表和并發連接,修改它.
delay_key_write 如果需要緩存所有鍵碼寫入,設置它.
log_slow_queries 找出需花大量時間的查詢.
max_heap_table_size 用于GROUP BY
sort_buffer 用于ORDER BY和GROUP BY
myisam_sort_buffer_size 用于REPAIR TABLE
join_buffer_size 在進行無鍵嗎的聯結時使用.
MySQL高速緩存(所有線程共享,一次性分配)
鍵碼緩存:key_buffer_size,默認8M.
表緩存:table_cache,默認64.
線程緩存:thread_cache_size,默認0.
主機名緩存:可在編譯時修改,默認128.
內存映射表:目前僅用于壓縮表.
注意:MySQL沒有行高速緩存,而讓操作系統處理
MySQL緩存區變量(非共享,按需分配)
sort_buffer:ORDER BY/GROUP BY
record_buffer:掃描表.
join_buffer_size:無鍵聯結
myisam_sort_buffer_size:REPAIR TABLE
net_buffer_length:對于讀SQL語句并緩存結果.
tmp_table_size:臨時結果的HEAP表大小.
轉載請注明本頁網址:
http://www.fzlkiss.com/jiaocheng/2339.html