MySQL全局優化

目錄

1 硬件層面優化

1.1 CPU優化

1.2 內存優化

1.3 存儲優化

1.4 網絡優化

2 系統配置優化

2.1 操作系統配置

2.2 MySQL服務配置

3 庫表結構優化

4 SQL及索引優化


mysql可四個層面考慮優化分別是

  • 硬件
  • 系統配置
  • 庫表結構
  • SQL及索引

成本優化效果以上四方面優化如下

1 硬件層面優化
1.1 CPU優化

選擇高性能多核處理器可以有效提升高并發處理能力

1.2 內存優化
  • MySQL InnoDB存儲引擎使用緩沖緩存數據索引足夠內存可以更多數據緩存減少磁盤I/O操作
  • 增加物理內存同時需要調整MySQL服務配置innodb_buffer_pool_size一般設置物理內存70%~80%
1.3 存儲優化
  • 使用SSD提供更好地磁盤IO能力
  • 如果不能完全使用SSD替換可以考慮部分替換
  • 比如redo日志undo日志binlog日志重要日志存儲路徑指向SSD磁盤
1.4 網絡優化
  • 提高網絡吞吐能力
  • 減少網絡傳輸
2 系統配置優化
2.1 操作系統配置
  • 文件描述符限制ulimit -n
  • tcp參數調優

參數

作用

影響

tcp_window_scaling

允許網絡連接兩端使用比標準創建大小(65535字節)更大接收窗口

對于廣域網或者數據中心數據傳輸非常有用

可以減少由于網絡延遲造成傳輸瓶頸

net.ipv4.tcp_fastopen

允許三次握手期間傳輸數據

減少了建立連接時間

對于頻發短連接場景有利

tcp_keepalive_time

tcp連接多久沒有活動后開始發送保活探測

適當調整配置可以幫助更快檢測斷開連接

避免長時間占用資源等待無響應客戶端

避免設置太短產生不必要流程

tcp_tw_reuse

允許TIME_WAIT狀態套接字用于相同四元組連接

可以更快復用TIME_WAIT狀態端口

  • 選擇合適文件系統比如ext4或者xfs
  • 禁用 atime 更新減少不必要磁盤寫入
2.2 MySQL服務配置

參數

說明

max_connections

最大連接

連接創建意味需要分配系統資源內存文件描述符

連接建立時分配內存=線程棧空間 (thread_stack)+基本的連接管理結構較小且固定)

執行全表掃描分配緩沖區(read_buffer_size)

執行沒有索引查詢分配連接緩沖區join_buffer_size

需要排序操作分配排序緩沖區sort_buffer_size

需要使用臨時表分配臨時緩沖tmp_table_size, max_heap_table_size如果需要臨時表超過內存大小使用磁盤存儲臨時表

如果系統內存不足將會使用磁盤swap內存導致性能降低

因此需要設置合適連接

max_user_connections

單個用戶允許最大連接

back_log

暫存連接超過最大連接小于該設置值時立即失敗而是等待資源釋放

wait_timeout

jdbc連接空閑一定時間斷開連接

interactive_timeout

mysql client連接空閑一定時間斷開

sort_buffer_size

排序緩沖區可以加速order bygroup by

每個連接分配排序緩沖區

join_buffer_size

表關聯緩沖區關聯不走索引使用緩沖區驅動一部分數據讀取緩沖區然后驅動進行關聯查詢查詢完成清理緩沖區繼續驅動剩余數據讀取緩沖區進行關聯查詢

每個連接分配表關聯緩沖區

innodb_thread_concurrency

innodb并發線程

默認值0表示不限制

通常設置cpu核心數或者核心數2

innodb_buffer_pool_size

innodb緩沖區大小

一般物理內存70%~80%

innodb_lock_wait_timeout

行鎖鎖定時間

默認值50s

innodb_flush_log_at_trx_commit

redo日志落盤時機

  • 設置為0:表示每次事務提交時都將redo日志寫入redo日志緩沖區,數據庫宕機時可能會丟失數據
  • 設置為1時(默認值),表示每次事務時都會將redo日志持久化到磁盤,數據最安全,不會因為數據庫或者系統宕機導致數據丟失,但是性能差一點
  • 設置為2時,表示每次提交事務時都只是將redo日志寫到操作系統緩存(page cache)中,這種情況數據庫宕機不會丟失數據,操作系統宕機的話,如果page cache中的數據沒來的及寫入磁盤文件的話就會丟失數據

sync_binlog

