程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 優化配置mysql服務器

優化配置mysql服務器

編輯:關於MYSQL數據庫
shell> mysqld --help 這個命令生成一張所有MySQLd選項和可配置變量的表。輸出包括缺省值並且看上去象這樣一些東西: Possible variables for option --set-variable (-O) are:
back_log              current value: 5
connect_timeout       current value: 5
delayed_insert_timeout  current value: 300
delayed_insert_limit  current value: 100
delayed_queue_size    current value: 1000
flush_time            current value: 0
interactive_timeout   current value: 28800
join_buffer_size      current value: 131072
key_buffer_size       current value: 1048540
lower_case_table_names  current value: 0
long_query_time       current value: 10
max_allowed_packet    current value: 1048576
max_connections       current value: 100
max_connect_errors    current value: 10
max_delayed_threads   current value: 20
max_heap_table_size   current value: 16777216
max_join_size         current value: 4294967295
max_sort_length       current value: 1024
max_tmp_tables        current value: 32
max_write_lock_count  current value: 4294967295
net_buffer_length     current value: 16384
query_buffer_size     current value: 0
record_buffer         current value: 131072
sort_buffer           current value: 2097116
table_cache           current value: 64
thread_concurrency    current value: 10
tmp_table_size        current value: 1048576
thread_stack          current value: 131072
wait_timeout          current value: 28800 如果有一個mysqld服務器正在運行,通過執行這個命令,你可以看到它實際上使用的變量的值: shell> MySQLadmin variables 每個選項在下面描述。對於緩沖區大小、長度和棧大小的值以字節給出,你能用於個後綴“K”或“M” 指出以K字節或兆字節顯示值。例如,16M指出16兆字節。後綴字母的大小寫沒有關系;16M和16m是相同的。你也可以用命令SHOW STATUS自一個運行的服務器看見一些統計。見7.21 SHOW語法(得到表、列的信息)。 back_log
要求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選項是最後一個;否則,命令行上在它之後列出的任何選項的效果將不在反映在輸出中。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved