mysql thread_MySQL thread_stack连接线程的优化

2023-11-15

MySQL连接不仅能通过网络方式,还可以通过命名管道的方式,不论是哪种方式连接MySQL,在MySQL中都是通过线程的方式管理所有客户端请求的。每一个客户端连接都会有一个与之对应的连接线程。在MySQL中实现了一个Thread Cache池,将空闲的连接线程存放其中,而不是完成请求后就销毁。这样,当有新的连接请求时,MySQL首先会检查Thread Cache中是否存在空闲连接线程,如果存在则取出来直接使用,如果没有空闲连接线程,才创建新的连接线程。具体参数:

Thread_cache_size:Thread Cache池中应该存放的连接线程数。

Thread_stack:每个连接线程被创建时,MySQL给它分配的内存大小。当MySQL创建一个新的连接线程时,需要给它分配一定大小的内存堆栈空间,以便存放客户端的请求的Query及自身的各种状态和处理信息。

查看连接线程相关的系统变量的设置值: show variables like 'thread%';

mysql> show variables like 'thread%';

+-------------------+--------+

| Variable_name | Value |

+-------------------+--------+

| thread_cache_size | 32 |

| thread_stack | 196608 |

+-------------------+--------+

2 rows in set (0.00 sec)

如图,系统设置了Thread Cache池最多将缓存25个连接线程,每个连接线程创建之初,系统分配192KB的内存堆栈给它。

查看系统被连接的次数及当前系统中连接线程的状态值

mysql> show status like 'connections';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| Connections | 620 |

+---------------+-------+

1 row in set (0.00 sec)

mysql> show status like '%thread%';

+------------------------+-------+

| Variable_name | Value |

+------------------------+-------+

| Delayed_insert_threads | 0 |

| Slow_launch_threads | 0 |

| Threads_cached | 3 |

| Threads_connected | 4 |

| Threads_created | 7 |

| Threads_running | 1 |

+------------------------+-------+

6 rows in set (0.00 sec)

系统启动到现在共接受到客户端的连接620次,共创建了7个连接线程,当前有1个连接线程处于和客户端连接的状态,而3个连接状态的线程中只有一个处于 active 状态,即只有一个正在处理客户端提交的请求,。而在Thread Cache池中共缓存了3个连接线程。

Thread Cache 命中率:

Thread_Cache_Hit = (Connections - Threads_created) / Connections * 100%;

一般在系统稳定运行一段时间后,Thread Cache命中率应该保持在90%左右才算正常。

实际应用:

针对16G/32G的机器,一般设置 512K

当然如果遇到下面的错误提示就应该考虑增加这个值了。

mysql-debug: Thread stack overrun

bug info

报错信息:

java.sql.SQLException: Thread stack overrun: 5456 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack.

官方相应信息:

The default (192KB) is large enough for normal operation. If the thread stack size is too small, it limits the complexity of the SQL statements that the server can handle, the recursion depth of stored procedures, and other memory-consuming actions

可以使用

show variables where `variable_name` = 'thread_stack';

查询当前数据库的默认线程栈的大小,一般情况下都能正常使用,但是当查询语句或者存储过程复杂时会报Thread stack overrun错误,此时只要修改默认配置就可以。

解决

windows: 修改mysql安装目录下的my-small.ini或者my.ini设置为256k,或者更大,然后重启服务

[mysqld]

thread_stack = 256k

linux: 同样要修改配置文件,但是!!!,不是安装目录下的配置文件,是/etc/my.cnf,只有这个文件才能生效,然后重启服务service mysql restart

[mysqld]

thread_stack = 256k

本文标题: MySQL thread_stack连接线程的优化

本文地址: http://www.cppcns.com/shujuku/mysql/184343.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql thread_MySQL thread_stack连接线程的优化 的相关文章

