同時線上訪問量繼續增大 對於1G記憶體的伺服器明顯感覺到吃力嚴重時甚至每天都會死機 或者時不時的伺服器卡一下 這個問題曾經困擾了我半個多月MySQL使用是很具伸縮性的演算法,因此你通常能用很少的記憶體運行或給MySQL更多的被存以得到更好的效能。
安裝好mysql後,配製檔案應該在/usr/local/mysql/share/mysql目錄中,配製檔案有幾個,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的網站和不同配製的伺服器環境,當然需要有不同的配製檔案了。
一般的情況下,my-medium.cnf這個配製檔案就能滿足我們的大多需要;一般我們會把設定檔拷貝到/etc/my.cnf 只需要修改這個設定檔就可以了,使用mysqladmin variables extended-status –u root –p 可以看到目前的參數,有3個配置參數是最重要的,即key_buffer_size,query_cache_size,table_cache。
key_buffer_size只對MyISAM表起作用,
key_buffer_size指定索引緩衝的大小,它決定索引處理的速度,尤其是索引讀的速度。一般我們設為16M,實際上稍微大一點的網站 這個數字是遠遠不夠的,通過檢查狀態值Key_read_requests和Key_reads,可以知道key_buffer_size設定是否合理。比例key_reads / key_read_requests應該儘可能的低,至少是1:100,1:1000更好(上述狀態值可以使用SHOW STATUS LIKE ‘key_read%'獲得)。 或者如果你裝了phpmyadmin 可以通過伺服器運行狀態看到,筆者推薦用phpmyadmin管理mysql,以下的狀態值都是本人通過phpmyadmin獲得的執行個體分析:
這個伺服器已經運行了20天
key_buffer_size – 128M
key_read_requests – 650759289
key_reads - 79112比例接近1:8000 健康情況非常好
另外一個估計key_buffer_size的辦法 把你網站資料庫的每個表的索引所佔空間大小加起來看看以此伺服器為例:比較大的幾個表索引加起來大概125M 這個數字會隨著表變大而變大。
從4.0.1開始,MySQL提供了查詢緩衝機制。使用查詢緩衝,MySQL將SELECT語句和查詢結果存放在緩衝區中,今後對於同樣的SELECT語句(區分大小寫),將直接從緩衝區中讀取結果。根據MySQL使用者手冊,使用查詢緩衝最多可以達到238%的效率。
通過調節以下幾個參數可以知道query_cache_size設定得是否合理
Qcache inserts
Qcache hits
Qcache lowmem prunes
Qcache free blocks
Qcache total blocksQcache_lowmem_prunes的值非常大,則表明經常出現緩衝不夠的情況,同時Qcache_hits的值非常大,則表明查詢緩衝使用非常頻繁,此時需要增加緩衝大小Qcache_hits的值不大,則表明你的查詢重複率很低,這種情況下使用查詢緩衝反而會影響效率,那麼可以考慮不用查詢緩衝。此外,在SELECT語句中加入SQL_NO_CACHE可以明確表示不使用查詢緩衝。
Qcache_free_blocks,如果該值非常大,則表明緩衝區中片段很多query_cache_type指定是否使用查詢緩衝
我設定:
query_cache_size = 32M
query_cache_type= 1得到如下狀態值:
Qcache queries in cache 12737 表明目前緩衝的條數
Qcache inserts 20649006
Qcache hits 79060095 看來重複查詢率還挺高的
Qcache lowmem prunes 617913 有這麼多次出現緩衝過低的情況
Qcache not cached 189896
Qcache free memory 18573912 目前剩餘緩衝空間
Qcache free blocks 5328 這個數字似乎有點大 片段不少
Qcache total blocks 30953如果記憶體允許32M應該要往上加點
table_cache指定表快取的大小。每當MySQL訪問一個表時,如果在表緩衝區中還有空間,該表就被開啟並放入其中,這樣可以更快地訪問表內容。通過檢查峰值時間的狀態值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。如果你發現open_tables等於table_cache,並且opened_tables在不斷增長,那麼你就需要增加table_cache的值了(上述狀態值可以使用SHOW STATUS LIKE ‘Open%tables'獲得)。注意,不能盲目地把table_cache設定成很大的值。如果設定得太高,可能會造成檔案描述符不足,從而造成效能不穩定或者串連失敗。
對於有1G記憶體的機器,推薦值是128-256。
筆者設定table_cache = 256
得到以下狀態:
Open tables 256
Opened tables 9046雖然open_tables已經等於table_cache,但是相對於伺服器已耗用時間來說,已經運行了20天,opened_tables的值也非常低。因此,增加table_cache的值應該用處不大。如果運行了6個小時就出現上述值 那就要考慮增大table_cache。
如果你不需要記錄2進位log 就把這個功能關掉,注意關掉以後就不能恢複出問題前的資料了,需要您手動備份,二進位日誌包含所有更新資料的語句,其目的是在恢複資料庫時用它來把資料儘可能恢複到最後的狀態。另外,如果做同步複製( Replication )的話,也需要使用二進位記錄傳送修改情況。
log_bin指定記錄檔,如果不提供檔案名稱,MySQL將自己產生預設檔案名稱。MySQL會在檔案名稱後面自動添加數字引,每次啟動服務時,都會重建一個新的二進位檔案。此外,使用log-bin-index可以指定索引檔案;使用binlog-do-db可以指定記錄的資料庫;使用binlog-ignore-db可以指定不記錄的資料庫。注意的是:binlog-do-db和binlog-ignore-db一次只指定一個資料庫,指定多個資料庫需要多個語句。而且,MySQL會將所有的資料庫名稱改成小寫,在指定資料庫時必須全部使用小寫名字,否則不會起作用。
關掉這個功能只需要在他前面加上#號
#log-bin開啟慢查詢日誌( slow query log ) 慢查詢日誌對於跟蹤有問題的查詢非常有用。它記錄所有查過long_query_time的查詢,如果需要,還可以記錄不使用索引的記錄。下面是一個慢查詢日誌的例子:
開啟慢查詢日誌,需要設定參數log_slow_queries、long_query_times、log-queries-not-using-indexes。
log_slow_queries指定記錄檔,如果不提供檔案名稱,MySQL將自己產生預設檔案名稱。long_query_times指定慢查詢的閾值,預設是10秒。log-queries-not-using-indexes是4.1.0以後引入的參數,它指示記錄不使用索引的查詢。筆者設定long_query_time=10
筆者設定:
sort_buffer_size = 1M
max_connections=120
wait_timeout =120
back_log=100
read_buffer_size = 1M
thread_cache=32
interactive_timeout=120
thread_concurrency = 4參數說明:
back_log
要求MySQL能有的串連數量。當主要MySQL線程在一個很短時間內得到非常多的串連請求,這就起作用,然後主線程花些時間(儘管很短)檢查串連並且啟動一個新線程。back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中。只有如果期望在一個短時間內有很多串連,你需要增加它,換句話說,這值對到來的TCP/IP串連的偵聽隊列的大小。你的作業系統在這個隊列大小上有它自己的限制。 Unix listen(2)系統調用的手冊頁應該有更多的細節。檢查你的OS文檔找出這個變數的最大值。試圖設定back_log高於你的作業系統的限制將是無效的。
max_connections
並發串連數目最大,120 超過這個值就會自動回復,出了問題能自動解決
thread_cache
沒找到具體說明,不過設定為32後 20天才建立了400多個線程 而以前一天就建立了上千個線程 所以還是有用的
thread_concurrency
#設定為你的cpu數目x2,例如,只有一個cpu,那麼thread_concurrency=2
#有2個cpu,那麼thread_concurrency=4
skip-innodb
#去掉innodb支援代碼:
# Example MySQL config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# an important part, or systems up to 128M where MySQL is used together with
# other programs (such as a web server)
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/lib/mysql) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.
# The following options will be passed to all MySQL clients
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
#socket = /var/lib/mysql/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
#socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 128M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 1M
net_buffer_length = 16K
myisam_sort_buffer_size = 1M
max_connections=120
#addnew config
wait_timeout =120
back_log=100
read_buffer_size = 1M
thread_cache=32
skip-innodb
skip-bdb
skip-name-resolve
join_buffer_size=512k
query_cache_size = 32M
interactive_timeout=120
long_query_time=10
log_slow_queries= /usr/local/mysql4/logs/slow_query.log
query_cache_type= 1
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 4
#end new config
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
# Replication Master Server (default)
# binary logging is required for replication
#log-bin
# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1
# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
# the syntax is:
#
# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,
# MASTER_USER=, MASTER_PASSWORD= ;
#
# where you replace , , by quoted strings and
# by the master's port number (3306 by default).
#
# Example:
#
# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
# MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
# start replication for the first time (even unsuccessfully, for example
# if you mistyped the password in master-password and the slave fails to
# connect), the slave will create a master.info file, and any later
# change in this file to the variables' values below will be ignored and
# overridden by the content of the master.info file, unless you shutdown
# the slave server, delete master.info and restart the slaver server.
# For that reason, you may want to leave the lines below untouched
# (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id = 2
#
# The replication master for this slave - required
#master-host =
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user =
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port =
#
# binary logging - not required for slaves, but recommended
#log-bin
# Point the following paths to different dedicated disks
#tmpdir = /tmp/
#log-update = /path-to-dedicated-directory/hostname
# Uncomment the following if you are using BDB tables
#bdb_cache_size = 4M
#bdb_max_lock = 10000
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql/
#innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout補充
最佳化table_cachetable_cache指定表快取的大小。每當MySQL訪問一個表時,如果在表緩衝區中還有空間,該表就被開啟並放入其中,這樣可以更快地訪問表內容。通過檢查峰值時間的狀態值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。如果你發現open_tables等於table_cache,並且opened_tables在不斷增長,那麼你就需要增加table_cache的值了(上述狀態值可以使用SHOW STATUS LIKE ‘Open%tables'獲得)。注意,不能盲目地把table_cache設定成很大的值。如果設定得太高,可能會造成檔案描述符不足,從而造成效能不穩定或者串連失敗。對於有1G記憶體的機器,推薦值是128-256。
案例1:該案例來自一個不是特別繁忙的伺服器table_cache – 512open_tables – 103opened_tables – 1273uptime – 4021421 (measured in seconds)該案例中table_cache似乎設定得太高了。在峰值時間,開啟表的數目比table_cache要少得多。
案例2:該案例來自一台程式開發伺服器。table_cache – 64open_tables – 64opened-tables – 431uptime – 1662790 (measured in seconds)雖然open_tables已經等於table_cache,但是相對於伺服器已耗用時間來說,opened_tables的值也非常低。因此,增加table_cache的值應該用處不大。案例3:該案例來自一個upderperforming的伺服器table_cache – 64open_tables – 64opened_tables – 22423uptime – 19538該案例中table_cache設定得太低了。雖然已耗用時間不到6小時,open_tables達到了最大值,opened_tables的值也非常高。這樣就需要增加table_cache的值。最佳化key_buffer_sizekey_buffer_size指定索引緩衝的大小,它決定索引處理的速度,尤其是索引讀的速度。通過檢查狀態值Key_read_requests和Key_reads,可以知道key_buffer_size設定是否合理。比例key_reads / key_read_requests應該儘可能的低,至少是1:100,1:1000更好(上述狀態值可以使用SHOW STATUS LIKE ‘key_read%'獲得)。key_buffer_size只對MyISAM表起作用。即使你不使用MyISAM表,但是內部的臨時磁碟表是MyISAM表,也要使用該值。可以使用檢查狀態值created_tmp_disk_tables得知詳情。對於1G記憶體的機器,如果不使用MyISAM表,推薦值是16M(8-64M)。
案例1:健康情況key_buffer_size – 402649088 (384M)key_read_requests – 597579931key_reads - 56188案例2:警報狀態key_buffer_size – 16777216 (16M)key_read_requests – 597579931key_reads - 53832731案例1中比例低於1:10000,是健康的情況;案例2中比例達到1:11,警報已經拉響。
1)、back_log: 要求 MySQL 能有的串連數量。當主要MySQL線程在一個很短時間內得到非常多的串連請求,這就起作用,然後主線程花些時間(儘管很短)檢查串連並且啟動一個新線程。
back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中。只有如果期望在一個短時間內有很多串連,你需要增加它,換句話說,這值對到來的TCP/IP串連的偵聽隊列的大小。你的作業系統在這個隊列大小上有它自己的限制。 試圖設定back_log高於你的作業系統的限制將是無效的。 當你觀察你的主機處理序列表,發現大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待串連進程時,就要加大 back_log 的值了。預設數值是50,我把它改為500。
(2)、interactive_timeout: 伺服器在關閉它前在一個互動串連上等待行動的秒數。一個互動的客戶被定義為對 mysql_real_connect()使用 CLIENT_INTERACTIVE 選項的客戶。 預設數值是28800,我把它改為7200。
(3)、key_buffer_size: 索引塊是緩衝的並且被所有的線程共用。key_buffer_size是用於索引塊的緩衝區大小,增加它可得到更好處理的索引(對所有讀和多重寫),到你能負擔得起那樣多。如果你使它太大,系統將開始換頁並且真的變慢了。預設數值是8388600(8M),我的MySQL主機有2GB記憶體,所以我把它改為402649088(400MB)。
(4)、max_connections: 允許的同時客戶的數量。增加該值增加 mysqld 要求的檔案描述符的數量。這個數字應該增加,否則,你將經常看到 Too many connections 錯誤。 預設數值是100,我把它改為1024 。
(5)、record_buffer: 每個進行一個順序掃描的線程為其掃描的每張表分配這個大小的一個緩衝區。如果你做很多順序掃描,你可能想要增加該值。預設數值是131072(128K),我把它改為16773120 (16M)
(6)、sort_buffer: 每個需要進行排序的線程分配該大小的一個緩衝區。增加這值加速ORDER BY或GROUP BY操作。預設數值是2097144(2M),我把它改為 16777208 (16M)。
(7)、table_cache: 為所有線程開啟表的數量。增加該值能增加mysqld要求的檔案描述符的數量。MySQL對每個唯一開啟的表需要2個檔案描述符。預設數值是64,我把它改為512。
(、thread_cache_size: 可以複用的儲存在中的線程的數量。如果有,新的線程從緩衝中取得,當中斷連線的時候如果有空間,客戶的線置在緩衝中。如果有很多新的線程,為了提高效能可以這個變數值。通過比較 Connections 和 Threads_created 狀態的變數,可以看到這個變數的作用。我把它設定為 80。
(10)、wait_timeout: 伺服器在關閉它之前在一個串連上等待行動的秒數。 預設數值是28800,我把它改為7200。 註:參數的調整可以通過修改 /etc/my.cnf 檔案並重啟 MySQL 實現。這是一個比較謹慎的工作,上面的結果也僅僅是我的一些看法,你可以根據你自己主機的硬體情況(特別是記憶體大小)進一步修改。
我從網上找到的,我剛看了一下,還算不錯,發在這裡,大家看看,最好有牛人補充完善然後,再整理整理!
========================================在Apache, PHP, MySQL的體系架構中,MySQL對於效能的影響最大,也是關鍵的核心部分。對於Discuz!論壇程式也是如此,MySQL的設定是否合理最佳化,直接影響到論壇的速度和承載量!同時,MySQL也是最佳化難度最大的一個部分,不但需要理解一些MySQL專業知識,同時還需要長時間的觀察統計並且根據經驗進行判斷,然後設定合理的參數。 下面我們瞭解一下MySQL最佳化的一些基礎,MySQL的最佳化我分為兩個部分,一是伺服器物理硬體的最佳化;二是MySQL自身(my.cnf)的最佳化。
(1) 伺服器硬體對MySQL效能的影響
a) 磁碟尋道能力(磁碟I/O),以目前高轉速SCSI硬碟(7200轉/秒)為例,這種硬碟理論上每秒尋道7200次,這是物理特性決定的,沒有辦法改變。MySQL每秒鐘都在進行大量、複雜的查詢操作,對磁碟的讀寫量可想而知。所以,通常認為磁碟I/O是制約MySQL效能的最大因素之一,對於日均訪問量在100萬PV以上的Discuz!論壇,由於磁碟I/O的制約,MySQL的效能會非常低下!解決這一制約因素可以考慮以下幾種解決方案: 使用RAID-0+1磁碟陣列,注意不要嘗試使用RAID-5,MySQL在RAID-5磁碟陣列上的效率不會像你期待的那樣快; 拋棄傳統的硬碟,使用速度更快的快閃記憶體式存放裝置。經過Discuz!公司技術工程的測試,使用快閃記憶體式存放裝置可比傳統硬碟速度高出6-10倍左右。
b) CPU 對於MySQL應用,推薦使用S.M.P.架構的多路對稱CPU,例如:可以使用兩顆Intel Xeon 3.6GHz的CPU。
c) 實體記憶體對於一台使用MySQL的Database Server來說,伺服器記憶體建議不要小於2GB,推薦使用4GB以上的實體記憶體。
(2) MySQL自身因素當解決了上述伺服器硬體制約因素後,讓我們看看MySQL自身的最佳化是如何操作的。對MySQL自身的最佳化主要是對其設定檔my.cnf中的各項參數進行最佳化調整。下面我們介紹一些對效能影響較大的參數。 由於my.cnf檔案的最佳化設定是與伺服器硬體設定息息相關的,因而我們指定一個假想的伺服器硬體環境:
CPU: 2顆Intel Xeon 2.4GHz 記憶體: 4GB DDR 硬碟: SCSI 73GB
下面,我們根據以上硬體設定結合一份已經最佳化好的my.cnf進行說明:
# vi /etc/my.cnf以下只列出my.cnf檔案中[mysqld]段落中的內容,其他段落內容對MySQL運行效能影響甚微,因而姑且忽略。
[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking
# 避免MySQL的外部鎖定,減少出錯幾率增強穩定性。
skip-name-resolve禁止MySQL對外部串連進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠程主機串連授權都要使用IP地址方式,否則MySQL將無法正常處理串連請求!
back_log = 384指定MySQL可能的串連數量。當MySQL主線程在很短的時間內接收到非常多的串連請求,該參數生效,主線程花費很短的時間檢查串連並且啟動一個新線程。
back_log參數的值指出在MySQL暫時停止回應新請求之前的短時間內多少個請求可以被存在堆棧中。 如果系統在一個短時間內有很多串連,則需要增大該參數的值,該參數值指定到來的TCP/IP串連的偵聽隊列的大小。不同的作業系統在這個隊列大小上有它自己的限制。 試圖設定back_log高於你的作業系統的限制將是無效的。預設值為50。對於Linux系統推薦設定為小於512的整數。
key_buffer_size = 256M
# key_buffer_size指定用於索引的緩衝區大小,增加它可得到更好的索引處理效能。對於記憶體在4GB左右的伺服器該參數可設定為256M或384M。注意:該參數值設定的過大反而會是伺服器整體效率降低!
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M查詢排序時所能使用的緩衝區大小。注意:該參數對應的分配記憶體是每串連獨佔!如果有100個串連,那麼實際分配的總共排序緩衝區大小為100 × 6 = 600MB。所以,對於記憶體在4GB左右的伺服器推薦設定為6-8M。
read_buffer_size = 4M讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該參數對應的分配記憶體也是每串連獨享!
join_buffer_size = 8M聯集查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該參數對應的分配記憶體也是每串連獨享!
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M指定MySQL查詢緩衝區的大小。可以通過在MySQL控制台執行以下命令觀察:
# > SHOW VARIABLES LIKE ‘%query_cache%';
# > SHOW STATUS LIKE ‘Qcache%';
# 如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩衝不夠的情況;如果Qcache_hits的值非常大,則表明查詢緩衝使用非常頻繁,如果該值較小反而會影響效率,那麼可以考慮不用查詢緩衝;Qcache_free_blocks,如果該值非常大,則表明緩衝區中片段很多。
tmp_table_size = 256M
max_connections = 768指定MySQL允許的最大串連進程數。如果在訪問論壇時經常出現Too Many Connections的錯誤提 示,則需要增大該參數值。
max_connect_errors = 10000000
wait_timeout = 10指定一個請求的最大連線時間,對於4GB左右記憶體的伺服器可以設定為5-10。
thread_concurrency = 8該參數取值為伺服器邏輯CPU數量×2,在本例中,伺服器有2顆物理CPU,而每顆物理CPU又支援H.T超執行緒,所以實際取值為4 × 2 = 8
skip-networking開啟該選項可以徹底關閉MySQL的TCP/IP串連方式,如果WEB伺服器是以遠端連線的方式訪問MySQL資料庫伺服器則不要開啟該選項!否則將無法正常串連!
————————————————————————————————–
my.ini配置建議:
table_cache=1024
實體記憶體越大,設定就越大.預設為2402,調到512-1024最佳
innodb_additional_mem_pool_size=4M
預設為2M
innodb_flush_log_at_trx_commit=1
(設定為0就是等到innodb_log_buffer_size列隊滿後再統一儲存,預設為1)
innodb_log_buffer_size=2M
預設為1M
innodb_thread_concurrency=8
你的伺服器CPU有幾個就設定為幾,建議用預設一般為8
key_buffer_size=256M
預設為218 調到128最佳
tmp_table_size=64M
預設為16M 調到64-256最掛
read_buffer_size=4M
預設為64K
read_rnd_buffer_size=16M
預設為256K
sort_buffer_size=32M
預設為256K
max_connections=1024
預設為1210
thread_cache_size=120
預設為60
query_cache_size=32M
————————————————————————————————–
以下是另一個的my.ini配置建議:
port=3306
default-character-set=latin1
default-storage-engine=INNODB
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION”
max_connections=120
query_cache_size=32M
#快取資料表數量,設定這個參數可以參見系統狀態中的 open_tables(表示當前開啟的資料表總數) 和 opened_tables(表示所有開啟的資料表總數)
table_cache=256
#暫存資料表的大小
tmp_table_size=12M
#緩衝可重用的線程數
thread_cache_size = 64
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G
myisam_sort_buffer_size=64M
#這對MyISAM表來說非常重要。如果只是使用MyISAM表,可以把它設定為可用記憶體的 30-40%。合理的值取決於索引大小、資料量以及負載 — #記住,MyISAM表會使用作業系統的緩衝來快取資料,因此需要留出部分記憶體給它們,很多情況下資料比索引大多了。
key_buffer_size=128M
read_buffer_size=1M
read_rnd_buffer_size=512K
sort_buffer_size=1M
#這對innodb表來說非常重要
innodb_buffer_pool_size = 256M
#這取決於你需要的回複速度.128M這個數值是適當的恢復和良好效能之間的一個好的平衡.
innodb_log_file_size = 128M
#大多數情況4M足夠,除非正將很大的blob資料匯入到Innodb中可以增加一點.
innodb_log_buffer_size=4M
#這個值取決於你的程式,可能高或者低.8是代表起始值.
innodb_thread_concurrency=8
innodb_additional_mem_pool_size=100M
#如果你不是很關心ACID,可以容許在系統完全crash的情況下丟失最後一兩秒的事務,那麼可以設定這個值.它可以極大的提高”短”的寫事務的效率.
innodb_flush_log_at_trx_commit=2
注意:
很多情況需要具體情況具體分析
1>如果Key_reads太大,則應該把my.cnf中Key_buffer_size變大,保持Key_reads/Key_read_requests至少1/100以上,越小越好。
2>如果Qcache_lowmem_prunes很大,就要增加Query_cache_size的值。