# 修改系統 進程的最大數目 和 最大打開的文件數 vim /etc/security/limits.conf * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 # 查看 Linux內核參數調優 vim /etc/sysctl.conf # 用戶端口範圍 net.ipv4.ip_local_port_range = 1024 65535: net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.tcp_fin_timeout = 30 # 系統文件句柄,控制的是能打開文件數量 fs.file-max=65535 # Swap 調整(不使用 swap 分區): vm.swappiness=0
# 指定MySQL爲快速重用而緩存的線程數量 thread_cache_size: #值的範圍從0~16384,默認值爲0。根據內存大小設置1G→8,2G→16,3G→32,大於3G→64 thread_stack: #每一個線程堆棧大小,默認256K。 # 鏈接相關 max_connections # 實例最大鏈接數,根據內存設置合理值 max_connect_errors # 錯誤鏈接數,能大則大 max_user_connections # 用戶級最大鏈接數,0爲不限制 connect_timeout # 鏈接超時 skip-name-resolve # 跳過域名解析 wait_timeout # 等待超時 back_log # 能夠在堆棧中的鏈接數量 # 查看當前mysql線程相關數據 show global status like 'Threads_%'; Threads_cached : 當前線程池中緩存有多少空閒線程 Threads_connected : 當前的鏈接數 ( 也就是線程數 ) Threads_created : 已經建立的線程總數 Threads_running : 當前激活的線程數 ( Threads_connected 中的線程有些可能處於休眠狀態 )
MySQL佔用內存 = 全局緩存 + ( 線程緩存 x 最大鏈接數 )mysql
# 全局緩存,用於判斷內存參數設置是否合理 key_buffer_size: #索引緩存區大小,對於內存在4GB左右的服務器該參數可設置爲384M或512M innodb_buffer_pool_size:#緩存InnoDB的索引及數據,相當重要的參數,可是儘可能設置不要超過物理內存70% innodb_log_buffer_size: #InnoDB事務日誌使用的緩衝區,100M如下 max_heap_table_size: #用戶能夠建立的內存表大小 query_cache_size: #緩存查詢(SELECT)的結果 SELECT (@@key_buffer_size + @@innodb_buffer_pool_size + @@innodb_log_buffer_size + @@max_heap_table_size + @@query_cache_size)/1024/1024; # 索引緩存 SHOW GLOBAL STATUS LIKE '%key_read%'; +-------------------+-----------------+ | Variable_name | Value | +-------------------+-----------------+ | Key_read_requests | 2454354135490 | | Key_reads | 23490 | +-------------------+-----------------+ # 一共有Key_read_requests個索引請求,一共發生了Key_reads次物理IO。Key_reads/Key_read_requests ≈ 0.1% 如下比較好。 SHOW GLOBAL STATUS LIKE 'key_blocks_u%'; +------------------------+-------------+ | Variable_name | Value | +------------------------+-------------+ | Key_blocks_unused | 0 | | Key_blocks_used | 413543 | +------------------------+-------------+ # Key_blocks_unused表示未使用的緩存簇(blocks)數,Key_blocks_used表示曾經用到的最大的blocks數,比較理想的設置:Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80% # 用戶級buffer參數 max_allowed_packet #數據包發送緩衝區是存儲接傳送數據包的內存區域 thread_stack #每一個線程堆棧大小,默認256K。 sort_buffer_size #鏈接排序緩衝區內存大小 join_buffer_size #鏈接使用鏈接緩衝區大小 read_buffer_size #全表掃描時分配的緩衝區大小 read_rnd_buffer_size #隨機讀取緩存 myisam_sort_buffer_size #myisam使用的排序緩衝區大小,通常不使用myisam # 線程緩存 = sort_buffer_size + read_rnd_buffer_size + join_buffer_size + read_buffer_size + max_allowed_packet + thread_stack SELECT (@@max_allowed_packet + @@thread_stack + @@read_rnd_buffer_size + @@read_buffer_size + @@sort_buffer_size + @@join_buffer_size)/1024/1024 * @@max_connections;
物理內存 | 1G | 2G | 4G | 8G | 16G |
---|---|---|---|---|---|
key_buffer_size | 128M | 256M | 384M | 1024M | 2048M |
# innodb引擎相關 innodb_file_per_table=(1,0) # 1爲每一個表一個單獨文件,通常都選擇1。 innodb_flush_log_at_trx_commit=(0,1,2) # 1是最安全的,0是性能,2折中 Innodb_flush_method=(O_DIRECT, 默認fdatasync) innodb_log_file_size # 100M如下 innodb_log_files_in_group # 5個成員如下,通常2-3個夠用(iblogfile0-N) innodb_max_dirty_pages_pct # 達到百分之75的時候刷寫 內存髒頁到磁盤。 max_binlog_cache_size # 能夠不設置 max_binlog_size # 能夠不設置 #小於2G內存的機器,推薦值是20M。32G內存以上100M innodb_additional_mem_pool_size explicit_defaults_for_timestamp=true # bin log過時清理時間,單位天 expire_logs_days=30 #binlog格式爲row模式 binlog_format=row #容許下端接入slave log_slave_updates=1 #開啓GTID gtid_mode=on #啓用強一致性檢查,避免create table...select操做 enforce_gtid_consistency=on
# 安裝測試軟件 yum install -y sysbench # 1.先建立數據 mysql> create database sbtest; # 2.造數32線程10表 sysbench /usr/share/sysbench/oltp_common.lua --time=300 --mysql-host=10.9.54.71 --mysql-port=3306 --mysql-user=sbux_cac_data --mysql-password=Abc@12345 --mysql-db=sbtest --table-size=1000000 --tables=10 --threads=32 --events=999999999 prepare # 3.執行測試,32線程10表測試 sysbench /usr/share/sysbench/oltp_read_write.lua --time=300 --mysql-host=10.9.54.71 --mysql-port=3306 --mysql-user=sbux_cac_data --mysql-password=Abc@12345 --mysql-db=sbtest --table-size=1000000 --tables=10 --threads=32 --events=999999999 --report-interval=10 run # 清理數據 sysbench /usr/share/sysbench/oltp_read_write.lua --time=300 --mysql-host=10.9.54.71 --mysql-port=3306 --mysql-user=sbux_cac_data --mysql-password=Abc@12345 --mysql-db=sbtest --table-size=1000000 --tables=10 --threads=32 --events=999999999 --report-interval=10 cleanup
SQL statistics: queries performed: read: 2276540 write: 650440 other: 325220 total: 3252200 transactions: 162610 (541.90 per sec.) queries: 3252200 (10837.92 per sec.) ignored errors: 0 (0.00 per sec.) reconnects: 0 (0.00 per sec.) General statistics: total time: 300.0740s total number of events: 162610 Latency (ms): min: 8.28 avg: 59.03 max: 480.86 95th percentile: 116.80 sum: 9599333.16 Threads fairness: events (avg/stddev): 5081.5625/108.21 execution time (avg/stddev): 299.9792/0.02