随机推荐

  • 蜜罐技术

    前言 之前一直就有听说过蜜罐 蜜罐的 不知道是什么技术 今天在公司看到一份资料算是基本弄清楚了 和大家分享一下 何为蜜罐 Honeypot 蜜罐 Honeypot 这一概念最初出现在1990 年出版的一本小 TheCuckoo sEgg 中
  • 【论文阅读】Dimensionality Reduction by Learning an Invariant Mapping

    1 背景 对比学习算是比较早就已经提出了一种技术 其中 早期比较有名的一篇文章就是Lecun等在 Dimensionality Reduction by Learning an Invariant Mapping 简称 DrLIM 文章中提
  • IKE 协议(转)

    from http lulu1101 blog 51cto com 4455468 817872 IKE 协议 2012 03 26 21 49 50 标签 休闲 ike 职场 IKE 协议简介 1 IKE 协议 IPSec 的安全联盟可以
  • K8S 工作负载(一)

    K8S 工作负载 1 Pod Pod 是 Kubernetes 中创建 管理和调度的最小计算单元 用户可以在 K8S 中通过调用 Pod API生成一个 Pod 让 K8S 对其进行调度 Pod 是一组 一个或多个 容器 这些容器共享存储
  • 实现基于DR模型的LVS

    环境 client 桥接 router 桥接 vmnet8 ip forward LVS vmnet8 rs1 rs2 vmnet8 GATE XXXX
  • strongswan介绍

    文章目录 保障网络安全 IKE和IPsec基础 认证基础知识 配置文件基础 使用和维护 日志和监测 PKI 路由 strongswan介绍文档翻译 原文链接 保障网络安全 strongswan是一套完整的IPsec实现方案来提供服务端和客户
  • Pytorch学习笔记(16)———预训练模型微调

    完整工程 工程目录结构 Code import torch import torch optim as optim import torch nn as nn from torch utils data import DataLoader
  • 计算两幅图像的相似度(PSNR、SSIM、MSE、余弦相似度、MD5、直方图、互信息、Hash)& 代码实现 与举例

    MSE Mean Squared Error 均方误差 MSE公式 MSE 计算模型的预测 与真实标签 Y 的接近程度 公式表示为 对于两个m n的单通道图像I和K 它们的均方误差可定义为 优点 MSE的函数曲线光滑 连续 处处可导 便于使
  • Matlab从指定行读取文本文件(textscan)

    在帮助别人的同时提高自己 有人提到这个问题 给了我去探究的机会 将最终代码做一下记录 问题描述 现有一大矩阵存储于某一txt文件末端 需要用导入matlab进行进一步的处理 这就需要略过前面很多无效行 如果采用传统的fscanf未免有些麻烦
  • Oracle数据库查询最近一周的记录(后台时间存储类型为10位时间戳)

    现有一张SHOPPING表 记录最近的购物记录 包括商品名 金额 时间 以10位时间戳形式存储 为了更直观地了解时间信息 我们需要将10位时间戳转换成我们能够看懂的时间字符串 查询sql如下 SELECT NAME AMOUNT CDATE
  • Python 搭建虚拟环境

    简介 实际开发中 我们为了防止python安装的包污染用户环境 比如你是root用户 利用pip安装后的包会放在root的python安装录中 很可能会影响root用户的其他操作 我们用root用户使用pip安装软件包后 linux环境会报
  • Django2.0-templates(1)-渲染模版方式和模版查找路径

    templates Django自带的是DTL Django Templates language DTL模版是一种带有特殊语法的HTML文件 该文件可以被Django编译 可以传递参数进去 实现数据动态化 编译完成后 生成一个普通的HTM
  • 如何安装elasticsearch分布式搜索引擎

    文章目录 安装elasticsearch 1 部署单点es 1 1 创建网络 1 2 下载镜像 1 3 运行 2 部署kibana 2 1 部署 2 2 安装中文 2 3 DevTools 3 安装IK分词器 3 1 在线安装ik插件 较慢
  • MQL5:zig-zag 指标

    Zig Zag 指标是用于描述高低点趋势的指标 MQL5 官方实现 MQL5 官方实现十分地烂 辣鸡 很多无用的变量 程序冗长 不一致 效率低下 感觉是多个菜鸟合作写出来的 有一些没有用的变量都没有删掉 不过 先来看看MQL5的官方实现 辅
  • 在ActiveX控件中如何动态调用DLL函数

    刚到公司不久 接到领导的下达的一个任务 就是把对POS机操作功能封装在ActiveX控件中 在IE中调用 这样就能实现在IE上直接对POS机进行操作 而我要封装的这个动态库 厂家只提供了一个单的动态库和一百多字的说明 也就是说明一下动态库中
  • vue笔记-inheritAttrs及$attr表示含义(一)

    一 引用官方解释 inheritAttrs 默认值true 在这种情况下父作用域的不被认作 props 的特性绑定 attribute bindings 将会 回退 且作为普通的 HTML 特性应用在子组件的根元素上 attr 包含了父作用
  • 服务器网站用绝对路径,云服务器上的绝对路径

    云服务器上的绝对路径 内容精选 换一换 已成功登录Java性能分析 待安装分析辅助软件的服务器已开启sshd Java性能分析优先选用非交互shell non interactive shell 中的JAVA HOME环境变量所指定的JRE
  • 关于iptables -m选项以及规则的理解

    关于iptables的详细状态可以查看http os 51cto com art 201108 285209 htm 时常在服务器的防火墙上看到有这些规则 2 106K 8294K ACCEPT all 0 0 0 0 0 0 0 0 0
  • 自定义Switch背景带文字

    需要实现的效果 标题代码实现 div class custom switch span class custom left 关灯 span div class switch btn div span class custom right 开
  • mysql thread_MySQL thread_stack连接线程的优化

    MySQL连接不仅能通过网络方式 还可以通过命名管道的方式 不论是哪种方式连接MySQL 在MySQL中都是通过线程的方式管理所有客户端请求的 每一个客户端连接都会有一个与之对应的连接线程 在MySQL中实现了一个Thread Cache池