MySQL5.7的參數優化


https://www.cnblogs.com/zhjh256/p/9260636.html

query_cache_size = 0
query_cache_type=0
innodb_undo_tablespaces=16(需初始化mysql時命令行中先包含)
innodb_undo_directory=(專用redo磁盤文件系統路徑)
innodb_thread_concurrency=(cpu數量+物理磁盤的數量)
innodb_strict_mode=true
tmpdir=/tmp
character_set_server=gbk或者utf8mb4(絕大多數系統應默認使用gbk,對於有特殊要求的建議在字段級別設置為utf-8)
autocommit=0
innodb_buffer_pool_size=60%-75%物理內存
innodb_flush_method=O_DIRECT(如果不使用硬件RAID控制器或者使用SAN,則不要設置)
innodb_flush_log_at_trx_commit(核心交易系統設置為1,默認為1,其他2或者0)
transaction-isolation=READ-COMMITTED
innodb_autoinc_lock_mode = 2
skip-name-resolve
large-pages(測試未看出明顯受益,主要是內存沒有足夠壓力,故當前不建議設置)
back-log=500
innodb-status-file=TRUE(推薦設置)
default-storage-engine=InnoDB
memlock=true(對於專用mysql服務器,建議禁用swap,此時此參數可以不設置,在共享服務器上,如果設置了,那么在內存不夠時,可能導致Mysql因為內存不夠而無法啟動)
innodb_fast_shutdown=0
sync_binlog(核心交易系統設置為1,默認為1,其他2或者0)
log-bin=mysql-bin
binlog_format(OLTP為row,DSS系統為mixed,如不確定,請使用row)
binlog_checksum=NONE
binlog_row_image=full(mariadb沒有參數,設置了啟動會報錯)
binlog_cache_size = 8M 
max_binlog_size = 500M 
max_binlog_cache_size = 100M
expire_logs_days = 7
innodb_log_file_size=512m
innodb-log-buffer-size=8M
innodb-log-files-in-group=(3-5,視生成的日志量而定)
innodb_log_group_home_dir=/usr/local/mysql/redo(專用redo磁盤文件系統路徑)
innodb_flush_neighbors(默認值為1,SSD設置為0,Neighbors指的是屬於一個extent的所有頁面,一個extent共64個頁面,出於硬盤IO順序寫的考慮,InnoDB通常會刷新一個extent中的所有頁面,因為SSD在隨機IO上沒有額外負載,所以不需要啟用該特性)
innodb_page_size(SSD設置為4KB)
innodb_data_home_dir=/usr/local/mysql/data(專用data磁盤文件系統路徑)
# innodb_data_file_path=ibdata1:2000M;ibdata2:10M:autoextend (專用data磁盤文件系統路徑,存儲系統表空間,建議不要明確設置,如若不然的話,ibdata1的大小需要和實際大小相同)
innodb_change_buffer_max_size(InnoDB使用Change buffering以最小化隨機IO,一旦change buffer滿了,隨后的DMLs將直接在相應的表上進行更改,change buffer以固定的頻率(5.5不可更改,5.6由此參數控制,change buffer越接近該值,后台執行越頻繁,每次合並的量由innodb_io_capacity控制(默認為200,代表10K RPM的硬盤,對於5400或者7200 RPM的硬盤,可以設置為100,代表每次可以執行100次IOPS(測試時每次大小可配置,這里應該說的是基於16KB大小,可參考http://elf8848.iteye.com/blog/1731301)。對於RAID或者SSD,增加的話,會有所幫助,現代系統應該調整))由后台進程合並到數據頁,寫入和讀取頻率接近的系統可設置為50,默認為25,代表buffer pool大小的25%,具體請咨詢DBA)
innodb_lock_wait_timeout=86400(根據實際情況配置)
default-tmp-storage-engine=InnoDB
innodb-autoextend-increment=16M
innodb-buffer-pool-instances=min(8,nGB/1GB)
innodb-file-io-threads=max(4,nGB/4GB)
innodb_io_capacity=可供MySQL使用的IOPS(建議使用Oracle ORION進行測試)
innodb-file-per-table=true
innodb_rollback_on_timeout=true
innodb-old-blocks-time(混合型系統可以調整為60000或更高,具體請咨詢DBA)
innodb-print-all-deadlocks=true
innodb-sort-buffer-size=(此選項為創建索引使用,不需要設置)
sort-buffer-size(DSS可語句級別動態調整,比如SET STATEMENT sort_buffer_size=100000 FOR SELECT name FROM name ORDER BY name;)
join-buffer-size=(DSS可語句級別動態調整)
open-files-limit=32767
innodb_open_files=32767
tmp-table-size(DSS可語句級別動態調整)
sql-mode=STRICT_TRANS_TABLES,STRICT_ALL_TABLES,PIPES_AS_CONCAT, ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION,ERROR_FOR_DIVISION_BY_ZERO, ANSI_QUOTES,NO_UNSIGNED_SUBTRACTION,PAD_CHAR_TO_FULL_LENGTH, NO_ZERO_DATE,NO_ZERO_IN_DATE
log-output=FILE
slow-query-log=true
log-queries-not-using-indexes=true(對於mysql而言,該參數應該設置,具體看情況,有可能很多小表很快會使得slow_query_log增長的很快)
log_slow_filter
log_slow_sp_statements
log_slow_verbosity
innodb_show_verbose_locks=1
innodb_print_lock_wait_timeout_info=ON
server-id=1
port=3306
read_rnd_buffer_size(DSS需語句級別動態調整)
thread_handling=pool-of-threads
thread_pool_max_threads=100
thread_pool_size=50
thread_cache_size=64
max-connections=3000
event_scheduler=ON
#GTID 5.6引入主要是為了解決主從模式下主節點宕機后切換主節點時確定當前的事務進度(因為不同的實例日志點位不一定相同,而GTID的格式是日志source_id+事務id,所以可以保證所有節點的邏輯事務進度一致,這使得切換的難度大大降低)。
gtid-mode = ON  #(Group Replication要求必須開啟GTID,MariaDB沒有這個參數,設置后會報錯,不過默認就是啟用GTID,GTID和基於binlog的區別https://www.percona.com/sites/default/files/presentations/Failover_GTID_MySQL_56_Fosdem.pdf
https://pdfs.semanticscholar.org/presentation/3036/b68bcb8bd2f4fed590fd85607e37bf511858.pdf)
log_slave_updates=ON(GTID模式必須開始log_slave_updates,對性能有一定影響)
enforce-gtid-consistency = ON(MariaDB沒有這個參數,設置后會報錯,不過默認就是啟用GTID)
relay-log-info-repository=TABLE(MariaDB沒有這個參數,設置后會報錯,不過默認就是啟用GTID)
master-info-repository=TABLE(MariaDB沒有這個參數,設置后會報錯,不過默認就是啟用GTID)
slave_parallel_workers=4 --開啟基於庫的多線程復制默認0不開啟 (MariaDB沒有這個參數,設置后會報錯,不過默認就是啟用GTID)
innodb_lru_scan_depth(默認1024,這個參數控制page_cleaner線程掃描多少LRU列表中的臟頁,對於寫緊張的系統,降低該值,即使內存超大也一樣;如果IO容量足夠,增加該值;大型系統通常需要更改該參數)
innodb_use_global_flush_log_at_trx_commit=0
userstat=ON
thread_statistics=ON


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM