MySQL數據庫服務器端核心參數詳解和推薦配置之三
0
MySQL手冊上也有服務器端參數的解釋,以及參數值的相關說明信息,現針對我們大家重點需要注意、需要修改或影響性能的服務器端參數,作其用處的
解釋和如何配置參數值的推薦,此事情拖了不少時間,為方便大家幫忙糾錯(注:總是斷斷續續寫的,可能存在筆誤),先以文章的方式發布到網站,后續確定沒問
題,將會通過新浪微博的微盤提供PPT下載,方便學習和參考。
l innodb_flush_log_at_trx_commit AND sync_binlog
innodb_flush_log_at_trx_commit = N:
N=0 – 每隔一秒,把事務日志緩存區的數據寫到日志文件中,以及把日志文件的數據刷新到磁盤上;
N=1 – 每個事務提交時候,把事務日志從緩存區寫到日志文件中,并且刷新日志文件的數據到磁盤上;
N=2 – 每事務提交的時候,把事務日志數據從緩存區寫到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盤上,而是取決于操作系統的調度;
sync_binlog = N:
N>0 — 每向二進制日志文件寫入N條SQL或N個事務后,則把二進制日志文件的數據刷新到磁盤上;
N=0 — 不主動刷新二進制日志文件的數據到磁盤上,而是由操作系統決定;
推薦配置組合:
N=1,1 — 適合數據安全性要求非常高,而且磁盤IO寫能力足夠支持業務,比如充值消費系統;
N=1,0 — 適合數據安全性要求高,磁盤IO寫能力支持業務不富余,允許備庫落后或無復制;
N=2,0或2,m(0<m<100) — 適合數據安全性有要求,允許丟失一點事務日志,復制架構的延遲也能接受;
N=0,0 — 磁盤IO寫能力有限,無復制或允許復制延遲稍微長點能接受,例如:日志性登記業務;
l innodb_file_per_table
啟用單表空間,減少共享表空間維護成本,減少空閑磁盤空間釋放的壓力。另外,大數據量情況下 的性能,也會有性能上的提升,為此建議大家使用獨立表空間 代替 共享表空間的方式;
l key_buffer_size
key_buffer_size只能緩存MyISAM或類MyISAM引擎的索引數據,而innodb_buffer_pool_size不僅能緩存索 引數據,還能緩存元數據,但是對于我們只使用InnoDB引擎的數據庫系統而言,此參數值也不能設置過于偏小,因為臨時表可能會使用到此鍵緩存區空間,索 引緩存區推薦:64M;
l query_cache_type and query_cache_size
n query_cache_type=N
N=0 —- 禁用查詢緩存的功能;
N=1 —- 啟用產訊緩存的功能,緩存所有符合要求的查詢結果集,除SELECT SQL_NO_CACHE.., 以及不符合查詢緩存設置的結果集外;
N=2 —- 僅僅緩存SELECT SQL_CACHE …子句的查詢結果集,除不符合查詢緩存設置的結果集外;
n query_cache_size
查詢緩存設置多大才是合理?至少需要從四個維度考慮:
① 查詢緩存區對DDL和DML語句的性能影響;
② 查詢緩存區的內部維護成本;
③ 查詢緩存區的命中率及內存使用率等綜合考慮
④ 業務類型
l innodb_flush_log_at_trx_commit AND sync_binlog
innodb_flush_log_at_trx_commit = N:
N=0 – 每隔一秒,把事務日志緩存區的數據寫到日志文件中,以及把日志文件的數據刷新到磁盤上;
N=1 – 每個事務提交時候,把事務日志從緩存區寫到日志文件中,并且刷新日志文件的數據到磁盤上;
N=2 – 每事務提交的時候,把事務日志數據從緩存區寫到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盤上,而是取決于操作系統的調度;
sync_binlog = N:
N>0 — 每向二進制日志文件寫入N條SQL或N個事務后,則把二進制日志文件的數據刷新到磁盤上;
N=0 — 不主動刷新二進制日志文件的數據到磁盤上,而是由操作系統決定;
推薦配置組合:
N=1,1 — 適合數據安全性要求非常高,而且磁盤IO寫能力足夠支持業務,比如充值消費系統;
N=1,0 — 適合數據安全性要求高,磁盤IO寫能力支持業務不富余,允許備庫落后或無復制;
N=2,0或2,m(0<m<100) — 適合數據安全性有要求,允許丟失一點事務日志,復制架構的延遲也能接受;
N=0,0 — 磁盤IO寫能力有限,無復制或允許復制延遲稍微長點能接受,例如:日志性登記業務;
l innodb_file_per_table
啟用單表空間,減少共享表空間維護成本,減少空閑磁盤空間釋放的壓力。另外,大數據量情況下 的性能,也會有性能上的提升,為此建議大家使用獨立表空間 代替 共享表空間的方式;
l key_buffer_size
key_buffer_size只能緩存MyISAM或類MyISAM引擎的索引數據,而innodb_buffer_pool_size不僅能緩存索 引數據,還能緩存元數據,但是對于我們只使用InnoDB引擎的數據庫系統而言,此參數值也不能設置過于偏小,因為臨時表可能會使用到此鍵緩存區空間,索 引緩存區推薦:64M;
l query_cache_type and query_cache_size
n query_cache_type=N
N=0 —- 禁用查詢緩存的功能;
N=1 —- 啟用產訊緩存的功能,緩存所有符合要求的查詢結果集,除SELECT SQL_NO_CACHE.., 以及不符合查詢緩存設置的結果集外;
N=2 —- 僅僅緩存SELECT SQL_CACHE …子句的查詢結果集,除不符合查詢緩存設置的結果集外;
n query_cache_size
查詢緩存設置多大才是合理?至少需要從四個維度考慮:
① 查詢緩存區對DDL和DML語句的性能影響;
② 查詢緩存區的內部維護成本;
③ 查詢緩存區的命中率及內存使用率等綜合考慮
④ 業務類型
文章出處:http://www.mysqlops.com/2011/10/26/mysql-variable-third.html