mysql优化 mysql.ini优化
[mysqld]
port = 3306
serverid = 1?
socket = /tmp/mysql.sock
skip-name-resolve?????? #禁止MySQL對(duì)外部連接進(jìn)行DNS解析
skip-grant-tables
#禁止MySQL對(duì)外部連接進(jìn)行DNS解析,使用這一選項(xiàng)可以消除MySQL進(jìn)行DNS解析的時(shí)間。但需要注意,如果開啟該選項(xiàng),則所有遠(yuǎn)程主機(jī)連接授權(quán)都要使用IP地址方式,否則MySQL將無法正常處理連接請(qǐng)求!注:如果用winform連接mysql,加入此句速度會(huì)有很大的提升
skip-locking
# 避免MySQL的外部鎖定,減少出錯(cuò)幾率增強(qiáng)穩(wěn)定性。
back_log = 384
指定MySQL可能的連接數(shù)量。當(dāng)MySQL主線程在很短的時(shí)間內(nèi)接收到非常多的連接請(qǐng)求,該參數(shù)生效,主線程花費(fèi)很短的時(shí)間檢查連接并且啟動(dòng)一個(gè)新線程。 back_log參數(shù)的值指出在MySQL暫時(shí)停止響應(yīng)新請(qǐng)求之前的短時(shí)間內(nèi)多少個(gè)請(qǐng)求可以被存在堆棧中。 如果系統(tǒng)在一個(gè)短時(shí)間內(nèi)有很多連接,則需要增大該參數(shù)的值,該參數(shù)值指定到來的TCP/IP連接的偵聽隊(duì)列的大小。不同的操作系統(tǒng)在這個(gè)隊(duì)列大小上有它自己的限制。 試圖設(shè)定back_log高于你的操作系統(tǒng)的限制將是無效的。默認(rèn)值為50。對(duì)于Linux系統(tǒng)推薦設(shè)置為小于512的整數(shù)。
key_buffer_size = 32M
# key_buffer_size這對(duì)MyISAM表來說非常重要。如果只是使用MyISAM表,可以把它設(shè)置為可用內(nèi)存的 30-40%。合理的值取決于索引大小、數(shù)據(jù)量以及負(fù)載 -- 記住,MyISAM表會(huì)使用操作系統(tǒng)的緩存來緩存數(shù)據(jù),因此需要留出部分內(nèi)存給它們,很多情況下數(shù)據(jù)比索引大多了。盡管如此,需要總是檢查是否所有的 key_buffer 都被利用了 -- .MYI 文件只有 1GB,而 key_buffer 卻設(shè)置為 4GB 的情況是非常少的。這么做太浪費(fèi)了。如果你很少使用MyISAM表,那么也保留低于 16-32MB 的key_buffer_size 以適應(yīng)給予磁盤的臨時(shí)表索引所需。
innodb_buffer_pool_size = 2.4G?
#這對(duì)Innodb表來說非常重要。Innodb相比MyISAM表對(duì)緩沖更為敏感。MyISAM可以在默認(rèn)的 key_buffer_size 設(shè)置下運(yùn)行的可以,然而Innodb在默認(rèn)的innodb_buffer_pool_size 設(shè)置下卻跟蝸牛似的。由于Innodb把數(shù)據(jù)和索引都緩存起來,無需留給操作系統(tǒng)太多的內(nèi)存,因此如果只需要用Innodb的話則可以設(shè)置它高達(dá) 70-80% 的可用內(nèi)存。-- 如果你的數(shù)據(jù)量不大,并且不會(huì)暴增,那么無需把innodb_buffer_pool_size 設(shè)置的太大了。
innodb_additional_pool_size = 20M
#這個(gè)選項(xiàng)對(duì)性能影響并不太多,至少在有差不多足夠內(nèi)存可分配的操作系統(tǒng)上是這樣。不過如果你仍然想設(shè)置為 20MB(或者更大),因此就需要看一下Innodb其他需要分配的內(nèi)存有多少。
innodb_log_file_size = 512M
#在高寫入負(fù)載尤其是大數(shù)據(jù)集的情況下很重要。這個(gè)值越大則性能相對(duì)越高,但是要注意到可能會(huì)增加恢復(fù)時(shí)間。我經(jīng)常設(shè)置為64-512MB,根據(jù)服務(wù)器大小而異。
innodb_log_buffer_size =16M
#默認(rèn)的設(shè)置在中等強(qiáng)度寫入負(fù)載以及較短事務(wù)的情況下,服務(wù)器性能還可以。如果存在更新操作峰值或者負(fù)載較大,就應(yīng)該考慮加大它的值了。如果它的值設(shè)置太高了,可能會(huì)浪費(fèi)內(nèi)存 -- 它每秒都會(huì)刷新一次,因此無需設(shè)置超過1秒所需的內(nèi)存空間。通常8-16MB就足夠了。越小的系統(tǒng)它的值越小。
innodb_flush_logs_at_trx_commit = 2
#是否為Innodb比MyISAM慢1000倍而頭大?看來也許你忘了修改這個(gè)參數(shù)了。默認(rèn)值是 1,這意味著每次提交的更新事務(wù)(或者每個(gè)事務(wù)之外的語(yǔ)句)都會(huì)刷新到磁盤中,而這相當(dāng)耗費(fèi)資源,尤其是沒有電池備用緩存時(shí)。很多應(yīng)用程序,尤其是從 MyISAM轉(zhuǎn)變過來的那些,把它的值設(shè)置為 2 就可以了,也就是不把日志刷新到磁盤上,而只刷新到操作系統(tǒng)的緩存上。日志仍然會(huì)每秒刷新到磁盤中去,因此通常不會(huì)丟失每秒1-2次更新的消耗。如果設(shè)置為0就快很多了,不過也相對(duì)不安全了 -- MySQL服務(wù)器崩潰時(shí)就會(huì)丟失一些事務(wù)。設(shè)置為2指揮丟失刷新到操作系統(tǒng)緩存的那部分事務(wù)。
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
#查詢排序時(shí)所能使用的緩沖區(qū)大小。注意:該參數(shù)對(duì)應(yīng)的分配內(nèi)存是每連接獨(dú)占!如果有100個(gè)連接,那么實(shí)際分配的總共排序緩沖區(qū)大小為100 × 6 = 600MB。所以,對(duì)于內(nèi)存在4GB左右的服務(wù)器推薦設(shè)置為6-8M。
read_buffer_size = 4M
#讀查詢操作所能使用的緩沖區(qū)大小。和sort_buffer_size一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享!
join_buffer_size = 8M
#聯(lián)合查詢操作所能使用的緩沖區(qū)大小,和sort_buffer_size一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享!
myisam_sort_buffer_size = 64M
table_cache = 512
#打開一個(gè)表的開銷可能很大。例如MyISAM把MYI文件頭標(biāo)志該表正在使用中。你肯定不希望這種操作太頻繁,所以通常要加大緩存數(shù)量,使得足以最大限度地緩存打開的表。它需要用到操作系統(tǒng)的資源以及內(nèi)存,對(duì)當(dāng)前的硬件配置來說當(dāng)然不是什么問題了。如果你有200多個(gè)表的話,那么設(shè)置為 1024 也許比較合適(每個(gè)線程都需要打開表),如果連接數(shù)比較大那么就加大它的值。我曾經(jīng)見過設(shè)置為100,000的情況。
thread_cache_size = 64
#線程的創(chuàng)建和銷毀的開銷可能很大,因?yàn)槊總€(gè)線程的連接/斷開都需要。我通常至少設(shè)置為 16。如果應(yīng)用程序中有大量的跳躍并發(fā)連接并且 Threads_Created 的值也比較大,那么我就會(huì)加大它的值。它的目的是在通常的操作中無需創(chuàng)建新線程。
query_cache_size = 64M
#指定MySQL查詢緩沖區(qū)的大小。可以通過在MySQL控制臺(tái)執(zhí)行以下命令觀察:
# > SHOW VARIABLES LIKE '%query_cache%';
# > SHOW STATUS LIKE 'Qcache%';
# 如果Qcache_lowmem_prunes的值非常大,則表明經(jīng)常出現(xiàn)緩沖不夠的情況;如果Qcache_hits的值非常大,則表明查詢緩沖使用非常頻繁,如果該值較小反而會(huì)影響效率,那么可以考慮不用查詢緩沖;Qcache_free_blocks,如果該值非常大,則表明緩沖區(qū)中碎片很多。
tmp_table_size = 256M
max_connections = 768
#指定MySQL允許的最大連接進(jìn)程數(shù)。如果在訪問論壇時(shí)經(jīng)常出現(xiàn)Too Many Connections的錯(cuò)誤提 示,則需要增大該參數(shù)值。
max_connect_errors = 10000000
wait_timeout = 10
#指定一個(gè)請(qǐng)求的最大連接時(shí)間,對(duì)于4GB左右內(nèi)存的服務(wù)器可以設(shè)置為5-10。
thread_concurrency = 8
#該參數(shù)取值為服務(wù)器邏輯CPU數(shù)量×2,在本例中,服務(wù)器有2顆物理CPU,而每顆物理CPU又支持H.T超線程,所以實(shí)際取值為4 × 2 = 8
skip-networking
#開啟該選項(xiàng)可以徹底關(guān)閉MySQL的TCP/IP連接方式,如果WEB服務(wù)器是以遠(yuǎn)程連接的方式訪問MySQL數(shù)據(jù)庫(kù)服務(wù)器則不要開啟該選項(xiàng)!否則將無法正常連接!
show status 命令
含義如下:
aborted_clients 客戶端非法中斷連接次數(shù)
aborted_connects 連接mysql失敗次數(shù)
com_xxx xxx命令執(zhí)行次數(shù),有很多條
connections 連接mysql的數(shù)量
Created_tmp_disk_tables 在磁盤上創(chuàng)建的臨時(shí)表
Created_tmp_tables 在內(nèi)存里創(chuàng)建的臨時(shí)表
Created_tmp_files 臨時(shí)文件數(shù)
Key_read_requests The number of requests to read a key block from the cache
Key_reads The number of physical reads of a key block from disk
Max_used_connections 同時(shí)使用的連接數(shù)
Open_tables 開放的表
Open_files 開放的文件
Opened_tables 打開的表
Questions 提交到server的查詢數(shù)
Sort_merge_passes 如果這個(gè)值很大,應(yīng)該增加my.cnf中的sort_buffer值
Uptime 服務(wù)器已經(jīng)工作的秒數(shù)
提升性能的建議:
1.如果opened_tables太大,應(yīng)該把my.cnf中的table_cache變大
2.如果Key_reads太大,則應(yīng)該把my.cnf中key_buffer_size變大.可以用Key_reads/Key_read_requests計(jì)算出cache失敗率
3.如果Handler_read_rnd太大,則你寫的SQL語(yǔ)句里很多查詢都是要掃描整個(gè)表,而沒有發(fā)揮索引的鍵的作用
4.如果Threads_created太大,就要增加my.cnf中thread_cache_size的值.可以用Threads_created/Connections計(jì)算cache命中率
5.如果Created_tmp_disk_tables太大,就要增加my.cnf中tmp_table_size的值,用基于內(nèi)存的臨時(shí)表代替基于磁盤的
轉(zhuǎn)載于:https://www.cnblogs.com/wangjiafang/archive/2013/02/25/2932756.html
總結(jié)
以上是生活随笔為你收集整理的mysql优化 mysql.ini优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MapXtreme 安装、编码及打包注意
- 下一篇: SQL-SqlServer中decima