binlog落盤時機

  • 為0時(默認),表示每次提交事務只寫到os 緩存page cache中,由操作系統自行判斷什么時候執行fsync寫入磁盤,服務器宕機時有可能丟失數據
  • 為1時,表示每次提交事務都會執行fsync寫入磁盤
  • 當>1時,表示每次提交事務都寫入到os緩存page cache中,當積累N個事務后調用fsync寫入磁盤,服務其宕機時最多丟失N個事務

  • 如何判斷服務器內存達到瓶頸
  • 查看服務狀態得到命中innodb緩存命中率命中率過小說明緩沖數據頻繁交換
 show global status like 'innodb%read%'\G;

參數

說明

nnodb_buffer_pool_reads

物理磁盤讀取次數

nnodb_buffer_pool_read_ahead

預讀次數

nnodb_buffer_pool_read_ahead_evicted

預讀但是沒有后續被讀取緩沖池替換數量

用于判斷預讀效率

nnodb_buffer_pool_read_requests

緩沖池讀取次數

nnodb_buffer_pool_read_requests

總共讀入字節數

nnodb_data_reads

發起讀取次數每次讀取可能讀取多個

3 庫表結構優化
  • 選擇合適字段類型
  • 選擇合適字段大小
  • 選擇合適存儲引擎
  • 小表
4 SQL及索引優化

參見索引優化章節

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80929.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80929.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80929.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue和springboot交互數據,使用axios【跨域問題】

vue和springboot交互數據,使用axios【跨域問題】 提示:幫幫志會陸續更新非常多的IT技術知識,希望分享的內容對您有用。本章分享的是node.js和vue的使用。前后每一小節的內容是存在的有:學習and理解的關聯性。【幫幫志系列文章】&…

FFMPEG 與 mp4

1. FFmpeg 中的 start_time 與 time_base start_time 流的起始時間戳(單位:time_base),表示第一幀的呈現時間(Presentation Time)。通常用于同步多個流(如音頻和視頻)。 time_base …

AI世界的崩塌:當人類思考枯竭引發數據生態鏈斷裂

AI世界的崩塌:當人類思考枯竭引發數據生態鏈斷裂 ——論過度依賴AI創作對技術進化的反噬 一、數據生態的惡性循環:AI的“自噬危機” 當前AI模型的訓練依賴于人類創造的原始數據——書籍、論文、藝術作品、社交媒體動態等。據統計,2025年全球…

C++【STL】(2)string

C【STL】string用法擴展 1. assign:為字符串賦新值 用于替換字符串內容,支持多種參數形式。 常用形式: // 用另一個字符串賦值 str.assign("Hello World");// 用另一個字符串的子串(從第6個字符開始,取5…

樹莓派4基于Debian GNU/Linux 12 (Bookworm)開啟VNC,使用MobaXterm連接VNC出現黑屏/灰屏問題

1. 開啟樹莓派的VNC服務 啟用VNC服務:通過raspi-config開啟 # 1. 通過 raspi-config 工具開啟 sudo raspi-config選擇 Interface Options → VNC → Yes退出時會自動啟動服務 檢查服務狀態: sudo systemctl status vncserver-x11-serviced正常輸出應顯示…

MongoDB使用x.509證書認證

文章目錄 自定義證書生成CA證書生成服務器之間的證書生成集群證書生成用戶證書 MongoDB配置java使用x.509證書連接MongoDBMongoShell使用證書連接 8.0版本的mongodb開啟復制集,配置證書認證 自定義證書 生成CA證書 生成ca私鑰: openssl genrsa -out ca…

Python爬蟲實戰:研究js混淆加密

一、引言 在當今數字化時代,數據已成為推動各行業發展的核心驅動力。網絡爬蟲作為一種高效的數據采集工具,能夠從互聯網上自動獲取大量有價值的信息。然而,隨著互聯網技術的不斷發展,許多網站為了保護自身數據安全和知識產權,采用了 JavaScript 混淆加密技術來防止數據被…

Java項目層級介紹 java 層級 層次

java 層級 層次 實體層 控制器層 數據連接層 Service : 業務處理類 Repository :數據庫訪問類 Java項目層級介紹 https://blog.csdn.net/m0_67574906/article/details/145811846 在Java項目中,層級結構(Layered Architecture&#xf…

網絡安全頂會——SP 2025 論文清單與摘要

1、"Check-Before-you-Solve": Verifiable Time-lock Puzzles 時間鎖謎題是一種密碼學原語,它向生成者保證該謎題無法在少于T個順序計算步驟內被破解。近年來,該技術已在公平合約簽署和密封投標拍賣等場景中得到廣泛應用。然而,求解…

