最近在测试阿里的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 ,说明当前的这些表中存在锁,这些锁