从实列中学习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.mzph.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;且可以独立控制任何一个线程的启动/暂停、…