性能测试 数据库服务CPU爆满

记一次年前,性能测试组人员,给我测试出的bug吧,说实话,这种bug也只有在高并发情况下才会出现。

说下业务背景,我的程序中有一段逻辑是这样设计的:用户第一次请求,我会根据用户的请求条件,用哈希算法算出一个 哈希值,再将用户的请求条件插入的到一张表里;然后拿查询条件去请求其他系统(耗时较长)和查询本地数据库里的业务表(数据量较大),这样查询完后,会将两部分的数据汇总到一张结果表里,然后再从结果表中将数据统一查出返回给调用系统。
原本这也没啥问题,测试几轮下来,除了数据质量问题(与程序无关),没有出现过其他状况。直到性能测试,给我搞的很难受。
性能测试很重要得一个指标就是 tps,还有在并发情况下,服务器各项指标是否正常。
测试人员在将并发数调整到400后,持续1小时压测,进行到5分钟时,突然 tps断崖式下降至200,再5分钟100。同时数据库 cpu TOP命令下,cpu达到90。相当不正常,不正常了,就需要去排查。
排查主要集中在两点:1.测试哪个接口 2.为什么5分钟tps规律性的下降。

程序中5分钟有一个定时任务会进行清理操作,这部分操作会对查询的表进行 update、delete操作,但是我分析这张表总的数据量也就10w条左右,可能并不会影响;然后事实跟我想的正好相反,恰好就是这张不起眼的表导致的数据库cpu被沾满。紧接着说下排查过程、优化过程。
使用top命令时,可以看到有个进程占用率特别高 复制它的进程 id
process
然后进入到到数据库中 执行语句 select * from v$process where spid=进程号

select * from v$session where paddr=“地址”

select* from v$sql where sql_id=‘上面查出的sqlid’;
即可找到对应消耗cpu较多的sql语句。结果就是我刚才说的只有10w左右数据量的sql。

单纯执行这个sql并不会耗费多少资源,但是一旦并发查询的话,就很多了,因为我看他执行计划时全表扫描,这种即使10w条数据,高并发情况下,耗费资源依然很严重,一定要注意。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库服务器存储空间爆满时,您可以采取以下措施来解决问题: 1. 清理日志文件:检查数据库日志文件所在的路径,例如在 $ORACLE_HOME/rdbms/audit 目录下。可以删除旧的、不再需要的日志文件。 2. 清理归档日志文件:如果数据库启用了归档模式,检查归档日志文件所在的路径,例如在 $ORACLE_HOME/dbs/arch 目录下。可以删除旧的、不再需要的归档日志文件。 3. 压缩表空间:对于较大的表空间,可以考虑使用 Oracle 提供的压缩功能来减小占用空间。具体操作可以参考 Oracle 文档关于表空间压缩的说明。 4. 清理临时表空间:检查临时表空间的使用情况,可以使用以下 SQL 查询语句查看每个临时表空间的使用情况: ```sql SELECT tablespace_name, SUM(bytes)/1024/1024 AS "Used (MB)", SUM(maxbytes)/1024/1024 AS "Max (MB)" FROM dba_temp_files GROUP BY tablespace_name; ``` 如果某个临时表空间已经使用了大量空间,可以考虑清理或重新配置该表空间。 5. 删除不必要的数据:检查数据库是否有不再需要的数据,例如旧的日志记录、过期的备份等。可以根据业务需求和数据保留策略来删除这些数据。 6. 扩容磁盘空间:如果以上方法无法解决问题,可以考虑增加数据库服务器的磁盘空间。这可能需要对磁盘进行扩容或添加新的存储设备。 请根据您的具体情况选择适合的解决方法,并在执行任何更改之前务必备份重要的数据库数据。如果您需要更详细的指导,请提供更多关于数据库版本和具体情况的信息,以便我能够提供更准确的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值