從實列中學習linux shell10 : 如何根據服務器的內存,cpu 以及 ssd硬盤 來確定mysql 的最大并發數

以下是根據服務器硬件資源智能推薦MySQL最大并發連接數

包含詳細的計算邏輯和實時資源檢測:
且記:該腳本要放在 安裝mysql的服務器上 運行

第一步:實現腳本

#!/bin/bash# 計算MySQL最大連接數推薦值
# 公式說明:取CPU計算值與內存計算值的較小值,SSD優化系數提升30%# 配置參數(可根據需要調整)
CONN_PER_CORE_HDD=100     # HDD磁盤每核心基礎連接數
CONN_PER_CORE_SSD=130     # SSD磁盤每核心基礎連接數
MEM_PER_CONN_MB=4         # 每個連接內存消耗估值(MB)
MYSQL_MEM_RATIO=0.7       # 分配給MySQL的內存比例
RESERVED_MEM_MB=2048      # 系統保留內存(MB)# 獲取硬件信息
CPU_CORES=$(nproc)
TOTAL_MEM=$(free -m | awk '/Mem:/{print $2}')
AVAIL_MEM=$(awk "BEGIN {print int(($TOTAL_MEM - $RESERVED_MEM_MB) * $MYSQL_MEM_RATIO)}")# 檢測SSD
DISK=$(df / | tail -1 | awk '{print $1}' | sed 's/[0-9]//g')
DISK=${DISK#/dev/}
IS_SSD=0
if [[ -e "/sys/block/${DISK}/queue/rotational" ]]; then[[ $(cat "/sys/block/${DISK}/queue/rotational") -eq 0 ]] && IS_SSD=1
fi# 計算邏輯
if [ $IS_SSD -eq 1 ]; thenCPU_BASED=$(( CPU_CORES * CONN_PER_CORE_SSD ))
elseCPU_BASED=$(( CPU_CORES * CONN_PER_CORE_HDD ))
fiMEM_BASED=$(( AVAIL_MEM / MEM_PER_CONN_MB ))
SUGGESTED_CONN=$(( CPU_BASED < MEM_BASED ? CPU_BASED : MEM_BASED ))# 應用邊界限制
MAX_LIMIT=16384   # 最大允許連接數
MIN_LIMIT=200     # 最小推薦連接數
if [ $SUGGESTED_CONN -gt $MAX_LIMIT ]; thenFINAL_CONN=$MAX_LIMIT
elif [ $SUGGESTED_CONN -lt $MIN_LIMIT ]; thenFINAL_CONN=$MIN_LIMIT
elseFINAL_CONN=$SUGGESTED_CONN
fi# 輸出結果
echo "MySQL最大并發連接數推薦值: $FINAL_CONN"
echo "----------------[硬件檢測]-----------------"
echo "CPU核心數       : $CPU_CORES"
echo "物理內存總量    : ${TOTAL_MEM}MB"
echo "可用內存分配    : ${AVAIL_MEM}MB (預留${RESERVED_MEM_MB}MB)"
echo "存儲介質類型    : $([ $IS_SSD -eq 1 ] && echo 'SSD' || echo 'HDD')"
echo "----------------[計算邏輯]-----------------"
echo "CPU計算基數     : $([ $IS_SSD -eq 1 ] && echo ${CONN_PER_CORE_SSD}/core || echo ${CONN_PER_CORE_HDD}/core)"
echo "基于CPU的計算   : ${CPU_BASED} connections"
echo "基于內存的計算  : ${MEM_BASED} connections (${MEM_PER_CONN_MB}MB/conn)"
echo "邊界值約束      : [$MIN_LIMIT, $MAX_LIMIT]"
echo "-------------------------------------------"
echo "操作建議:"
echo "1. 修改/etc/my.cnf添加:"
echo "   [mysqld]"
echo "   max_connections = $FINAL_CONN"
echo "   thread_cache_size = $(( FINAL_CONN / 2 ))"
echo "2. 執行: systemctl restart mysqld"
echo "3. 監控命令: show status like 'Threads_connected';"

第二步:執行方式

chmod +x mysql_max_conn.sh
./mysql_max_conn.sh

第三步:設計邏輯說明

  1. 多維度資源評估

    • CPU計算法:根據核心數和存儲類型動態調整基數
      • HDD:每核心100連接
      • SSD:每核心130連接(提升30%)
    • 內存計算法:基于可用內存和連接內存消耗
      • 計算公式:可用內存 / 單連接內存消耗
  2. 動態參數調整

    # 可調整參數區域
    CONN_PER_CORE_HDD=100     # 機械硬盤每核心基數
    CONN_PER_CORE_SSD=130     # 固態硬盤每核心基數
    MEM_PER_CONN_MB=4         # 單連接內存估值(建議4-10MB)
    MYSQL_MEM_RATIO=0.7       # 分配給MySQL的內存比例
    RESERVED_MEM_MB=2048      # 系統保留內存
    
  3. 智能邊界保護

    • 最小值保護:至少200連接(避免低配服務器連接不足)
    • 最大值限制:不超過16384(防止內存溢出)
  4. SSD優化策略
    通過檢測/sys/block/*/queue/rotational文件:

    • 值為0:SSD存儲,提升30%連接基數
    • 值為1:HDD存儲,使用基礎計算值

第四部:壓力測試建議

# 使用sysbench進行驗證
sysbench oltp_read_write --threads=$(( FINAL_CONN * 2 )) --mysql-host=localhost --mysql-user=root --mysql-password=your_pwd --mysql-db=test prepare
sysbench oltp_read_write --threads=$(( FINAL_CONN * 2 )) --time=300 --report-interval=10 run

監控指標關注:

  1. 連接利用率

    SHOW STATUS LIKE 'Threads_connected';
    SHOW STATUS LIKE 'Max_used_connections';
    
  2. 資源瓶頸檢測

    # 內存監控
    watch -n 1 "free -m | awk '/Mem:/{print \"Used:\",\$3,\"MB\"}'"# CPU負載
    mpstat -P ALL 1 5# I/O壓力
    iostat -dx 1
    

##第四步:典型場景調整示例

服務器配置推薦值計算依據
4核/8GB/HDD4004核100=400 < (8G0.7-2G)/4=750
16核/64GB/SSD208016核130=2080 < (64G0.7-2G)/4=1070→取1070
32核/256GB/NVMe SSD16384達到上限值

第五步:注意事項

  1. 連接內存消耗
    實際內存占用受以下因素影響:

    • sort_buffer_size(默認256KB-4MB)
    • join_buffer_size(默認256KB)
    • read_buffer_size(默認128KB)
      可通過以下公式估算實際消耗:
    # 精確計算模式(需替換實際配置值)
    MEM_PER_CONN=$(( ${sort_buffer_size} + ${join_buffer_size} * 2 + ${read_buffer_size} * 2 +1048576  # 基礎開銷(1MB)
    ))
    
  2. 連接風暴防護
    建議配合以下參數使用:

    [mysqld]
    max_connect_errors=1000      # 防止暴力連接
    wait_timeout=300            # 非交互連接超時
    interactive_timeout=600      # 交互連接超時
    
  3. 連接池優化
    應用端建議配置:

    # HikariCP配置示例
    maximumPoolSize=推薦值的80%
    idleTimeout=30000
    connectionTimeout=5000
    

該腳本已在CentOS 7/8和Ubuntu 20.04/22.04驗證,適用于MySQL 5.7/8.0版本。實際部署時建議通過AB測試/壓力測試驗證最終值。

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

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

相關文章

數據結構--AVL樹

目錄 前言 AVL樹的特點 AVL樹的插入 節點的定義 情況分析 AVL樹的旋轉 右單旋 左單旋 左右雙旋 右左雙旋 ?編輯總結 驗證AVL樹 前言 二叉搜索樹可以幫助我們以極高的效率查找(理想情況下是logn)&#xff0c;但是當在極端情況下&#xff0c;比如當樹中的節點值是有…

泰迪杯特等獎案例學習資料:基于多模態融合與邊緣計算的智能溫室環境調控系統

(第十二屆泰迪杯數據挖掘挑戰賽特等獎案例解析) 一、案例背景與核心挑戰 1.1 應用場景與行業痛點 在現代設施農業中,溫室環境調控直接影響作物產量與品質。傳統溫室管理存在以下問題: 環境參數耦合性高:溫度、濕度、光照、CO?濃度等參數相互影響,人工調控易顧此失彼。…

動手學深度學習12.1. 編譯器和解釋器-筆記練習(PyTorch)

以下內容為結合李沐老師的課程和教材補充的學習筆記&#xff0c;以及對課后練習的一些思考&#xff0c;自留回顧&#xff0c;也供同學之人交流參考。 本節課程地址&#xff1a;無 本節教材地址&#xff1a;12.1. 編譯器和解釋器 — 動手學深度學習 2.0.0 documentation 本節…

[java八股文][Java并發編程面試篇]并發安全

juc包下你常用的類&#xff1f; 線程池相關&#xff1a; ThreadPoolExecutor&#xff1a;最核心的線程池類&#xff0c;用于創建和管理線程池。通過它可以靈活地配置線程池的參數&#xff0c;如核心線程數、最大線程數、任務隊列等&#xff0c;以滿足不同的并發處理需求。Exe…

VMware搭建ubuntu保姆級教程

目錄 VMware Ubuntu 虛擬機配置指南 創建虛擬機 下載 Ubuntu ISO 新建虛擬機 網絡配置&#xff08;雙網卡模式&#xff09; 共享文件夾設置 SSH 遠程訪問配置 VMware Ubuntu 虛擬機配置指南 創建虛擬機 下載 Ubuntu ISO 【可添加我獲取】 官網&#xff1a;Get Ubunt…

馮諾依曼結構與哈佛架構深度解析

一、馮諾依曼結構&#xff08;Von Neumann Architecture&#xff09; 1.1 核心定義 由約翰馮諾依曼提出&#xff0c;程序指令與數據共享同一存儲空間和總線&#xff0c;通過分時復用實現存取。 存儲器總帶寬 指令帶寬 數據帶寬 即&#xff1a;B_mem f_clk W_data f_…

C/C++工程中的Plugin機制設計與Python實現

C/C工程中的Plugin機制設計與Python實現 1. Plugin機制設計概述 在C/C工程中實現Plugin機制通常需要以下幾個關鍵組件&#xff1a; Plugin接口定義&#xff1a;定義統一的接口規范動態加載機制&#xff1a;運行時加載動態庫注冊機制&#xff1a;Plugin向主程序注冊自己通信機…

node-sass安裝失敗解決方案

1、python環境問題 Error: Cant find Python executable "python", you can set the PYTHON env variable. 提示找不到python2.7版本&#xff0c; 方法一&#xff1a;可安裝一個python2.7或引用其他已安裝的python2.7 通過設置環境變量可以解決&#xff1b; 方法二&…

Netty高并發物聯網通信服務器實戰:協議優化與性能調優指南

目錄 1.總體設計 2.自定義協議設計(簡單版) 3.消息類型(1字節) 4.項目結構 5.核心功能代碼 (1)pom.xml(Maven依賴) (2)IotServer.java(服務器啟動器) (3)IotServerInitializer.java(Pipeline初始化) (4)DeviceChannelManager.java(設備連接管理器)…

多模態大語言模型arxiv論文略讀(六十)

Cantor: Inspiring Multimodal Chain-of-Thought of MLLM ?? 論文標題&#xff1a;Cantor: Inspiring Multimodal Chain-of-Thought of MLLM ?? 論文作者&#xff1a;Timin Gao, Peixian Chen, Mengdan Zhang, Chaoyou Fu, Yunhang Shen, Yan Zhang, Shengchuan Zhang, Xi…

面試常問系列(一)-神經網絡參數初始化-之自注意力機制為什么除以根號d而不是2*根號d或者3*根號d

首先先羅列幾個參考文章&#xff0c;大家之后可以去看看&#xff0c;加深理解&#xff1a; 面試常問系列(一)-神經網絡參數初始化面試常問系列(一)-神經網絡參數初始化之自注意力機制_注意力機制的參數初始化怎么做-CSDN博客面試常問系列(一)-神經網絡參數初始化-之-softmax-C…

第5篇:EggJS中間件開發與實戰應用

在Web開發中&#xff0c;中間件&#xff08;Middleware&#xff09;是處理HTTP請求和響應的核心機制之一。EggJS基于Koa的洋蔥模型實現了高效的中間件機制&#xff0c;本文將深入探討中間件的執行原理、開發實踐以及常見問題解決方案。 一、中間件執行機制與洋蔥模型 1. 洋蔥模…

樹狀結構轉換工具類

項目中使用了很多樹狀結構&#xff0c;為了方便使用開發一個通用的工具類。 使用工具類的時候寫一個類基礎BaseNode&#xff0c;如果有個性化字段添加到類里面&#xff0c;然后就可以套用工具類。 工具類會將id和pid做關聯返回一個樹狀結構的集合。 使用了hutool的工具包判空…

【Python】--裝飾器

裝飾器&#xff08;Decorator&#xff09;本質上是一個返回函數的函數 主要作用是&#xff1a;在不修改原函數代碼的前提下&#xff0c;給函數增加額外的功能 比如&#xff1a;增加業務&#xff0c;日志記錄、權限驗證、執行時間統計、緩存等場景 my_decorator def func():pas…

AI教你學VUE——Gemini版

前端開發學習路線圖 (針對編程新手&#xff0c;主攻 Vue 框架) 總原則&#xff1a;先夯實基礎&#xff0c;再深入框架。 想象一下建房子&#xff0c;地基不牢&#xff0c;上面的高樓&#xff08;框架&#xff09;是蓋不起來的。HTML、CSS、JavaScript 就是前端的地基。 階段一…

神經網絡中之多類別分類:從基礎到高級應用

神經網絡中之多類別分類&#xff1a;從基礎到高級應用 摘要 在機器學習領域&#xff0c;多類別分類是解決復雜問題的關鍵技術之一。本文深入探討了神經網絡在多類別分類中的應用&#xff0c;從基礎的二元分類擴展到一對多和一對一分類方法。我們詳細介紹了 softmax 函數的原理…

Go Web 后臺管理系統項目詳解

Go Web 后臺管理系統項目詳解 一、背景介紹 這是一個基于 Go 語言開發的 Web 后臺管理系統&#xff0c;為筆者學習期間練手之作&#xff0c;較為粗糙 二、技術架構 后端 語言 &#xff1a;采用 Go 語言&#xff08;Golang&#xff09;編寫&#xff0c;因其簡潔高效、并發能…

【Python系列】Python 中的 HTTP 請求處理

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

OS7.【Linux】基本指令入門(6)

目錄 1.zip和unzip 配置指令 使用 兩個名詞:打包和壓縮 打包 壓縮 Linux下的操作演示 壓縮和解壓縮文件 壓縮和解壓縮目錄 -d選項 2.tar Linux下的打包和壓縮方案簡介 czf選項 xzf選項 -C選項 tzf選項 3.bc 4.uname 不帶選項的uname -a選項 -r選項 -v選項…

windows系統 壓力測試技術

一、CPU壓測模擬 工具&#xff1a;CpuStres v2.0 官網&#xff1a;https://learn.microsoft.com/en-us/sysinternals/downloads/cpustres 功能&#xff1a;是一個工具類&#xff0c;用來模擬在一個進程中啟動最多64個線程&#xff0c;且可以獨立控制任何一個線程的啟動/暫停、…