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