《100天精通Python——基礎篇 2025 第18天:正則表達式入門實戰,解鎖字符串處理的魔法力量》

目錄 一、認識正則表達式二、正則表達式基本語法2.1 行界定符2.2 單詞定界符2.3 字符類2.4 選擇符2.5 范圍符2.6 排除符2.7 限定符2.8 任意字符2.9 轉義字符2.10 反斜杠2.11 小括號2.11.1 定義獨立單元2.11.2 分組 2.12 反向引用2.13 特殊構造2.14 匹配模式 三、re模塊3.1 comp…

思邁特軟件攜手天陽科技,打造ChatBI金融智能分析新標桿

5月10日,廣州思邁特軟件有限公司(以下簡稱“思邁特軟件”)與天陽宏業科技股份有限公司(以下簡稱“天陽科技”)在北京正式簽署戰略合作協議。思邁特軟件董事長吳華夫、CEO姚詩成,天陽科技董事長兼總裁歐陽建…

OPENSSL-1.1.1的使用及注意事項

下載鏈接: OpenSSL1.1.1一個廣泛使用的開源加密庫資源-CSDN文庫 OpenSSL 1.1.1 是一個廣泛使用的開源加密庫,以下是其使用方法及注意事項: 使用方法 安裝: Linux系統: 從源碼編譯安裝:訪問 OpenSSL 官網…

數據庫優化

一、慢 SQL 排查全流程 1. 開啟慢查詢日志:精準定位問題 SQL 慢查詢日志是定位性能問題的首要工具,通過記錄執行超時或未使用索引的 SQL,為優化提供依據。 配置步驟: ① 臨時啟用(生效至服務重啟) sql …

GO語言-導入自定義包

文章目錄 1. 項目目錄結構2. 創建自定義包3. 初始化模塊4. 導入自定義包5. 相對路徑導入 在Go語言中導入自定義包需要遵循一定的目錄結構和導入規則。以下是詳細指南(包含兩種方式): 1. 項目目錄結構 方法1:適用于Go 1.11 &#…

記錄算法筆記(2025.5.11) 二叉樹的中序遍歷

給定一個二叉樹的根節點 root ,返回 它的 中序 遍歷 。 示例 1: 輸入:root [1,null,2,3] 輸出:[1,3,2] 示例 2: 輸入:root [] 輸出:[] 示例 3: 輸入:root [1] …

【iptables防火墻】 -- DDos防御

最近有客戶要定制路由器的默認防火墻等級,然后涉及到了DDos規則,對比客戶提供的規則發現我們現有的規則存在明顯的錯誤,在此記錄一下如何使用iptables防護DDoS攻擊 直接貼一下規則 #開啟TCP SYN Cookies 機制 sysctl -w net.ipv4.tcp_synco…

[Java][Leetcode simple]26. 刪除有序數組中的重復項

思路 第一個元素不動從第二個元素開始&#xff1a;只要跟上一個元素不一樣就放入數組中 public int removeDuplicates(int[] nums) {int cnt1;for(int i 1; i < nums.length; i) {if(nums[i] ! nums[i-1]) {nums[cnt] nums[i];}}return cnt;}

微服務!!

1.Nacos注冊中心 2.服務注冊 3.服務發現 4.負載均衡 5.OpenFeign 6.OpenFeign連接池 啟動程序 7.路由 8.微服務保護 1.雪崩問題 2.解決方案 1.請求限流 2.線程隔離 3.服務熔斷 3.Sentinel 1.鏈路 2.請求限流 3.線程隔離 4.Fallback 5.服務熔斷 4.分布式事務 1.Seata 2.部…

代碼隨想錄算法訓練營 Day44 動態規劃 ⅩⅠ 子序列問題

動態規劃 題目 1143. 最長公共子序列 - 力扣&#xff08;LeetCode&#xff09; 公共子序列&#xff0c;類似于最長重復子數組&#xff0c;但是不要求連續 (子序列) 1. 定義 dp&#xff0c;dp[i][j] 表示以 i-1 與 j-1 結尾的最長公共子序列的長度 2. 定義遞推公式 如果字符相…

聊一聊接口測試依賴第三方服務變更時如何處理?

目錄 一、依賴隔離與模擬 二、契約測試 三、版本控制與兼容性 四、變更監控與告警 五、容錯設計 六、自動化測試維護 七、協作機制與文檔自動化 第三方API突然改了參數或者返回結構&#xff0c;導致我們的測試用例失敗&#xff0c;這時候該怎么辦呢&#xff1f;首先想到…