前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL 压测出现热点问题,怎么监控,怎么判断系统的压力问题

MYSQL 压测出现热点问题,怎么监控,怎么判断系统的压力问题

作者头像
AustinDatabases
发布2022-05-19 08:57:55
9390
发布2022-05-19 08:57:55
举报
文章被收录于专栏:AustinDatabases

最近在测试阿里的POLARDB ,并针对数据库进行压力测试,在上周六,进行压测的过程中,数据库报警。

首先声明,压测的目的就是想压测到数据库的G点,并发现这个配置下的数据库不能承受多大的压力值。产生报警的问题主要原因有两个

1 当时的产生的同时并发的压力较大,数据库无法接受(这是报警的原因)

2 当时产生压测的方式,产生了热点块

这里先针对提到的是数据热点块的问题,这个通过压测软件可以很容易做到,针对一个表的数据库频繁的更新,或者针对数据表里面的一些点,进行快速的更新,这就产生了资源的争抢,解决的问题除了逻辑的方案,那么就是物理的方案,磁盘速度和更大的内存是解决这个问题的一个方法。

因为要做一个关于数据库的系统,发现数据库产生热点的问题,就必须通过数据库内部的表来获取和分析。

方法1 :

代码语言:javascript
复制
select e.thread_id,e.event_name,e.avg_timer_wait/100000 as ms,s.user,
s.state,s.command,s.statement_latency,s.lock_latency,s.rows_examined,s.tmp_tables,
s.full_scan,current_memory,s.trx_autocommit,s.current_statement
from events_waits_summary_by_thread_by_event_name as e
left join sys.session as s on s.thd_id = e.thread_id
where count_star <> 0 and event_name = 'wait/lock/table/sql/handler' and s.lock_latency <> 0 and s.state is not null;

上面的查询是通过两个表

1 performance_schema中的events_waits_summary_by_thread_by_event_name 表中过滤wait/lock/table/sql/handler 条目的thread_id ,说明当前的这些表中存在锁,这些锁🔒是当前 被称为thr_lock(),这个锁里面包含了如下的操作

read normal

read with shared locks

read high priority

read no insert

write allow write

write concurrent insert

write delayed

write low priority

write normal

同时还包含了外部锁,通过存储引擎层来获得

read external

write extenal

这些数据是通过对操作的等待收集而来的,通过sys 库中的session表进行关联.

通过此查询可以获知以下信息

1 操作这个语句的用户

2 这个语句的状态

3 语句的类型

4 语句产生的临时表

5 是否是全表扫描

6 当前SESSION 使用多少内存

7 执行的语句是那个

8 锁等待的平均时间

第二种方式,可以通过针对定位表的方式来不断刷新以下的SQL

通过 count_star 与 其他的等待时间的比值,来或许一个曲线,关于等待时间的上升或下降的曲线,也能看出表是否存在

代码语言:javascript
复制
 select object_schema, object_name, count_star, avg_timer_wait/count_star, AVG_TIMER_READ/count_star, avg_timer_read_external/count_star, AVG_TIMER_WRITE_EXTERNAL/count_star from table_lock_waits_summary_by_table   where OBJECT_NAME = 't1' and (avg_timer_wait/count_star >= 100)\G

通过不断查看平均时间,来查看等待时间的变化,来感受表被操作的热度。

可以取一个平均值,在此值之上的,判断为性能问题。

这边在测试中,发现如果avg_timer_wiat/count_star 后,如果数字在100以上,此时你的主机的 load average 已经在200 左右了,

如果你的这边在测试中,发现如果avg_timer_wiat/count_star 后,如果数字在800以上,此时你的load average 已经在600 以上了,所以可以通过这个来判断你的系统的压力的大致的值,而推断的方式是通过表的访问的的后的状态而判断。

通过mysqlslap 进行压力测试的命令

代码语言:javascript
复制
mysqlslap  -utest -p1234.Com -h 192.168.198.101 -P 3306 -p1234.Com --auto-generate-sql --auto-generate-sql-load-type=mixed  --number-char-cols=10 --number-int-cols=10  --iterations=10 --create-schema=test  --concurrency=1000 --auto-generate-sql-write-number=1000 --auto-generate-sql-secondary-indexes=2  --verbose
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档