MyISAM存儲引擎
MyISAM存儲引擎適用于讀多寫少,對讀性能要求比較高的系統(tǒng)
官方文檔:http://dev.mysql.com/doc/refman/5.6/en/myisam-storage-engine.html
Key_buffer_size,可以設(shè)置為內(nèi)存的30%-40%左右。通過show variables like ‘%key_buffer_size%';
通過 show global status like ‘%key_blocks_unused%' 查看是否還有剩余,如果剩余很多,就不需要再加大key_buffer_size了
如果不用MyISAM,建議設(shè)置16m到32m就可以了
Query_cache 如果應(yīng)用程序有大量讀且應(yīng)用程序級別沒有緩存,設(shè)置這個會比較有用,但是也別太大,維護(hù)開銷比較大,mysql反而會變慢,建議32m到512m
Sort_buffer_size當(dāng)進(jìn)行復(fù)雜查詢時候用到,建議8m到16m
Query_cache_size緩存select查詢結(jié)果,如果有大量相同查詢,可以將這個值加大。
Bulk_insert_buffer_size 批量insert時候使用,必須小于key_buffer_size
Read_rnd_buffer_size sql有order by的情況下并且第二次查詢時候就會用到,他會記錄排序,將直接從內(nèi)存中讀取。
Thread_cache_size cache中保留多少線程重用,如果再設(shè)置的值內(nèi),線程斷開也不會銷毀,等待新鏈接。減少線程創(chuàng)建的開銷。
參數(shù)官方參考文檔:http://dev.mysql.com/doc/refman/5.6/en/optimizing-myisam.html
Innodb 存儲引擎
Innodb 存儲引擎 1
并發(fā)線程數(shù):Innodb_thread_concurrency=0[默認(rèn)],并不是說沒有并發(fā),而是指無限并發(fā),沒有并發(fā)檢查。innodb內(nèi)部自己控制
取值0到1000
建議:
Cpu數(shù)量+磁盤數(shù)量 * 2,如果有RAID主備,就不乘2,因?yàn)橛袀浞荽疟P
Innodb 存儲引擎 2
Innodb_io_capacity默認(rèn)值是200,個人認(rèn)為是表示磁盤IO的吞吐量,innodb每秒后臺進(jìn)程處理IO操作的數(shù)據(jù)頁上限
Innodb_io_capacity_max默認(rèn)2000,設(shè)置IO上線
源碼:在innodb存儲引擎層搜索srv_io_capacity(主要在srv0srv.c文件中)
當(dāng)使用SSD可以再調(diào)高一些,直到符合磁盤IO吞吐量即可
Innodb 存儲引擎 3
innodb_max_dirty_pages_pct innodb從innodb buffer中刷新臟頁的比例15% - 80%
源碼:在innodb存儲引擎層搜索srv_max_buf_pool_modified_pct(主要在srv0srv.c文件中)
Innodb 存儲引擎 4 [重要]
innodb_flush_method( O_DSYNC 、 O_DIRECT )
O_DSYNC:InnoDB使用O_SYNC模式打開并更新日志文件,用fsync()函數(shù)去更新數(shù)據(jù)文件。
O_DIRECT:InnoDB使用O_DIRECT模式打開數(shù)據(jù)文件,用fsync()函數(shù)去更新日志和數(shù)據(jù)文件
在raid設(shè)備上,為了避免數(shù)據(jù)被innodb_buffer和raid多次cache,設(shè)置為O_DIRECT方式。也就是說直接打開數(shù)據(jù)文件,不用打開日志文件了。
源碼:在innodb存儲引擎層搜索srv_unix_file_flush_method(主要在log0log.c、os0file.c文件中)
Innodb 存儲引擎 5 【重要】
innodb_buffer_pool_size
Innodb會遵循lru,在錄入數(shù)據(jù)的時候會根據(jù)數(shù)據(jù)的情況,會加載到innodb_buffer_pool_size 中。如果操作數(shù)據(jù)的時候就省去了去數(shù)據(jù)文件中查找,直接從內(nèi)存中找到了。
一般設(shè)置內(nèi)存的80%左右,但需要考慮數(shù)據(jù)文件的總量是多大。Buffer_pool_size + 數(shù)據(jù)量所占容量 + 操作系統(tǒng)所用內(nèi)存 = 內(nèi)存大小。盡可能設(shè)置多一些。
源碼:在innodb存儲引擎層搜索srv_buf_pool_size(在srv0srv.c、srv0start.c文件中)。
Innodb 存儲引擎 6
innodb_buffer_pool_instances 當(dāng)有多實(shí)例的情況下,需要設(shè)置。
源碼:在innodb存儲引擎層搜索srv_buf_pool_instances(主要集中在的buf0buf.c文件)
Innodb 存儲引擎 7
innodb_log_file_size 日志文件大小
innodb_log_buffer_size 日志緩存大小
先寫入innodb_log_buffer,buffer寫滿或事務(wù)提交,刷新數(shù)據(jù),大事務(wù)頻繁,增加innodb_log_buffer_size大小,默認(rèn)16M。
源碼:在innodb存儲引擎層搜索srv_log_buffer_size(主要在log0log.c文件中)
Innodb 存儲引擎 8 【重要】
Innodb_file_per_table
當(dāng)設(shè)置Innodb_file_per_table 為1時為打開狀態(tài),也就是設(shè)置所有表為獨(dú)立表空間,一個表一個存儲數(shù)據(jù)文件。同時要設(shè)置
Innodb_open_files(同時打開文件數(shù))。因?yàn)槊總€表對應(yīng)一個數(shù)據(jù)文件,所以需要設(shè)置同時打開文件的數(shù)量以保證查詢多表的情況,并且想要把某個表移出的別的磁盤時共享表空間是無法遷移的,因?yàn)樗斜矶际褂弥蚕肀砜臻g。
默認(rèn)是所有表都放到共享空間中。也就是OFF
innodb 存儲引擎9
Innodb_flush_log_at_trx_commit 核心參數(shù):
0:每秒將log buffer的內(nèi)容寫事務(wù)日志并且刷新到磁盤
1:每個事務(wù)提交后,將log buffer的內(nèi)容寫事務(wù)日志并寫入數(shù)據(jù)磁盤
2:每個事務(wù)提交,將log buffer內(nèi)容寫事務(wù)日志,但是不進(jìn)行數(shù)據(jù)刷盤
Sync_binlog
雙一致模式: innodb_flush_log_at_trx_commit=1;sync_binlog=1;這樣的主從數(shù)據(jù)是一致的,不會丟數(shù)據(jù)。
官方參數(shù)描述地址: http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html
系統(tǒng)參數(shù)優(yōu)化
NUMA(雙實(shí)例下,可以把每一個實(shí)例放到numa單獨(dú)控制的節(jié)點(diǎn)下面)
在os層numa關(guān)閉時,打開bios層的numa會影響性能,QPS會下降15-30%左右;
在bios層面numa關(guān)閉是,無論os層面的numa是否打開,都不會影響性能。
系統(tǒng)優(yōu)化 jemalloc
網(wǎng)卡優(yōu)化:RPS+RFS
malloc
1)、下載jemalloc源碼包
wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2
tar -xjf jemalloc-3.6.0.tar.bz2
2)、編譯安裝
cd jemalloc-3.6.0; ./configure;make make install
3)、配置MySQL
[mysqld_safe]
malloc-lib=$PATH/libjemalloc.so
4)、參考文檔:http://blog.chinaunix.net/uid-29957450-id-4547818.html
my.cnf配置文件參考
# 以下選項(xiàng)會被MySQL客戶端應(yīng)用讀取。
# 注意只有MySQL附帶的客戶端應(yīng)用程序保證可以讀取這段內(nèi)容。
# 如果你想你自己的MySQL應(yīng)用程序獲取這些值。
# 需要在MySQL客戶端庫初始化的時候指定這些選項(xiàng)。
[client]
port = 3306
socket = /usr/local/mysql/mysql.sock
# MySQL 服務(wù)端
[mysqld]
#默認(rèn)存儲引擎INNODB
default-storage-engine=INNODB
#GROUP_CONCAT長度
group_concat_max_len =99999
#端口號
port = 3306
#socket位置
socket = /usr/local/mysql/mysql.sock
#pid寫入文件位置
pid-file = /usr/local/mysql/mysqld.pid
#數(shù)據(jù)庫文件位置
datadir = /home/data/mysql/data
user = mysql
#SQL模式具體查閱相關(guān)資料
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#當(dāng)外部鎖定(external-locking)起作用時,每個進(jìn)程若要訪問數(shù)據(jù)表,
#則必須等待之前的進(jìn)程完成操作并解除鎖定。由于服務(wù)器訪問數(shù)據(jù)表時經(jīng)常需要等待解鎖,
#因此在單服務(wù)器環(huán)境下external locking會讓MySQL性能下降。
#所以在很多Linux發(fā)行版的源中,MySQL配置文件中默認(rèn)使用了skip-external-locking來避免external locking。
skip-external-locking
#跳過DNS反向解析
skip-name-resolve
#關(guān)閉TIMESTAMP類型默認(rèn)值
explicit_defaults_for_timestamp
#不受client字符集影響,保證sever端字符集
skip-character-set-client-handshake
#初始連接字符集UTF8
init-connect='SET NAMES utf8'
#默認(rèn)數(shù)據(jù)庫字符集
character-set-server=utf8
#查詢緩存0,1,2,分別代表了off、on、demand
query_cache_type = 1
#單位秒,握手時間超過connect_timeout,連接請求將會被拒絕
connect_timeout = 20
#設(shè)置在多少秒沒收到主庫傳來的Binary Logs events之后,從庫認(rèn)為網(wǎng)絡(luò)超時,Slave IO線程會重新連接主庫。
#該參數(shù)的默認(rèn)值是3600s ,然而時間太久會造成數(shù)據(jù)庫延遲或者主備庫直接的鏈接異常不能及時發(fā)現(xiàn)。
#將 slave_net_timeout 設(shè)得很短會造成 Master 沒有數(shù)據(jù)更新時頻繁重連。一般線上設(shè)置為5s
slave_net_timeout = 30
#這個參數(shù)用來配置從服務(wù)器的更新是否寫入二進(jìn)制日志,這個選項(xiàng)默認(rèn)是不打開的,
#但是,如果這個從服務(wù)器B是服務(wù)器A的從服務(wù)器,同時還作為服務(wù)器C的主服務(wù)器,那么就需要開發(fā)這個選項(xiàng),
#這樣它的從服務(wù)器C才能獲得它的二進(jìn)制日志進(jìn)行同步操作
log-slave-updates=1
#用于slave服務(wù)器,io線程會把server id與自己相同的event寫入日志,與log-slave-updates選項(xiàng)沖突
replicate-same-server-id=0
# 對了生成唯一的server_id我想到了,大家ip地址唯一,比如10.112.87.91 ,就直接去掉點(diǎn)號在后面加上編號01或者02或者03(加上2位數(shù)編號是怕一臺物理機(jī)
滄岸嗍道,主從復(fù)制需要server-id來標(biāo)識的
# 用10112879101做server_id就可以了。
server_id=10112879101
# 打開二進(jìn)制日志功能.
# 在復(fù)制(replication)配置中,作為MASTER主服務(wù)器必須打開此項(xiàng)
# 如果你需要從你最后的備份中做基于時間點(diǎn)的恢復(fù),你也同樣需要二進(jìn)制日志
log-bin =/home/data/mysql/binlog/mysql-bin.log
#relay-log日志
relay-log=mysql-relay-bin
#master-info-repository以及relay-log-info-repository打開以啟用崩潰安全的二進(jìn)制日志/從服務(wù)器功能(在事務(wù)表而不是平面文件中存儲信息)
master-info-repository=TABLE
relay-log-info-repository=TABLE
#不寫入binlog二進(jìn)制日志中的數(shù)據(jù)庫
binlog-ignore-db=mysql # No sync databases
binlog-ignore-db=test # No sync databases
binlog-ignore-db=information_schema # No sync databases
binlog-ignore-db=performance_schema # No sync databases
#寫入binlog二進(jìn)制日志中數(shù)據(jù)庫
binlog-do-db=business_db
binlog-do-db=user_db
binlog-do-db=plocc_system
#15滾動清理binlog
expire-logs-days=15
max_binlog_size = 1073741824 # Bin logs size ( 1G )
#使binlog在每1000次binlog寫入后與硬盤同步
sync_binlog = 1000
#指定只復(fù)制哪個庫的數(shù)據(jù)
replicate-do-db=business_db
replicate-do-db=user_db
replicate-do-db=plocc_system
#開啟事件調(diào)度器Event Scheduler
event_scheduler=1
#MySQL能暫存的連接數(shù)量。當(dāng)主要MySQL線程在一個很短時間內(nèi)得到非常多的連接請求,這就起作用。
#如果MySQL的連接數(shù)據(jù)達(dá)到max_connections時,新來的請求將會被存在堆棧中,以等待某一連接釋放資源,
#該堆棧的數(shù)量即back_log,如果等待連接的數(shù)量超過back_log,將不被授予連接資源
back_log = 500
#整個數(shù)據(jù)庫最大連接(用戶)數(shù)
max_connections = 6000
#一個用戶的最大連接數(shù)
max_user_connection=3000
# 每個客戶端連接最大的錯誤允許數(shù)量,如果達(dá)到了此限制.
# 這個客戶端將會被MySQL服務(wù)阻止直到執(zhí)行了”FLUSH HOSTS” 或者服務(wù)重啟
# 非法的密碼以及其他在鏈接時的錯誤會增加此值.
# 查看 “Aborted_connects” 狀態(tài)來獲取全局計(jì)數(shù)器
max_connect_errors = 1844674407370954751
#表描述符緩存大小,可減少文件打開/關(guān)閉次數(shù)
table_open_cache = 2048
# 服務(wù)所能處理的請求包的最大大小以及服務(wù)所能處理的最大的請求大小(當(dāng)與大的BLOB字段一起工作時相當(dāng)必要)
# 每個連接獨(dú)立的大小.大小動態(tài)增加
max_allowed_packet = 64M
# 在一個事務(wù)中binlog為了記錄SQL狀態(tài)所持有的cache大小
# 如果你經(jīng)常使用大的,多聲明的事務(wù),你可以增加此值來獲取更大的性能.
# 所有從事務(wù)來的狀態(tài)都將被緩沖在binlog緩沖中然后在提交后一次性寫入到binlog中
# 如果事務(wù)比此值大, 會使用磁盤上的臨時文件來替代.
# 此緩沖在每個連接的事務(wù)第一次更新狀態(tài)時被創(chuàng)建
binlog_cache_size = 1M
# 獨(dú)立的內(nèi)存表所允許的最大容量.
# 此選項(xiàng)為了防止意外創(chuàng)建一個超大的內(nèi)存表導(dǎo)致用盡所有的內(nèi)存資源.
max_heap_table_size = 1342177280
# 排序緩沖被用來處理類似ORDER BY以及GROUP BY隊(duì)列所引起的排序
# 如果排序后的數(shù)據(jù)無法放入排序緩沖,
# 一個用來替代的基于磁盤的合并分類會被使用
# 查看 “Sort_merge_passes” 狀態(tài)變量.
# 在排序發(fā)生時由每個線程分配
sort_buffer_size = 8M
# 此緩沖被使用來優(yōu)化全聯(lián)合(full JOINs 不帶索引的聯(lián)合).
# 類似的聯(lián)合在極大多數(shù)情況下有非常糟糕的性能表現(xiàn),
# 但是將此值設(shè)大能夠減輕性能影響.
# 通過 “Select_full_join” 狀態(tài)變量查看全聯(lián)合的數(shù)量
# 當(dāng)全聯(lián)合發(fā)生時,在每個線程中分配
join_buffer_size = 8M
# 我們在cache中保留多少線程用于重用
# 當(dāng)一個客戶端斷開連接后,如果cache中的線程還少于thread_cache_size,
# 則客戶端線程被放入cache中.
# 這可以在你需要大量新連接的時候極大的減少線程創(chuàng)建的開銷
# (一般來說如果你有好的線程模型的話,這不會有明顯的性能提升.)
thread_cache_size = 128
# 此允許應(yīng)用程序給予線程系統(tǒng)一個提示在同一時間給予渴望被運(yùn)行的線程的數(shù)量.
# 此值只對于支持 thread_concurrency() 函數(shù)的系統(tǒng)有意義( 例如Sun Solaris).
# 你可可以嘗試使用 [CPU數(shù)量]*(2..4) 來作為thread_concurrency的值
thread_concurrency = 8
# 查詢緩沖常被用來緩沖 SELECT 的結(jié)果并且在下一次同樣查詢的時候不再執(zhí)行直接返回結(jié)果.
# 打開查詢緩沖可以極大的提高服務(wù)器速度, 如果你有大量的相同的查詢并且很少修改表.
# 查看 “Qcache_lowmem_prunes” 狀態(tài)變量來檢查是否當(dāng)前值對于你的負(fù)載來說是否足夠高.
# 注意: 在你表經(jīng)常變化的情況下或者如果你的查詢原文每次都不同,
# 查詢緩沖也許引起性能下降而不是性能提升.
query_cache_size = 64M
# 只有小于此設(shè)定值的結(jié)果才會被緩沖
# 此設(shè)置用來保護(hù)查詢緩沖,防止一個極大的結(jié)果集將其他所有的查詢結(jié)果都覆蓋
query_cache_limit = 2M
# 被全文檢索索引的最小的字長.
# 你也許希望減少它,如果你需要搜索更短字的時候.
# 注意在你修改此值之后,
# 你需要重建你的 FULLTEXT 索引
ft_min_word_len = 4
# 線程使用的堆大小. 此容量的內(nèi)存在每次連接時被預(yù)留.
# MySQL 本身常不會需要超過64K的內(nèi)存
# 如果你使用你自己的需要大量堆的UDF函數(shù)
# 或者你的操作系統(tǒng)對于某些操作需要更多的堆,
# 你也許需要將其設(shè)置的更高一點(diǎn).
thread_stack = 192K
# 設(shè)定默認(rèn)的事務(wù)隔離級別.可用的級別如下:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
transaction_isolation = READ-COMMITTED
# 內(nèi)部(內(nèi)存中)臨時表的最大大小
# 如果一個表增長到比此值更大,將會自動轉(zhuǎn)換為基于磁盤的表.
# 此限制是針對單個表的,而不是總和.
tmp_table_size = 1342177280
#binlog日志類型--混合型
binlog_format=mixed
#開啟慢查詢?nèi)罩?
slow_query_log
#文件格式
log_output = FILE
# 所有的使用了比這個時間(以秒為單位)更多的查詢會被認(rèn)為是慢速查詢.
# 不要在這里使用”0″, 否則會導(dǎo)致所有的查詢,甚至非??斓牟樵冺摫挥涗浵聛?由于MySQL 目前時間的精確度只能達(dá)到秒的級別).
long_query_time = 0.5
#慢查詢?nèi)罩疚恢?
slow_query_log_file=/usr/local/mysql/mysqld_slow.log
#指定索引緩沖區(qū)的大小,它決定索引處理的速度,尤其是索引讀的速度
#******************** MyISAM 相關(guān)選項(xiàng)********************************
# 關(guān)鍵詞緩沖的大小, 一般用來緩沖MyISAM表的索引塊.
# 不要將其設(shè)置大于你可用內(nèi)存的30%,
# 因?yàn)橐徊糠謨?nèi)存同樣被OS用來緩沖行數(shù)據(jù)
# 甚至在你并不使用MyISAM 表的情況下, 你也需要仍舊設(shè)置起 8-64M 內(nèi)存由于它同樣會被內(nèi)部臨時磁盤表使用.
key_buffer_size = 32M
# 用來做MyISAM表全表掃描的緩沖大小.
# 當(dāng)全表掃描需要時,在對應(yīng)線程中分配.
read_buffer_size = 2M
# 當(dāng)在排序之后,從一個已經(jīng)排序好的序列中讀取行時,行數(shù)據(jù)將從這個緩沖中讀取來防止磁盤尋道.
# 如果你增高此值,可以提高很多ORDER BY的性能.
# 當(dāng)需要時由每個線程分配
read_rnd_buffer_size = 8M
# MyISAM 使用特殊的類似樹的cache來使得突發(fā)插入
# (這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA
# INFILE) 更快. 此變量限制每個進(jìn)程中緩沖樹的字節(jié)數(shù).
# 設(shè)置為 0 會關(guān)閉此優(yōu)化.
# 為了最優(yōu)化不要將此值設(shè)置大于 “key_buffer_size”.
# 當(dāng)突發(fā)插入被檢測到時此緩沖將被分配.
bulk_insert_buffer_size = 16M
# 此緩沖當(dāng)MySQL需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一個空表中引起重建索引時被分配.
# 這在每個線程中被分配.所以在設(shè)置大值時需要小心.
myisam_sort_buffer_size = 128M
# MySQL重建索引時所允許的最大臨時文件的大小 (當(dāng) REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
# 如果文件大小比此值更大,索引會通過鍵值緩沖創(chuàng)建(更慢)
myisam_max_sort_file_size = 1G
# 如果一個表擁有超過一個索引, MyISAM 可以通過并行排序使用超過一個線程去修復(fù)他們.
# 這對于擁有多個CPU以及大量內(nèi)存情況的用戶,是一個很好的選擇.
myisam_repair_threads = 1
# 自動檢查和修復(fù)沒有適當(dāng)關(guān)閉的 MyISAM 表.
myisam_recover
# *************** INNODB 相關(guān)選項(xiàng) *********************
# 如果你的MySQL服務(wù)包含InnoDB支持但是并不打算使用的話,
# 使用此選項(xiàng)會節(jié)省內(nèi)存以及磁盤空間,并且加速某些部分
#skip-innodb
# #####[關(guān)鍵項(xiàng)]
# InnoDB使用一個緩沖池來保存索引和原始數(shù)據(jù), 不像 MyISAM.
# 這里你設(shè)置越大,你在存取表里面數(shù)據(jù)時所需要的磁盤I/O越少.
# 在一個獨(dú)立使用的數(shù)據(jù)庫服務(wù)器上,你可以設(shè)置這個變量到服務(wù)器物理內(nèi)存大小的80%
# 不要設(shè)置過大,否則,由于物理內(nèi)存的競爭可能導(dǎo)致操作系統(tǒng)的換頁顛簸.
# 注意在32位系統(tǒng)上你每個進(jìn)程可能被限制在 2-3.5G 用戶層面內(nèi)存限制,
# 所以不要設(shè)置的太高.
innodb_buffer_pool_size = 700m #1G
# InnoDB 將數(shù)據(jù)保存在一個或者多個數(shù)據(jù)文件中成為表空間.
# 如果你只有單個邏輯驅(qū)動保存你的數(shù)據(jù),一個單個的自增文件就足夠好了.
# 其他情況下.每個設(shè)備一個文件一般都是個好的選擇.
# 你也可以配置InnoDB來使用裸盤分區(qū) – 請參考手冊來獲取更多相關(guān)內(nèi)容
innodb_data_file_path = IBdata1:1024M;IBdata2:1024M:autoextend
# 設(shè)置此選項(xiàng)如果你希望InnoDB表空間文件被保存在其他分區(qū).
# 默認(rèn)保存在MySQL的datadir中.
#innodb_data_home_dir =
# 用來同步IO操作的IO線程的數(shù)量. This value is
# 此值在Unix下被硬編碼為4,但是在Windows磁盤I/O可能在一個大數(shù)值下表現(xiàn)的更好.
innodb_file_io_threads = 4
# 在InnoDb核心內(nèi)的允許線程數(shù)量.
# 最優(yōu)值依賴于應(yīng)用程序,硬件以及操作系統(tǒng)的調(diào)度方式.
# 過高的值可能導(dǎo)致線程的互斥顛簸.
innodb_thread_concurrency = 16
# #####[關(guān)鍵項(xiàng)]
# 如果設(shè)置為1 ,InnoDB會在每次提交后刷新(fsync)事務(wù)日志到磁盤上,
# 這提供了完整的ACID行為.
# 如果你愿意對事務(wù)安全折衷, 并且你正在運(yùn)行一個小的事務(wù), 你可以設(shè)置此值到0或者2來減少由事務(wù)日志引起的磁盤I/O
# 0代表日志只大約每秒寫入日志文件并且日志文件刷新到磁盤.
# 2代表日志寫入日志文件在每次提交后,但是日志文件只有大約每秒才會刷新到磁盤上.
# --------------------
# (說明:如果是游戲服務(wù)器,建議此值設(shè)置為2;如果是對數(shù)據(jù)安全要求極高的應(yīng)用,建議設(shè)置為1;
# 設(shè)置為0性能最高,但如果發(fā)生故障,數(shù)據(jù)可能會有丟失的危險!
# 默認(rèn)值1的意思是每一次事務(wù)提交或事務(wù)外的指令都需要把日志寫入(flush)硬盤,這是很費(fèi)時的。
# 特別是使用電池供電緩存(Battery backed up cache)時。設(shè)成2對于很多運(yùn)用,特別是從MyISAM表轉(zhuǎn)過來的是可以的,
# 它的意思是不寫入硬盤而是寫入系統(tǒng)緩存。日志仍然會每秒flush到硬盤,所以你一般不會丟失超過1-2秒的更新。
# 設(shè)成0會更快一點(diǎn),但安全方面比較差,即使MySQL掛了也可能會丟失事務(wù)的數(shù)據(jù)。而值2只會在整個操作系統(tǒng)掛了時才可能丟數(shù)據(jù))
innodb_flush_log_at_trx_commit = 2
# 用來緩沖日志數(shù)據(jù)的緩沖區(qū)的大小.
# 當(dāng)此值快滿時, InnoDB將必須刷新數(shù)據(jù)到磁盤上.
# 由于基本上每秒都會刷新一次,所以沒有必要將此值設(shè)置的太大(甚至對于長事務(wù)而言)
innodb_log_buffer_size = 16M
# 在日志組中每個日志文件的大小.
# 你應(yīng)該設(shè)置日志文件總合大小到你緩沖池大小的25%~100%
# 來避免在日志文件覆寫上不必要的緩沖池刷新行為.
# 不論如何, 請注意一個大的日志文件大小會增加恢復(fù)進(jìn)程所需要的時間
innodb_log_file_size = 1024M
# 在日志組中的文件總數(shù).
# 通常來說2~3是比較好的.
innodb_log_files_in_group = 3
# InnoDB的日志文件所在位置. 默認(rèn)是MySQL的datadir.
# 你可以將其指定到一個獨(dú)立的硬盤上或者一個RAID1卷上來提高其性能
#innodb_log_group_home_dir
# 在InnoDB緩沖池中最大允許的臟頁面的比例.
# 如果達(dá)到限額, InnoDB會開始刷新他們防止他們妨礙到干凈數(shù)據(jù)頁面.
# 這是一個軟限制,不被保證絕對執(zhí)行.
innodb_max_dirty_pages_pct = 90
# InnoDB用來刷新日志的方法.
# 表空間總是使用雙重寫入刷新方法
# 默認(rèn)值是 “fdatasync”, 另一個是 “O_DSYNC”.
innodb_flush_method=O_DSYNC
# 在被回滾前,一個InnoDB的事務(wù)應(yīng)該等待一個鎖被批準(zhǔn)多久.
# InnoDB在其擁有的鎖表中自動檢測事務(wù)死鎖并且回滾事務(wù).
# 如果你使用 LOCK TABLES 指令, 或者在同樣事務(wù)中使用除了InnoDB以外的其他事務(wù)安全的存儲引擎
# 那么一個死鎖可能發(fā)生而InnoDB無法注意到.
# 這種情況下這個timeout值對于解決這種問題就非常有幫助.
innodb_lock_wait_timeout = 30
[mysqldump]
# 不要在將內(nèi)存中的整個結(jié)果寫入磁盤之前緩存. 在導(dǎo)出非常巨大的表時需要此項(xiàng)
quick
max_allowed_packet = 64M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
# 增加每個進(jìn)程的可打開文件數(shù)量.
# 警告: 確認(rèn)你已經(jīng)將全系統(tǒng)限制設(shè)定的足夠高!
# 打開大量表需要將此值設(shè)大
open-files-limit = 8192
log-error=/usr/local/mysql/mysqld.log
pid-file=/usr/local/mysql/mysqld.pid
MYSQL的性能優(yōu)化不單單是這些內(nèi)容,還有很多大家可以在我們站上搜索其它MYSQL性能優(yōu)化方案
您可能感興趣的文章:- MySQL性能全面優(yōu)化方法參考,從CPU,文件系統(tǒng)選擇到mysql.cnf參數(shù)優(yōu)化
- MySQL性能優(yōu)化的最佳20+條經(jīng)驗(yàn)
- mysql性能優(yōu)化工具--tuner-primer使用介紹
- 數(shù)據(jù)庫Mysql性能優(yōu)化詳解
- MySQL性能參數(shù)詳解之Skip-External-Locking參數(shù)介紹
- MySQL性能參數(shù)詳解之Max_connect_errors 使用介紹
- MySQL性能瓶頸排查定位實(shí)例詳解
- Mysql性能優(yōu)化方案分享
- Mysql性能優(yōu)化案例 - 覆蓋索引分享
- Mysql性能優(yōu)化案例研究-覆蓋索引和SQL_NO_CACHE
- mysql性能優(yōu)化之索引優(yōu)化
- MySQL性能監(jiān)控軟件Nagios的安裝及配置教程
- 19個MySQL性能優(yōu)化要點(diǎn)解析
- 詳解MySQL性能優(yōu)化(二)
- 詳解MySQL性能優(yōu)化(一)
- 10個MySQL性能調(diào)優(yōu)的方法
- 淺談InnoDB隔離模式的使用對MySQL性能造成的影響
- 使用FriendFeed來提升MySQL性能的方法