mysqlslap压力测试和线程池

目录

1. mysqlslap介绍

2. mysqlslap常用参数

3. 开始测试

3.1 单线程

3.2 多线程 

3.3 50和100个并发

3.4 迭代测试 

4.结果解释

5.线程池

5.1 开启线程池

5.2 关于线程池的参数


1. mysqlslap介绍

mysqlslap是一个诊断程序,旨在模拟客户端并发访问MySQL服务器,测试MySQL服务的负载,主要工作场景就是对数据库服务器做基准测试。

mysqlslap官方文档

MySQL :: MySQL 5.7 Reference Manual :: 4.5.8 mysqlslap — A Load Emulation Client

2. mysqlslap常用参数

--auto-generate-sql, -a 自动生成测试表和数据,表示用mysqlslap工具自己生成的SQL脚本来测试并发压力。
--auto-generate-sql-load-type=type 测试语句的类型。代表要测试的环境是读操作还是写操作还是两者混合的。取值包括:read,key,write,update和mixed(默认)。
--auto-generate-sql-add-auto-increment 代表对生成的表自动添加auto_increment列,从5.1.18版本开始支持。
--number-char-cols=N, -x N 自动生成的测试表中包含多少个字符类型的列,默认1
--number-int-cols=N, -y N 自动生成的测试表中包含多少个数字类型的列,默认1
--number-of-queries=N 总的测试查询次数(并发客户数×每客户查询次数)
--query=name,-q 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
--create-schema 代表自定义的测试库名称,测试的schema,MySQL中schema也就是database。
--commint=N 多少条DML后提交一次。
--compress, -C 如果服务器和客户端支持都压缩,则压缩信息传递。
--concurrency=N, -c N 表示并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者--delimiter参数指定的值做为分隔符。例如:--concurrency=100,200,500。
--engine=engine_name, -e engine_name 代表要测试的引擎,可以有多个,用分隔符隔开。例如:--engines=myisam,innodb。
--iterations=N, -i N 测试执行的迭代次数,代表要在不同并发环境下,各自运行测试多少次。
--only-print 只打印测试语句而不实际执行。
--detach=N 执行N条语句后断开重连。
--debug-info, -T 打印内存和CPU的相关信息。

测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,如果已经存在则先删除。可以用--only-print来打印实际的测试过程,整个测试完成后不会在数据库中留下痕迹。

3. 开始测试

sbtest.sql是自己编写的压力测试脚本

3.1 单线程

[root@localhost soft]# mysqlslap -uroot -p123456 --query=stock.sql --number-of-queries=100000

3.2 多线程 

[root@localhost soft]# mysqlslap -uroot -p123456 -c4 --query=sbtest.sql --number-of-queries=100000

3.3 50和100个并发

[root@localhost soft]# mysqlslap -uroot -p123456 -c50,100 --query=stock.sql --number-of-queries=100000
mysqlslap: [Warning] Using a password on the command line interface can be insecure.
Benchmark
	Average number of seconds to run all queries: 21.113 seconds
	Minimum number of seconds to run all queries: 21.113 seconds
	Maximum number of seconds to run all queries: 21.113 seconds
	Number of clients running queries: 50
	Average number of queries per client: 2000

Benchmark
	Average number of seconds to run all queries: 21.445 seconds
	Minimum number of seconds to run all queries: 21.445 seconds
	Maximum number of seconds to run all queries: 21.445 seconds
	Number of clients running queries: 100
	Average number of queries per client: 1000

3.4 迭代测试 

50和100个并发,3次迭代测试,3次执行测试得到平均值

[root@localhost soft]# mysqlslap -uroot -p123456 -c50,100 --query=stock.sql --number-of-queries=100000 -i3
mysqlslap: [Warning] Using a password on the command line interface can be insecure.
Benchmark
	Average number of seconds to run all queries: 20.784 seconds
	Minimum number of seconds to run all queries: 20.439 seconds
	Maximum number of seconds to run all queries: 21.095 seconds
	Number of clients running queries: 50
	Average number of queries per client: 2000

Benchmark
	Average number of seconds to run all queries: 22.958 seconds
	Minimum number of seconds to run all queries: 22.471 seconds
	Maximum number of seconds to run all queries: 23.381 seconds
	Number of clients running queries: 100
	Average number of queries per client: 1000

4.结果解释

Benchmark
    #运行所有语句的平均秒数
	Average number of seconds to run all queries: 22.958 seconds
    #运行所有语句的最小秒数
	Minimum number of seconds to run all queries: 22.471 seconds
    #运行所有语句的最大秒数
	Maximum number of seconds to run all queries: 23.381 seconds
    #100并发
	Number of clients running queries: 100
    #每个客户端执行的语句数
	Average number of queries per client: 1000

当测试线程为4,8,16,32,64,128,256,512,1024时,线程为32 QPS达到最大,往后线程越多QPS越低,需要设置线程池,控制并发量

