首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 效能調優全棧實戰:系統內核參數與實例配置最佳實踐

     編輯:MySQL 綜合教學

MySQL 效能調優全棧實戰:系統內核參數與實例配置最佳實踐

一、作業系統層優化(Linux)

1. 關閉 SELinux

vim /etc/selinux/config
# SELINUX=enforcing → SELINUX=disabled
# 重啟生效

2. I/O 調度器(機械硬碟)

echo deadline > /sys/block/sda/queue/scheduler
# SSD 無需修改(noop/none 更佳)

3. 檔案描述符限制

vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535

4. 核心網路/記憶體參數

vim /etc/sysctl.conf
net.core.netdev_max_backlog = 3000
net.core.optmem_max = 20480
net.core.rmem_default = 8388608
net.core.rmem_max = 8388608
net.core.wmem_default = 1048576
net.core.wmem_max = 1048576
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.tcp_rmem = 32768 4194304 8388608
net.ipv4.tcp_wmem = 8192 4194304 8388608
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 3600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.ip_local_port_range = 10240 61000
fs.file-max = 6815744
vm.swappiness = 0
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.ctrl-alt-del = 1

sysctl -p  # 生效

二、MySQL 5.6.10 實例配置範本(24GB 專用主機)

[mysqld]
socket = /tmp/mysql.sock
max_connections = 1024
max_connect_errors = 10000
max_allowed_packet = 16M
skip-name-resolve
lower_case_table_names = 1
thread_cache = 128
table_open_cache = 1024
query_cache_type = 1
query_cache_size = 128M
join_buffer_size = 8M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
max_heap_table_size = 128M
tmp_table_size = 128M
tmpdir = /dev/shm
binlog_cache_size = 12M
max_binlog_size = 512M
expire_logs_days = 3
innodb_buffer_pool_size = 16G
innodb_use_sys_malloc = 1
innodb_log_file_size = 128M
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_lock_wait_timeout = 50
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

# 視負載啟用
# slow_query_log = 1
# long_query_time = 1
# log_bin = mysql-bin
# server_id = 1
# innodb_flush_log_at_trx_commit = 1
# sync_binlog = 1

三、MySQL 5.6.10 編譯安裝參數

tar zxvf mysql-5.6.10.tar.gz
cd mysql-5.6.10
cmake . \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DMYSQL_TCP_PORT=3306 \
  -DDEFAULT_CHARSET=utf8 \
  -DDEFAULT_COLLATION=utf8_general_ci \
  -DWITH_DEBUG=0 \
  -DCURSES_LIBRARY=/usr/lib64/libncurses.so \
  -DCURSES_INCLUDE_PATH=/usr/include
make && make install

四、核心參數決策依據

參數決策邏輯
innodb_buffer_pool_size物理記憶體 60~70%,專用主機可達 70~80%
innodb_log_file_sizebuffer_pool 25%,平衡 Checkpoint 頻率與恢復時間
innodb_flush_log_at_trx_commit2:高併發、可容忍秒級丟失;1:金融核心、零丟失
innodb_flush_methodO_DIRECT:繞過 OS Cache,避免雙重緩存與 Swap
query_cache_type/size高讀低寫開啟;高寫入關閉(鎖爭用嚴重)
join_buffer_sizeSession 級按需調大(8~32M),大表無索引 Join 場景
tmp_table_size/max_heap_table_size同值設定,控制內部臨時表上限,超過轉磁碟
skip-name-resolve內網環境必開,消除 DNS 反解延遲

五、持續優化閉環

  1. 啟用慢查詢日誌(long_query_time=1),定期 pt-query-digest 分析。
  2. 監控緩存命中率:Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests < 1%。
  3. 關注連線指標:Threads_running、Aborted_connects、Max_used_connections。
  4. 定期 ANALYZE TABLE 更新統計資訊,避免優化器誤判。
  5. 大表分區、歸檔、冷熱分離,單表行數建議 < 2000 萬。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved