高性能MySQL-筆記5-服務器優化-配置調整

高性能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 小杭


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章