5.线程池

        为了解决one-thread-per-connection(每个连接一个线程)存在的频繁创建和销毁大量线程以及高并发情况下msql吞吐量严重下降的问题,实现mysql在高并发环境依然能保持较高的性能。

        Oracle和MariaDB都推出了ThreadPool方案,目前Oracle的Thread pool实现为Plugin方式,并且只添加到在Enterprise版本中,Percona移植了MariaDB的Thread pool功能,并做了进一步的优化。我的环境是基于Percona MySQL 5.7版本。

        为了处理并发请求,MySQL提供了thread_handling 参数,用于控制线程的管理方式。它可以影响数据库的性能、吞吐量以及对并发请求的处理能力。在默认情况下,thread_handling 参数的值为one-thread-per-connection,即每个客户端连接都会分配一个独立的线程来处理。

常见的 thread_handling 参数取值(perconna mysql)

1. one-thread-per-connection:每个客户端连接分配一个独立的线程来处理。这是默认的线程管理方式,适用于低并发的情况。在高并发的环境下,由于线程的创建和销毁开销较大,可能导致性能下降。
2. one-thread-for-all-connections:所有客户端连接共享一个线程。这种方式适用于高并发的应用场景,可以降低线程创建和销毁的开销,提高数据库的吞吐量。不过,由于只有一个线程处理所有的连接,可能会导致请求处理的延迟增加。
3. pool-of-threads:为客户端连接维护一个线程池,连接请求会被分配到池中的空闲线程进行处理。这种方式适用于中等并发的场景,可以在一定程度上平衡线程的创建和销毁开销与请求处理的延迟。

5.1 开启线程池

perconna mysql配置文件添加如下参数,重启mysql使配置生效

[root@localhost ~]# vi /etc/my.cnf
[mysqld]
thread_handling = pool-of-threads

5.2 关于线程池的参数

(root@localhost) [(none)]> show variables like 'thread%';
+-------------------------------+-----------------+
| Variable_name                 | Value           |
+-------------------------------+-----------------+
| thread_cache_size             | 13              |
| thread_handling               | pool-of-threads |
| thread_pool_high_prio_mode    | transactions    |
| thread_pool_high_prio_tickets | 4294967295      |
| thread_pool_idle_timeout      | 60              |
| thread_pool_max_threads       | 100000          |
| thread_pool_oversubscribe     | 3               | #group中的最大线程数,每个group的最大线程数为thread_pool_oversubscribe+1
| thread_pool_size              | 4               | #线程池的Group的数量,默认为系统CPU的个数
| thread_pool_stall_limit       | 500             |
| thread_stack                  | 262144          | #每个线程堆栈大小
| thread_statistics             | OFF             | #
+-------------------------------+-----------------+
  • thread_pool_size

该参数是设置线程池的Group的数量,默认为系统CPU的个数,充分利用CPU资源。

  • thread_pool_oversubscribe

该参数设置group中的最大线程数,每个group的最大线程数为thread_pool_oversubscribe+1,注意listener线程不包含在内。

  • thread_pool_high_prio_mode

高优先级队列的控制参数,有三个值(transactions/statements/none),默认是transactions,三个值的含义如下:

transactions:对于已经启动事务的语句放到高优先级队列中,不过还取决于后面的thread_pool_high_prio_tickets参数。

statements:这个模式所有的语句都会放到高优先级队列中,不会使用到低优先级队列。

none:这个模式不使用高优先级队列。

  • thread_pool_high_prio_tickets

该参数控制每个连接最多语序多少次被放入高优先级队列中,默认为4294967295,注意这个参数只有在thread_pool_high_prio_mode为transactions的时候才有效果。

  • thread_pool_idle_timeout

worker线程最大空闲时间,默认为60秒,超过限制后会退出。

  • thread_pool_max_threads

该参数用来限制线程池最大的线程数,超过该限制后将无法再创建更多的线程,默认为100000。

  • thread_pool_stall_limit

该参数设置timer线程的检测group是否异常的时间间隔,默认为500ms。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/566881.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

直流负载在新能源领域的作用有哪些

直流负载在新能源领域的作用主要体现在以下几个方面: 新能源如太阳能、风能等,其发电过程中产生的电能为直流电。传统的电力系统主要采用交流电,因此在新能源并网时需要进行逆变器转换。然而,逆变器在转换过程中会存在一定的能量损…

设计模式-模板模式

模板设计模式 定义 在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 简单来说,有多个子类共有的方法,且逻辑相同,可以考虑作为模板方法。 模板的价值就在于骨架的定义,骨架内部将问题…

手写基于redis-lua脚本实现分布式id生成器starter

手写基于redis-lua脚本实现分布式id生成器starter 文章目录 1.前言2.实现思路2.1lua脚本的特性2.2 了解三个redis命令2.3集群自增序列实现原理2.4三种实现思路2.4.1 实现思路一2.4.2 实现思路二2.4.3实现思路三 3.项目工程目录4.源码仓库地址5.依赖及使用配置5.1依赖5.2nacos配…

科研基础与工具(论文写作)

免责申明: 本文内容只是学习笔记,不代表个人观点,希望各位看官自行甄别 参考文献 科研基础与工具(YouTube) 学术写作句型 Academic Phrase bank 曼彻斯特大学维护的一个网站 写论文的时候,不不知道怎么…

