《Mysql入門mysql數(shù)據(jù)庫性能優(yōu)化 mysql配置文件my.cnf詳解》要點(diǎn):
本文介紹了Mysql入門mysql數(shù)據(jù)庫性能優(yōu)化 mysql配置文件my.cnf詳解,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
MYSQL學(xué)習(xí)MYSQL服務(wù)器my.cnf配置文檔詳解
MYSQL學(xué)習(xí)硬件:內(nèi)存16G
?
MYSQL學(xué)習(xí)[client]
port = 3306
socket = /data/3306/mysql.sock
MYSQL學(xué)習(xí)[mysql]
no-auto-rehash
MYSQL學(xué)習(xí)[mysqld]
user = mysql
port = 3306
socket = /data/3306/mysql.sock
basedir = /usr/local/mysql
datadir = /data/3306/data
open_files_limit??? = 10240
MYSQL學(xué)習(xí)相關(guān)閱讀:
mysql性能優(yōu)化 my.cnf配置文件詳解 linux下mysql尋找my.cnf文件的順序MYSQL學(xué)習(xí)參數(shù)說明:
back_log = 600?
#在MYSQL暫時(shí)停止響應(yīng)新請(qǐng)求之前,短時(shí)間內(nèi)的多少個(gè)請(qǐng)求可以被存在堆棧中.如果系統(tǒng)在短時(shí)間內(nèi)有很多連接,則需要增大該參數(shù)的值,該參數(shù)值指定到來的TCP/IP連接的監(jiān)聽隊(duì)列的大小.默認(rèn)值50.
MYSQL學(xué)習(xí)max_connections = 3000?
#MySQL允許最大的進(jìn)程連接數(shù),如果經(jīng)常出現(xiàn)Too Many Connections的錯(cuò)誤提示,則需要增大此值.
MYSQL學(xué)習(xí)max_connect_errors = 6000?
#設(shè)置每個(gè)主機(jī)的連接請(qǐng)求異常中斷的最大次數(shù),當(dāng)超過該次數(shù),MYSQL服務(wù)器將禁止host的連接請(qǐng)求,直到mysql服務(wù)器重啟或通過flush hosts命令清空此host的相關(guān)信息.
MYSQL學(xué)習(xí)table_cache = 614?
#指示表調(diào)整緩沖區(qū)大小.
MYSQL學(xué)習(xí)# table_cache 參數(shù)設(shè)置表高速緩存數(shù)目.每個(gè)連接進(jìn)來,都會(huì)至少打開一個(gè)表緩存.因此, table_cache 的大小應(yīng)與 max_connections 的設(shè)置有關(guān).例如,對(duì)于 200 個(gè)并行運(yùn)行的連接,應(yīng)該讓表的緩存至少有 200 × N ,這里 N 是應(yīng)用可以執(zhí)行的查詢的一個(gè)聯(lián)接中表的最大數(shù)量.此外,還需要為臨時(shí)表和文件保留一些額外文件描述符.
# 當(dāng) Mysql 訪問一個(gè)表時(shí),如果該表在緩存中已經(jīng)被打開,則可以直接訪問緩存;如果沒有被緩存,但是在 Mysql 表緩沖區(qū)中還有空間,那么這個(gè)表就被打開并放入表緩沖區(qū);如果表緩存滿了,則會(huì)按照一定的規(guī)則將當(dāng)前未用的表釋放,或者臨時(shí)擴(kuò)大表緩存來存放,使用表緩存 的好處是可以更快速地訪問表中的內(nèi)容.
MYSQL學(xué)習(xí)執(zhí)行 flush tables 會(huì)清空緩存的內(nèi)容.
MYSQL學(xué)習(xí)一般來說,可以通過查看數(shù)據(jù)庫運(yùn)行峰值時(shí)間的狀態(tài)值 Open_tables 和 Opened_tables ,判斷是否需要增加 table_cache 的值(其中 open_tables 是當(dāng)前打開的表的數(shù)量, Opened_tables 則是已經(jīng)打開的表的數(shù)量).即如果open_tables接近table_cache的時(shí)候,并且Opened_tables這個(gè)值在逐步增加,那就要考 慮增加table_cache這個(gè)值的大小了.還有就是Table_locks_waited比較高的時(shí)候,也需要增加table_cache.
MYSQL學(xué)習(xí)external-locking = FALSE?
#使用–skip-external-locking MySQL選項(xiàng)以避免外部鎖定.該選項(xiàng)默認(rèn)開啟
MYSQL學(xué)習(xí)max_allowed_packet = 32M?
#設(shè)置在網(wǎng)絡(luò)傳輸中一次消息傳輸量的最大值.系統(tǒng)默認(rèn)值 為1MB,最大值是1GB,必須設(shè)置1024的倍數(shù).
MYSQL學(xué)習(xí)sort_buffer_size = 2M?
# Sort_Buffer_Size 是一個(gè)connection級(jí)參數(shù),在每個(gè)connection(session)第一次需要使用這個(gè)buffer的時(shí)候,一次性分配設(shè)置的內(nèi)存.
#Sort_Buffer_Size 并不是越大越好,由于是connection級(jí)的參數(shù),過大的設(shè)置+高并發(fā)可能會(huì)耗盡系統(tǒng)內(nèi)存資源.例如:500個(gè)連接將會(huì)消耗 500*sort_buffer_size(8M)=4G內(nèi)存
#Sort_Buffer_Size 超過2KB的時(shí)候,就會(huì)使用mmap() 而不是 malloc() 來進(jìn)行內(nèi)存分配,導(dǎo)致效率降低.
MYSQL學(xué)習(xí)join_buffer_size = 2M?
#用于表間關(guān)聯(lián)緩存的大小,和sort_buffer_size一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每個(gè)連接獨(dú)享.
MYSQL學(xué)習(xí)thread_cache_size = 300?
# 服務(wù)器線程緩存這個(gè)值表示可以重新利用保存在緩存中線程的數(shù)量,當(dāng)斷開連接時(shí)如果緩存中還有空間,那么客戶端的線程將被放到緩存中,如果線程重新被請(qǐng)求, 那么請(qǐng)求將從緩存中讀取,如果緩存中是空的或者是新的請(qǐng)求,那么這個(gè)線程將被重新創(chuàng)建,如果有很多新的線程,增加這個(gè)值可以改善系統(tǒng)性能.通過比較 Connections 和 Threads_created 狀態(tài)的變量,可以看到這個(gè)變量的作用.設(shè)置規(guī)則如下:1GB 內(nèi)存配置為8,2GB配置為16,3GB配置為32,4GB或更高內(nèi)存,可配置更大.
MYSQL學(xué)習(xí)thread_concurrency = 8?
# 設(shè)置thread_concurrency的值的正確與否, 對(duì)mysql的性能影響很大, 在多個(gè)cpu(或多核)的情況下,錯(cuò)誤設(shè)置了thread_concurrency的值, 會(huì)導(dǎo)致mysql不能充分利用多cpu(或多核), 出現(xiàn)同一時(shí)刻只能一個(gè)cpu(或核)在工作的情況.thread_concurrency應(yīng)設(shè)為CPU核數(shù)的2倍. 比如有一個(gè)雙核的CPU, 那么thread_concurrency的應(yīng)該為4; 2個(gè)雙核的cpu, thread_concurrency的值應(yīng)為8
MYSQL學(xué)習(xí)query_cache_size = 64M?
#在MyISAM引擎優(yōu)化中,這個(gè)參數(shù)也是一個(gè)重要的優(yōu)化參數(shù).但也爆露出來一些問題.機(jī)器的內(nèi)存越來越大,習(xí)慣性把參數(shù)分配的值越來越大.這個(gè)參數(shù)加大 后也引發(fā)了一系列問題.我們首先分析一下 query_cache_size的工作原理:一個(gè)SELECT查詢?cè)贒B中工作后,DB會(huì)把該語句緩存下來,當(dāng)同樣的一個(gè)SQL再次來到DB里調(diào)用 時(shí),DB在該表沒發(fā)生變化的情況下把結(jié)果從緩存中返回給Client.這里有一個(gè)關(guān)建點(diǎn),就是DB在利用Query_cache工作時(shí),要求該語句涉及的 表在這段時(shí)間內(nèi)沒有發(fā)生變更.那如果該表在發(fā)生變更時(shí),Query_cache里的數(shù)據(jù)又怎么處理呢?首先要把Query_cache和該表相關(guān)的語句全 部置為失效,然后在寫入更新.那么如果Query_cache非常大,該表的查詢結(jié)構(gòu)又比較多,查詢語句失效也慢,一個(gè)更新或是Insert就會(huì)很慢,這 樣看到的就是Update或是Insert怎么這么慢了.所以在數(shù)據(jù)庫寫入量或是更新量也比較大的系統(tǒng),該參數(shù)不適合分配過大.而且在高并發(fā),寫入量大的 系統(tǒng),建議把該功能禁掉.
MYSQL學(xué)習(xí)query_cache_limit = 4M???
#指定單個(gè)查詢能夠使用的緩沖區(qū)大小,缺省為1M
MYSQL學(xué)習(xí)query_cache_min_res_unit = 2k?
#默認(rèn)是4KB,設(shè)置值大對(duì)大數(shù)據(jù)查詢有好處,但如果你的查詢都是小數(shù)據(jù)查詢,就容易造成內(nèi)存碎片和浪費(fèi)
#查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
#如果查詢緩存碎片率超過20%,可以用FLUSH QUERY CACHE整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小數(shù)據(jù)量的話.
#查詢緩存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
#查詢緩存利用率在25%以下的話說明query_cache_size設(shè)置的過大,可適當(dāng)減小;查詢緩存利用率在80%以上而且Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點(diǎn)小,要不就是碎片太多.
#查詢緩存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%
MYSQL學(xué)習(xí)default-storage-engine = MyISAM
#default_table_type = InnoDB
MYSQL學(xué)習(xí)thread_stack = 192K?
#設(shè)置MYSQL每個(gè)線程的堆棧大小,默認(rèn)值足夠大,可滿足普通操作.可設(shè)置范圍為128K至4GB,默認(rèn)為192KB.
MYSQL學(xué)習(xí)transaction_isolation = READ-COMMITTED?
# 設(shè)定默認(rèn)的事務(wù)隔離級(jí)別.可用的級(jí)別如下:
READ UNCOMMITTED-讀未提交
MYSQL學(xué)習(xí)READ COMMITTE-讀已提交
MYSQL學(xué)習(xí)REPEATABLE READ -可重復(fù)讀
MYSQL學(xué)習(xí)SERIALIZABLE -串行
MYSQL學(xué)習(xí)tmp_table_size = 256M?
# tmp_table_size 的默認(rèn)大小是 32M.如果一張臨時(shí)表超出該大小,MySQL產(chǎn)生一個(gè) The table tbl_name is full 形式的錯(cuò)誤,如果你做很多高級(jí) GROUP BY 查詢,增加 tmp_table_size 值.如果超過該值,則會(huì)將臨時(shí)表寫入磁盤.
?
MYSQL學(xué)習(xí)expire_logs_days = 7
key_buffer_size = 2048M
#批定用于索引的緩沖區(qū)大小,增加它可以得到更好的索引處理性能,對(duì)于內(nèi)存在4GB左右的服務(wù)器來說,該參數(shù)可設(shè)置為256MB或384MB.
MYSQL學(xué)習(xí)read_buffer_size = 1M?
# MySql讀入緩沖區(qū)大小.對(duì)表進(jìn)行順序掃描的請(qǐng)求將分配一個(gè)讀入緩沖區(qū),MySql會(huì)為它分配一段內(nèi)存緩沖區(qū).read_buffer_size變量控 制這一緩沖區(qū)的大小.如果對(duì)表的順序掃描請(qǐng)求非常頻繁,并且你認(rèn)為頻繁掃描進(jìn)行得太慢,可以通過增加該變量值以及內(nèi)存緩沖區(qū)大小提高其性能.和 sort_buffer_size一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每個(gè)連接獨(dú)享.
MYSQL學(xué)習(xí)read_rnd_buffer_size = 16M?
# MySql的隨機(jī)讀(查詢操作)緩沖區(qū)大小.當(dāng)按任意順序讀取行時(shí)(例如,按照排序順序),將分配一個(gè)隨機(jī)讀緩存區(qū).進(jìn)行排序查詢時(shí),MySql會(huì)首先掃 描一遍該緩沖,以避免磁盤搜索,提高查詢速度,如果需要排序大量數(shù)據(jù),可適當(dāng)調(diào)高該值.但MySql會(huì)為每個(gè)客戶連接發(fā)放該緩沖空間,所以應(yīng)盡量適當(dāng)設(shè)置 該值,以避免內(nèi)存開銷過大.
MYSQL學(xué)習(xí)bulk_insert_buffer_size = 64M?
#批量插入數(shù)據(jù)緩存大小,可以有效提高插入效率,默認(rèn)為8M
MYSQL學(xué)習(xí)myisam_sort_buffer_size = 128M?
# MyISAM表發(fā)生變化時(shí)重新排序所需的緩沖
MYSQL學(xué)習(xí)myisam_max_sort_file_size = 10G?
# MySQL重建索引時(shí)所允許的最大臨時(shí)文件的大小 (當(dāng) REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
# 如果文件大小比此值更大,索引會(huì)通過鍵值緩沖創(chuàng)建(更慢)
MYSQL學(xué)習(xí)myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1?
# 如果一個(gè)表擁有超過一個(gè)索引, MyISAM 可以通過并行排序使用超過一個(gè)線程去修復(fù)他們.
# 這對(duì)于擁有多個(gè)CPU以及大量內(nèi)存情況的用戶,是一個(gè)很好的選擇.
MYSQL學(xué)習(xí)myisam_recover?
#自動(dòng)檢查和修復(fù)沒有適當(dāng)關(guān)閉的 MyISAM 表
skip-name-resolve
lower_case_table_names = 1
MYSQL學(xué)習(xí)server-id = 1
MYSQL學(xué)習(xí)innodb_additional_mem_pool_size = 16M?
#這個(gè)參數(shù)用來設(shè)置 InnoDB 存儲(chǔ)的數(shù)據(jù)目錄信息和其它內(nèi)部數(shù)據(jù)結(jié)構(gòu)的內(nèi)存池大小,類似于Oracle的library cache.這不是一個(gè)強(qiáng)制參數(shù),可以被突破.
MYSQL學(xué)習(xí)innodb_buffer_pool_size = 2048M?
# 這對(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)存.一些應(yīng)用于 key_buffer 的規(guī)則有 — 如果你的數(shù)據(jù)量不大,并且不會(huì)暴增,那么無需把 innodb_buffer_pool_size 設(shè)置的太大了
MYSQL學(xué)習(xí)innodb_data_file_path = ibdata1:1024M:autoextend?
#表空間文件 重要數(shù)據(jù)
MYSQL學(xué)習(xí)innodb_file_io_threads = 4?
#文件IO的線程數(shù),一般為 4,但是在 Windows 下,可以設(shè)置得較大.
MYSQL學(xué)習(xí)innodb_thread_concurrency = 8
#服務(wù)器有幾個(gè)CPU就設(shè)置為幾,建議用默認(rèn)設(shè)置,一般為8.
MYSQL學(xué)習(xí)innodb_flush_log_at_trx_commit = 2?
# 如果將此參數(shù)設(shè)置為1,將在每次提交事務(wù)后將日志寫入磁盤.為提供性能,可以設(shè)置為0或2,但要承擔(dān)在發(fā)生故障時(shí)丟失數(shù)據(jù)的風(fēng)險(xiǎn).設(shè)置為0表示事務(wù)日志寫 入日志文件,而日志文件每秒刷新到磁盤一次.設(shè)置為2表示事務(wù)日志將在提交時(shí)寫入日志,但日志文件每次刷新到磁盤一次.
MYSQL學(xué)習(xí)innodb_log_buffer_size = 16M?
#此參數(shù)確定些日志文件所用的內(nèi)存大小,以M為單位.緩沖區(qū)更大能提高性能,但意外的故障將會(huì)丟失數(shù)據(jù).MySQL開發(fā)人員建議設(shè)置為1-8M之間
MYSQL學(xué)習(xí)innodb_log_file_size = 128M?
#此參數(shù)確定數(shù)據(jù)日志文件的大小,以M為單位,更大的設(shè)置可以提高性能,但也會(huì)增加恢復(fù)故障數(shù)據(jù)庫所需的時(shí)間
MYSQL學(xué)習(xí)innodb_log_files_in_group = 3?
#為提高性能,MySQL可以以循環(huán)方式將日志文件寫到多個(gè)文件.推薦設(shè)置為3M
MYSQL學(xué)習(xí)innodb_max_dirty_pages_pct = 90?
#推薦閱讀 http://www.taobaodba.com/html/221_innodb_max_dirty_pages_pct_checkpoint.html
# Buffer_Pool中Dirty_Page所占的數(shù)量,直接影響InnoDB的關(guān)閉時(shí)間.參數(shù)innodb_max_dirty_pages_pct 可以直接控制了Dirty_Page在Buffer_Pool中所占的比率,而且幸運(yùn)的是innodb_max_dirty_pages_pct是可以動(dòng) 態(tài)改變的.所以,在關(guān)閉InnoDB之前先將innodb_max_dirty_pages_pct調(diào)小,強(qiáng)制數(shù)據(jù)塊Flush一段時(shí)間,則能夠大大縮短 MySQL關(guān)閉的時(shí)間.
MYSQL學(xué)習(xí)innodb_lock_wait_timeout = 120?
# InnoDB 有其內(nèi)置的死鎖檢測(cè)機(jī)制,能導(dǎo)致未完成的事務(wù)回滾.但是,如果結(jié)合InnoDB使用MyISAM的lock tables 語句或第三方事務(wù)引擎,則InnoDB無法識(shí)別死鎖.為消除這種可能性,可以將innodb_lock_wait_timeout設(shè)置為一個(gè)整數(shù)值,指示 MySQL在允許其他事務(wù)修改那些最終受事務(wù)回滾的數(shù)據(jù)之前要等待多長時(shí)間(秒數(shù))
MYSQL學(xué)習(xí)innodb_file_per_table = 0?
#獨(dú)享表空間(關(guān)閉)
?
MYSQL學(xué)習(xí)[mysqldump]
quick
max_allowed_packet = 32M
MYSQL學(xué)習(xí)[mysqld_safe]
log-error=/data/3306/mysql_oldboy.err
pid-file=/data/3306/mysqld.pid
MYSQL學(xué)習(xí)#補(bǔ)充
#wait_timeout = 10?
#指定一個(gè)請(qǐng)求的最大連接時(shí)間,對(duì)于4GB左右的內(nèi)存服務(wù)器來說,可以將其設(shè)置為5-10.
#skip_networking?
#開啟該選可以徹底關(guān)閉MYSQL的TCP/IP連接方式,如果WEB服務(wù)器是以遠(yuǎn)程連接的方式訪問MYSQL數(shù)據(jù)庫服務(wù)器的,則不要開啟該選項(xiàng),否則將無法正常連接.
MYSQL學(xué)習(xí)#log-queries-not-using-indexes
將沒有使用索引的查詢也記錄下來
MYSQL學(xué)習(xí)mysql的監(jiān)控方法大致分為兩類:
1.連接到mysql數(shù)據(jù)庫內(nèi)部,使用show status,show variables,flush status 來查看mysql的各種性能指標(biāo).
2. 直接使用mysqladmin查看其性能指標(biāo)
MYSQL學(xué)習(xí)mysqladmin兩個(gè)參數(shù),status,extended-status
?
MYSQL學(xué)習(xí)shell > mysqladmin? -uroot -ppassword? variables status
MYSQL學(xué)習(xí)Uptime: 4557887????? #mysql運(yùn)行的秒數(shù)
Threads: 1?????????? #連接數(shù)
Questions: 1684130??? #The number of questions (queries) from clients since the server was started.
Slow queries: 0????? #The number of queries that have taken more than long_query_time seconds
Opens: 221872???? #The number of tables the server has opened.
Flush tables: 1???? #The number of flush-*, refresh, and reload commands the server has executed.
Open tables: 64???? #The number of tables that currently are open.
Queries per second avg: 0.369? #從上次運(yùn)行開始計(jì)算,每秒鐘平均查詢次數(shù)
MYSQL學(xué)習(xí)最完整的信息
?
MYSQL學(xué)習(xí)注:value 值的單位是byte ,要得到M ,需除以2次1024
Uptime??? 4405546???? MySQL服務(wù)器已經(jīng)運(yùn)行的秒數(shù)
MYSQL學(xué)習(xí)auto_increment_increment????? 1??? 控制列中的值的增量值(步進(jìn)量)???????????????????????????????????
auto_increment_offset???????? 1??? 確定AUTO_INCREMENT列值的初始值.
兩個(gè)變量值只能為1到65,535之間的整數(shù)值.設(shè)置為非整數(shù)值,則會(huì)給出錯(cuò)誤.這兩個(gè)變量影響AUTO_INCREMENT列.
MYSQL學(xué)習(xí)一般不去更改.更改方法:
?
MYSQL學(xué)習(xí)幾個(gè)參數(shù)的關(guān)系:
?
MYSQL學(xué)習(xí)最好用sysctl或者修改/etc/sysctl.conf文件,同時(shí)還要在配置文件中把open_files_limit這個(gè)參數(shù)增大,對(duì)于4G內(nèi)存服務(wù)器,open_files_limit至少要增大到4096,非特殊情況,設(shè)置成8192就可以了.
mysql>SHOW STATUS;?? (服務(wù)器狀態(tài)變量,運(yùn)行服務(wù)器的統(tǒng)計(jì)和狀態(tài)指標(biāo))
mysql>SHOW VARIABLES;(服務(wù)器系統(tǒng)變量,實(shí)際上使用的變量的值)
或者
?
MYSQL學(xué)習(xí)例如:
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/6188.html