mysql-8版本優化
參考官方文檔:
數據庫優化大方向:
數據庫性能:取決於數據庫級別的幾個因素,例如 表,查詢 和 配置 設置。這些軟件結構導致在硬件級別執行CPU和I / O操作,必須將這些操作最小化並使其盡可能高效。
mysql數據庫優化基本包含三個方面:
-
數據庫級別的優化
-
硬件優化
-
平衡便攜性和性能
這三種方式又有各自的優化方案:
數據庫級別:優化表格的結構 | 優化索引 | 使用適合的存儲引擎 | 優化鎖定策略 |對內存區域的優化
硬件優化:磁盤的讀寫 | cpu周期
平衡便攜性和性能:注釋方面的優化
總體來說,mysql數據庫的優化有以上三大塊
它們各自的優化也分很多種,參考官方文檔:https://dev.mysql.com/doc/refman/8.0/en/optimization.html
日常我們優化方案有哪些呢?
一,首先我們先看實際環境下,硬件的優化我們能做多少?
CPU :
推薦使用4u服務器來專門做數據庫服務器用
內存 :
內存基本實際中不擔心,官方建議是不要小於2G。但是工作中mysql server服務器基本都是遠超2G的內存,所以應該不用太擔心內存問題
磁盤 :
磁盤是一大方面,磁盤的好壞直接影響着IO的讀寫速度,這是物理性的,無法改變。mysql通常作為數據庫服務器,它每秒都會進行大量的,復雜的查詢操作,對磁盤的讀寫量可想而知!我們能做的,在磁盤做陣列上,使用RAID10陣列方式最好,注意不要嘗試使用RAID5。如果不考慮成本,使用固態SSD硬盤給mysql數據庫使用。
二,數據庫級別的優化
通常默認的 my.cnf 配置文件無法發揮出 MySQL 最高的性能,所以需要根據不同的硬件
進行優化,配置文件的優化也是重點,下面是物理內存為 32G 的數據庫優化參數,具體從全
局、二進制日志、主從、innodb、myisam 幾個方面優化,僅供參考
-
default-time-zone=+8:00
#默認 mysql 使用的是系統時區,修改為北京時間,也就是所說的東八區。
-
interactive_timeout = 120
#服務器關閉交互式連接前等待活動的秒數。
-
wait_timeout = 120
#服務器關閉非交互連接之前等待活動的秒數。
-
open_files_limit = 10240
#MySQL 服務器打開文件句柄數限制。
-
group_concat_max_len = 102400
#mysql 默認的拼接最大長度為 1024 個字節,由於 1024 個字節會出現不夠用的情況, 根據實際情況進行修改。
-
user=mysql
#使用 mysql 用戶運行。
character-set-server=utf8
init_connect='SET NAMES utf8'
#設置字符集為 utf8
7 back_log = 600
#在 MySQL 暫時停止響應新請求之前,短時間內的多少個請求可以被存在堆棧中。如果系統在短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的 TCP/IP 連接的
監聽隊列的大小。默認值 50。
8 max_connections = 5000
#MySQL 允許最大的進程連接數,如果經常出現 Too Many Connections 的錯誤提示, 則需要增大此值。
9 max_connect_errors = 6000
#設置每個主機的連接請求異常中斷的最大次數,當超過該次數,MySQL 服務器將禁止 host 的連接請求,直到 mysql 服務器重啟或通過 flush hosts 命令清空此 host 的相關信息。
10 table_open_cache = 2048
#指定表高轉緩存的大小,每當mysql方位一個表時,如果表緩沖區還有空間,該表就被打開並放入其中,這樣可以更加快速訪問表內容
11 thread_concurrency = 8
#這個值正確與否,對mysql的性能影響很大,在多個cpu核下,錯誤設置值,會導致mysql不能充分利用cpu;比如有一個雙核的cpu,那么值應該為4;2個雙核的cpu,那么值應該為8
12 query_cache_limit = 4M
#默認是4kb,設置越大值,對大數據查詢有好處,但是如果是小數據查詢,就容易照成內存碎片和浪費
13 bulk_insert_buffer_size = 64M
#批量插入數據緩存大小,可以有效提高插入效率,默認為8M
下面幾個參數將是對二進制日志文件的優化
14 log-bin=mysql-bin
#打開二進制功能
15 binlog_cache_size = 4M
#在事務過程中容納二進制日志SQL語句的緩存大小。
16 expire_logs_days = 7
#二進制日志只留存最近7天,不用人工手動刪除