机器学习基础-PR\ROC\F1

1 1 、ROC曲线2 、PC曲线3、F14 、正负样本不均衡时怎么选择 1 、ROC曲线 就是TPR 与FPR 曲线 如图,就是根据阈值不同,我们看我们的二分类器的结果,根据结果算出TPR(真阳性)与FPR(假阳性),最好的情况就是如图,我们的…

2024年三支一扶报名照上传要求很严格

2024年三支一扶报名照上传要求很严格

2024年最新版云开发cms开通步骤,开始开发微信小程序前的准备工作,认真看完奥!

小程序官方有改版了,搞得石头哥不得不紧急的再新出一版,教大家开通最新版的cms网页管理后台 一,技术选型和技术点 1,小程序前端 wxml css JavaScript MINA原生小程序框架 2,数据库 云开发 云数据库 云…

合合信息Embedding模型:引领中文文本向量化技术新高度

目录 🍅前言🍓赛事含金量🍓Embedding技术简介🍓Embedding在大模型中的价值🍓合合信息Embedding模型特点及优势🍓合合信息Embedding模型测试🍓技术突破🍓公司介绍 🍅总结 …

360在线翻译免费API

一、需求: 根据360在线翻译,获取免费API,并调用 二、主要步骤 1、请求 url url "https://fanyi.so.com/index/search" 2、传入信息 datas {"query": "桌子"} 3、请求头 headers {"pro": &…

Axure糖尿病健康管理APP原型 (知识科普/病友社区/远程医生会诊/购物商城/血糖监测/饮食监测)

作品概况 页面数量:共 50 页 源文件格式:rp格式,兼容 Axure RP 9/10,非程序软件无源代码 应用领域:医疗健康、慢病管理、糖尿病管理 作品特色 本作品为Axure糖尿病健康管理APP端原型图,设计规范内容清晰…

第54篇:创建Platform Designer系统

Q:本期我们开始使用Platform Designer工具创建带IP核的FPGA自定义硬件系统。 A:Platform Designer是集成在Quartus软件里的系统设计工具,名称随着Quartus的不断更新曾命名为SOPC Builder和Qsys。 使用Platform Designer可以添加Quartus已有自…

Aigtek高压放大器在电活性聚合物中的作用是什么

电活性聚合物是一类特殊类型的聚合物,其性质和形状可以受到外部电场的调控。这些聚合物在多个领域中有着广泛的应用,包括人工肌肉、电动液体透镜、柔性电子、生物医学传感器等。高压放大器在电活性聚合物的研究和应用中扮演着关键的角色,下面…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明 文章编号&am…

C#-使用Harmony库实现DLL文件反射调用

一. Harmony工作原理 利用C#运行时Runtime的反射机制,动态加载dll中的方法,字段,属性,实现对DLL方法的重写和代码注入。 二. Harmony下载及安装 1.下载Harmony_lib库lib.harmony.2.3.3.nupkg 霸王•吕布 / CSharpHarmonyLib GitCodehttps://gitcode.net/qq_35829452/csharph…

南京邮电大学数学实验A答案 | 《MATLAB数学实验》第三版课后习题答案

数学实验A 本仓库收集了2024年我在学习《数学实验A》课程期间完成的作业。课程使用的教材为《MATLAB数学实验》第三版,作者为胡良剑和孙晓君教授。 这个资源库的建立初衷是为了帮助南京邮电大学的同学们在学习过程中有一个参考的依据,减少一些无端浪费…

【网络编程】UDP实现回显服务器

一.网络编程的基本术语. 客户端 客户端是为用户提供本地服务的程序,通常位于用户设备上。也称为用户端,是相对于服务器而言的。它主要指安装在用户设备上的程序,这些程序能够与服务器进行通信,从而获取服务或者执行特定功能。在…

虚拟机中安装的CentOS7的桌面右上角没有网络图标解决方案

问题描述 今天在打开CentOS7后,发现右上角的网络图标不见了,然后命令行访问百度也不通。然后上网查了一些解决方法。 原因分析及解决方案: 上网查了许多解决方法,其中一种成功解决了我的问题;我的是配置文件的问题。…

双链向表专题

1.链表的分类 链表的种类非常多组合起来就有 2 2 8种 链表说明: 虽然有这么多的链表的结构,但是我们实际中最常⽤还是两种结构: 单链表 和 双向带头循环链表 1. 无头单向⾮循环链表:结构简单,⼀般不会单独⽤来存数…

在linux系统中启动pycharm

1.找到pycharm的安装路径,一般在下载文件夹中 2.进入pycharm的安装路径,进入bin目录 3.右击,打开终端,输入./pycharm.sh

Linux系统中Nginx的使用

Nginx是一款开源的高性能、高可靠性的Web服务器和反向代理服务器。它在Linux系统中得到了广泛的应用,被用于构建高性能的Web应用和提供反向代理服务。下面将介绍Nginx在Linux系统中的使用以及一些常见的应用案例。 一、Nginx的安装和配置 安装Nginx 在Linux系统中…