高性能MySQL-筆記5-服務器優化-配置調整
通常在配置了基礎的配置項之後,就儘可能少的調整數據庫配置,而更應該花時間去優化表結構組織模式、索引、查詢設計上面。(過度調優是有風險的)
通常情況下不去調整配置,簡單使用默認配置就可以了 。感覺這部分可能會是白看了 ╮(╯_╰)╭
基礎配置
什麼原理入門提示都略過,直接從最基礎的配置開始。
這個是書中提供的最基礎的配置。【P336~338】
項目使用的配置 【最小配置的了】
而我項目使用的配置比這個還要基礎:
以下都是最基礎的配置,和目前使用5.7版本必須配置的優化項。
正常小項目,非集羣啥的,還是夠用的了 罒ω罒
[mysqld]
# GENERAL
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
log-error=/var/log/mysqld.log
# INNODB
# innodb_flush_method=O_DIRECT # 類UNIX系統特有的配置
# 必須項,默認值太小,原128M 緩衝池
#【 = 系統-max(2G,系統5%)-查詢緩存-日誌大小】【常用比率爲75%~80%】
#【建議爲預測值的80%】【詳情:P336~339】
innodb_buffer_pool_size = 2048M # 必須項 解釋↑↑↑
innodb_log_file_size=512M # 必須項,默認值太小,日誌文件 【一小時日誌量?】
# 優化增加配置項 默認是200,單位是頁 【SAS*12 RAID10:2000;SSD:5000;FUSIO-IO:50000】
innodb_io_capacity=2000
innodb_io_capacity_max=6000 # 優化增加配置項
innodb_lru_scan_depth=2000 # 優化增加配置項目 每次刷髒頁的數量
max_allowed_packet=1024M # 20M就夠了吧:server 接受的數據包大小【一次大量插入數據】
# 一些默認即可的配置 這裏蠻寫出來一下看看
innodb_file_per_table=ON # 獨立表數據文件
#修改字符集
#init_connect='SET collation_connection = utf8_unicode_ci'
#init_connect='SET NAMES utf8'
character_set_server=utf8
#collation-server=utf8_unicode_ci
#collation_server=utf8_general_ci
skip-character-set-client-handshake
lower_case_table_names = 1 # 表名存儲在磁盤是小寫的,但是比較的時候是不區分大小寫
#爲function指定一個參數
log_bin_trust_function_creators=1
# 主從同步的配置 學到備份的時候再研究
server-id=210
log-bin=master-bin
log-bin-index=master-bin.index
# validate_password 密碼策略插件 mysql5.7之後會自動安裝的插件 默認開啓的
validate_password=off
# NO_ENGINE_SUBSTITUTION:使用不不支持的引擎時報錯
# 1.STRICT_TRANS_TABLES,對於單個insert操作,插入單行數據與字段類型不兼容,則insert操作失敗並回滾;插入多行數據,如果插入數據的第一行內容與字段類型不兼容,則insert操作失敗並回滾,如果插入數據的第一行內容與字段類型兼容,但後續的數據行存在不兼容的情況,則兼容的數據正常插入,不兼容的數據會轉換成符合字段類型的格式再插入,不會中斷和回滾;
# 2.STRICT_ALL_TABLES,與STRICT_TRANS_TABLES不同的是,如果插入數據的第一行內容與字段類型兼容,但後續的數據行存在不兼容的情況,則兼容的數據正常插入,不兼容的數據則會報錯並終止insert操作。
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 加固建議5.6及以上版本應該配置爲 skip_symbolic_links=yes [8.0+已經不用了]
symbolic-links=0 # 禁用符號鏈接以防止各種安全風險
# 後面看書 ,發現可以加上的配置
# 對於固態硬盤有着超高 IOPS 性能的磁盤設置爲 0,避免查找相鄰的髒頁一起刷寫
innodb_flush_neighbors = 0
# IO線程=一個log線程+四個read線程+四個write線程,讀寫線程數也可以相應調整【使用SSD+的情況】
# innodb_read_io_threads #讀操作
# innodb_write_io_threads #寫操作
其它-配置說明與建議
- 需要給系統保留內存:總內存的5% 或者 2G ,取較大值。
- 通常計算配置的時候:可以預留預測值20%作爲性能抖動的影響【畢竟少點影響一點點,超了可能就崩了。╮(╯_╰)╭】
- mysql每個連接大概需要256KB,1000連接吧,預留個256MB~512MB的內存就夠了。【複雜查詢會佔用更多內存】
- 必須進行的配置:innodb 緩衝池,innodb日誌文件,查詢緩存,MyISAM不使用略過;按需配置的:二進制日誌等
- innodb_log_buffer_size:控制日誌緩衝區的大小,一般在1~8MB。【P352】
- 還有很多基礎配置:【369~375】【個人感覺還是不調整的穩妥】
- 一下爲個人認爲可能需要配置的:【除了以上項目給出的配置】
- 備庫配置:read_only,skip_slave_start,slave_net_timeout,sync_master_info,sync_relay_log,sync_relay_log_info
- 最總要的配置:innodb_buffer_pool_size,innodb_log_file_size
結論
在mysql基礎配置上面,不需要調整。【沒事不要瞎調整,默認的配置比調整的效果好多了】
必須要調整的只有innodb存儲引擎的 緩衝池大小,和日誌大小。其他一下必要調整查看上面的基礎配置,我認爲最基礎的了。
參考
如果覺得我的這個配置很少不詳細,推薦下面這個連接的文章,很全面的配置說明。
2020-04-08 小杭