首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 生產環境 my.cnf 配置優化詳解(16GB 記憶體基準)

     編輯:MySQL 資料庫相關知識

前言

本配置源自資深 DBA 生產環境實戰參數,針對 16GB 記憶體伺服器調校,附完整中文註解。若無特殊業務場景,可直接套用作為基準配置。

硬體基準

  • 記憶體:16GB
  • CPU:多核心

核心配置區段 [mysqld]

參數設定值說明
back_log600TCP/IP 連線監聽佇列大小,高併發時需調大
max_connections3000最大連線數,出現 "Too Many Connections" 時調大
max_connect_errors6000單一主機連線錯誤上限,超過則阻擋,需 FLUSH HOSTS 解封
table_cache614表快取數量,建議 ≥ max_connections × 最大聯表數,觀察 Open_tables/Open_tables 調整
external-lockingFALSE關閉外部鎖定(預設開啟 skip-external-locking)
max_allowed_packet32M單次網路傳輸最大封包,須為 1024 倍數
sort_buffer_size2MConnection 級排序緩衝區,過大+高併發會耗盡記憶體,>2KB 用 mmap() 效能降低
join_buffer_size2M聯表查詢緩衝區,同為 Connection 級
thread_cache_size300執行緒快取,依記憶體配置:1GB→8, 2GB→16, 4GB+→更大
thread_concurrency8CPU 核心數 × 2,錯誤設定導致無法發揮多核效能
query_cache_size64M查詢快取,寫入量大的系統建議關閉,否則失效機制拖慢 UPDATE/INSERT
query_cache_limit4M單一查詢快取上限
query_cache_min_res_unit2k快取區塊最小單位,小查詢多則降低以減少碎片
default-storage-engineMyISAM預設儲存引擎
thread_stack192K每執行緒堆疊大小
transaction_isolationREAD-COMMITTED預設交易隔離級別
tmp_table_size / max_heap_table_size256M臨時表記憶體上限,超過則寫入磁碟
long_query_time2慢查詢閾值(秒)
log-slow-queries/data/3306/slow-log.log慢查詢日誌路徑
log-bin啟用二進制日誌
binlog_cache_size4MBinlog 交易快取
max_binlog_size512M單一 Binlog 檔案上限
expire_logs_days7日誌保留天數
key_buffer_size2048MMyISAM 索引快取,4GB 記憶體建議 256-384M
read_buffer_size1M循序掃描讀取緩衝區
read_rnd_buffer_size16M隨機讀取(排序查詢)緩衝區
bulk_insert_buffer_size64M批量插入緩衝區
myisam_sort_buffer_size128MMyISAM 重建索引排序緩衝區
myisam_max_sort_file_size10G重建索引最大臨時檔案
myisam_repair_threads1平行修復執行緒數
myisam_recover啟用自動檢查/修復未正常關閉的 MyISAM 表
skip-name-resolve啟用跳過 DNS 解析,加快連線
lower_case_table_names1表名不區分大小寫
server-id1複寫伺服器 ID

InnoDB 專屬參數

參數設定值說明
innodb_additional_mem_pool_size16M資料字典/內部結構記憶體池
innodb_buffer_pool_size2048M核心參數,InnoDB 極度依賴緩衝池,專用機可設 70-80% 記憶體
innodb_data_file_pathibdata1:1024M:autoextend表空間檔案
innodb_file_io_threads4檔案 IO 執行緒,Windows 可調大
innodb_thread_concurrency8建議 = CPU 核心數
innodb_flush_log_at_trx_commit21=最安全(每次提交刷盤),2=折中(提交寫日誌,每秒刷盤),0=最高效(風險最大)
innodb_log_buffer_size16M日誌快取,建議 1-8M
innodb_log_file_size128M單一日誌檔案大小,越大效能越好但恢復越慢
innodb_log_files_in_group3日誌檔案組數,循環寫入
innodb_max_dirty_pages_pct90髒頁比例上限,關閉前可調小強制刷盤縮短關機時間
innodb_lock_wait_timeout120鎖等待超時(秒),防死鎖
innodb_file_per_table0關閉獨立表空間

其他區段

[mysqldump]
quick
max_allowed_packet = 32M

[mysqld_safe]
log-error=/data/3306/mysql_oldboy.err
pid-file=/data/3306/mysqld.pid

補充參數

  • wait_timeout = 10 - 連線最大閒置時間
  • skip_networking - 關閉 TCP/IP(僅本地 Socket 連線時啟用)
  • log-queries-not-using-indexes - 記錄未使用索引的查詢
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved