mysql command为sleep时项目可以连接_mysql数据库常连接造成大量sleep状态怎么办
设置max_execution_time 来阻止太长的读SQL。那可能存在的问题是会把所有长SQL都给KILL 掉。有些必须要执行很长时间的也会被误杀。
自己写个脚本检测这类语句,比如order by rand(), 超过一定时间用Kill query thread_id 给杀掉。
那能不能不要杀掉而让他正常运行,但是又不影响其他的请求呢?
那mysql 8.0 引入的资源组(resource group,后面简写微RG)可以基本上解决这类问题。
比如我可以用 RG 来在SQL层面给他限制在特定的一个CPU核上,这样我就不管他,让他继续运行,如果有新的此类语句,让他排队好了。
为什么说基本呢?目前只能绑定CPU资源,其他的暂时不行。
那我来演示下如何使用RG。
创建一个资源组user_ytt. 这里解释下各个参数的含义,
type = user 表示这是一个用户态线程,也就是前台的请求线程。如果type=system,表示后台线程,用来限制mysql自己的线程,比如Innodb purge thread,innodb read thread等等。
vcpu 代表cpu的逻辑核数,这里0-1代表前两个核被绑定到这个RG。可以用lscpu,top等列出自己的CPU相关信息。
thread_priority 设置优先级。user 级优先级设置大于0。
mysqlmysql> create resource group user_ytt type = user vcpu = 0-1 thread_priority=19 enable;Query OK, 0 rows affected (0.03 sec)
RG相关信息可以从 information_schema.resource_groups 系统表里检索。
mysqlmysql> select * from information_schema.resource_groups;+---------------------+---------------------+------------------------+----------+-----------------+| RESOURCE_GROUP_NAME | RESOURCE_GROUP_TYPE | RESOURCE_GROUP_ENABLED | VCPU_IDS | THREAD_PRIORITY |+---------------------+---------------------+------------------------+----------+-----------------+| USR_default | USER | 1 | 0-3 | 0 || SYS_default | SYSTEM | 1 | 0-3 | 0 || user_ytt | USER | 1 | 0-1 | 19 |+---------------------+---------------------+------------------------+----------+-----------------+3 rows in set (0.00 sec)
我们来给语句select guid from t1 group by left(guid,8) order by rand() 赋予RG user_ytt。
mysql> show processlist;+-----+-----------------+-----------+------+---------+-------+------------------------+-----------------------------------------------------------+| Id | User | Host | db | Command | Time | State | Info |+-----+-----------------+-----------+------+---------+-------+------------------------+-----------------------------------------------------------+| 4 | event_scheduler | localhost | NULL | Daemon | 10179 | Waiting on empty queue | NULL || 240 | root | localhost | ytt | Query | 101 | Creating sort index | select guid from t1 group by left(guid,8) order by rand() || 245 | root | localhost | ytt | Query | 0 | starting | show processlist |+-----+-----------------+-----------+------+---------+-------+------------------------+-----------------------------------------------------------+3 rows in set (0.00 sec)
找到连接240对应的thread_id。
mysqlmysql> select thread_id from performance_schema.threads where processlist_id = 240;+-----------+| thread_id |+-----------+| 278 |+-----------+1 row in set (0.00 sec)
给这个线程278赋予RG user_ytt。没报错就算成功了。
mysqlmysql> set resource group user_ytt for 278;Query OK, 0 rows affected (0.00 sec)
当然这个是在运维层面来做的,我们也可以在开发层面结合 MYSQL HINT 来单独给这个语句赋予RG。比如:
mysqlmysql> select /*+ resource_group(user_ytt) */guid from t1 group by left(guid,8) order by rand()....8388602 rows in set (4 min 46.09 sec)
RG的限制:
Linux 平台上需要开启 CAPSYSNICE 特性。比如我机器上用systemd 给mysql 服务加上
systemctl edit mysql@80 [Service]AmbientCapabilities=CAP_SYS_NICE
mysql 线程池开启后RG失效。
freebsd,solaris 平台thread_priority 失效。
目前只能绑定CPU,不能绑定其他资源。
mysql command为sleep时项目可以连接_mysql数据库常连接造成大量sleep状态怎么办相关推荐
- mysql提示太多连接_mysql数据库提示连接太多怎么办
mysql数据库提示连接太多的解决方法:1.登录mysql数据库,查看当前活动的连接线程变量值:2.编辑my.cnf配置文件,添加[[mysqld] port=3306]:3.重启mysql服务器. ...
- mysql command为sleep时项目可以连接_Mysql中Sleep进程连接数过多问题解决
解决方法 批量删除 sleep 进程状态的连接数. 1).一种直接在MySQL命令控制台操作: mysql> show processlist; mysql> SELECT concat( ...
- mysql连接池永驻_【学习笔记】Oracle连接池 数据库常驻连接池(Database Resident Connection Pool)案例介绍...
天萃荷净 分享一篇关于应用程序与Oracle数据库连接的连接方法介绍,数据库常驻连接池(Database Resident Connection Pool)案例介绍 一.介绍常驻连接池(Databas ...
- SharePoint服务器连接配置数据库的连接字符串保存位置
摘自:http://kaneboy.blog.51cto.com/1308893/280585 经常有人问我这个问题,SharePoint服务器将连接配置数据库的连接字符串保存在什么地方?虽然其他Sh ...
- 使用OLE DB方式连接常用数据库的连接字符串的设置
使用OLE DB方式连接常用数据库的连接字符串的设置 SQL Server 使用 OLE DB 所设置的连接字符串: 标准连接方式 Provider=sqloledb;Data Source=data ...
- mysql的内外连接_MYSQL的内外连接
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...
- mysql 什么时候用内连接_mysql显示内连接和隐式内连接的区别,什么时候非要用到显示内连接。...
显式内连接就是使用inner join的办法,写起来复杂些 以windows版本mysql里自带的sakila数据库为例 显式内连接语法 select 字段名 from 表1 join 表2 on 连 ...
- c远程连接mysql数据库_MySQL数据库远程连接开启方法
第一中方法:比较详细 以下的 文章 主要介绍的是 MySQL 数据库 开启远程连接的时机操作流程,其实开启MySQL 数据库远程连接的实际操作步骤并不难,知识方法对错而已,今天我们要向大家描述的是My ...
- 数据库mysql自然连接_MySQL数据库之多表查询natural join自然连接
自然连接 概念 自动判断条件连接,判断的条件是依据同名字段 小结 表连接是通过同名字段来连接的 如果没有同名字段就返回笛卡尔积 同名的连接字段只显示一个,并且将该字段放在最前面 自然内连接(natur ...
最新文章
- 什么是php model类,thinkphp的自定义model类有什么作用?
- Java学习笔记二十五:Java面向对象的三大特性之多态
- Java Reflection(十):数组
- kill 进程_Node.js 进程平滑离场剖析
- 关于Redis的数据迁移(三种方法)
- linux shell中21的含义
- 介绍Spring Integration
- oracle deul,C#引用传递
- rm -rf误删文件的恢复(extundelete工具的使用)
- android 铃音制作工具,音乐剪辑铃声制作
- matlab变量全局化,matlab全局变量global
- kettle读取文本文件入库
- Vista系统Administrator帐户的激活与禁用
- 联想大数据“双拳”出击另有深意
- 【华人学者风采】郑宇 京东
- JSP停车场车位管理系统myeclipse开发oracle数据库BS模式java编程网
- 使用XML的方式导出EXCEL
- 最佳值换算法c语言,页面置换算法---最佳置换算法(OPT)
- 图论(八)——割边割点和块
- STC-ISP程序下载软件
热门文章
- 2021-2027全球与中国光刻胶湿式剥离台市场现状及未来发展趋势
- 【推荐】2020-2021 AI人工智能技术领域行业研究报告大合集(58份)
- FPGA学习日记(七)HDMI图像数据传输
- 偶遇GeoGebra
- GeoGebra笔记3:函数绘图区基本设置(x,y轴范围……)
- 全球及中国表面活性剂行业品牌运营状况与消费需求前景调研报告2022年
- Python-国内华为云下载一览表
- html中的面板样式,Dreamweaver中CSS样式面板
- Axure中动态面板和母版有什么区别
- linux创建word文件格式,WORD文档格式要求与linux学习规划