数据库优化脚本执行报错

目录

一、执行数据库优化脚本 报错... 3

解决方法:... 4

1、直接注释掉RECYCLE_POOLS 赋值sql语句块... 4

2、手动修改脚本... 5

附录... 6

一、执行数据库优化脚本 报错

AutoParaAdj3.5_dm8.sql

1)manager中报错

 

-20001: 执行失败, -7065 数据未找到 -7065: anonymous block line 188

RECYCLE_POOLS  RECYCLE缓冲区分区数赋值时报错。

 

2)disql中报错: --貌似不准确

 

[-20001]: 执行失败, -7065 数据未找到 -7065: anonymous block line 170

 

解决方法:

1、直接注释掉RECYCLE_POOLS 赋值sql语句块

 

报错:

 

236行

 

注释掉

 

再执行即可!!

2、手动修改脚本

select top 1 rn into RECYCLE_POOLS from t1 where rn <= RECYCLE*1024/3000/(page()/1024) order by 1 desc;

测试 RECYCLE 值最低190才可以为 RECYCLE_POOLS 赋值。

所以要求内存值 v_mem_mb 最低 4750 才可以执行脚本

注:

(仅修改v_mem_mb值不行,必须实际内存超过4750才可以

因为脚本前面会扫描实际内存是否大于v_mem_mb值:

若写的v_mem_mb 的值大于实际内存值,脚本中会重新按实际内存赋值!

SQL调式:在这里重新赋值实际内存3935

 

 

所以实际内存值小于4750的 直接修改 v_mem_mb 无效!!

这里需要将

select top 1 rn into RECYCLE_POOLS from t1 where rn <= RECYCLE*1024/3000/(page()/1024) order by 1 desc;

修改为

select top 1 rn into RECYCLE_POOLS from t1 where rn <= 190*1024/3000/(page()/1024) order by 1 desc;

即可

 

执行成功!!

附录

测试脚本:

create table t (rn int);

declare i int;

begin

for i in 1..100 loop

insert into t values(i);

end loop;

end;

/

create table t1 as

(

select * from t where rn > 1 minus

select

ta.rn * tb.rn

from

t ta,

t tb

where

ta.rn <= tb.rn

and ta.rn > 1

and tb.rn > 1

);

select top 1 rn from t1 where rn <= 190*1024/3000/(page()/1024) order by 1 desc;

 

RECYCLE_POOLS 赋值 2

<think>我们正在处理一个关于JMeter脚本执行返回HTTP 500错误的问题。HTTP 500错误表示服务器内部错误,这意味着问题出在服务器端,但作为测试人员,我们需要确定是什么原因导致服务器返回此错误,并检查我们的脚本是否有问题。 根据经验,HTTP 500错误可能由多种原因引起,包括但不限于: 1. 服务器端应用程序代码错误(例如,未处理的异常) 2. 服务器配置问题(例如,权限不足、资源不足) 3. 测试脚本发送了无效或意外的请求(例如,错误的参数、缺失必需的参数、格式错误) 4. 测试脚本没有正确处理会话(例如,缺少必要的cookie或token) 5. 测试数据问题(例如,使用了无效的数据) 我们将按照以下步骤进行排查: 步骤1:检查服务器日志 - 服务器日志(如应用服务器日志、数据库日志)通常能提供具体的错误信息,如异常堆栈跟踪。这有助于定位问题。 步骤2:验证请求的正确性 - 使用抓包工具(如Wireshark)或JMeter的“查看结果树”监听器,检查发送的请求是否与预期一致。 - 对比通过浏览器(或正常客户端)发送的请求和JMeter发送的请求,查看差异(如请求头、请求体、URL参数)。 步骤3:检查动态参数 - 如果请求中包含了动态参数(如会话ID、token、时间戳等),确保这些参数被正确处理。例如,使用正则表达式提取器或JSON提取器获取动态值,并在后续请求中正确引用。 步骤4:检查测试数据 - 如果使用了CSV数据文件或其他数据源,确保数据格式正确,且没有引入无效数据(例如,字符串中包含引号、逗号等导致解析错误)。 步骤5:检查服务器资源 - 监控服务器资源(CPU、内存、磁盘I/O、网络等),确认是否由于资源不足导致服务器无法处理请求。 步骤6:逐步调试 - 简化测试脚本:只保留一个请求,逐步添加其他请求,以确定是哪个请求导致了错误。 - 使用调试采样器(Debug Sampler)和查看结果树来检查变量值。 步骤7:检查JMeter脚本配置 - 确认HTTP请求的配置(如协议、端口、路径)是否正确。 - 检查HTTP头管理器,确保必要的头信息(如Content-Type, Accept, User-Agent等)已经设置,并且值正确。 步骤8:考虑并发和负载 - 如果是在高并发下出现500错误,可能是服务器在高负载下出现资源竞争或连接池耗尽等问题。可以尝试减少并发用户数,看是否问题消失。 步骤9:检查后端服务依赖 - 如果被测试的应用依赖于其他服务(如数据库、外部API),检查这些服务是否可用且响应正常。 根据引用[1]中的内容,虽然它讨论的是Java内存错误,但提醒我们也要注意JVM设置。如果JMeter本身运行在JVM上,且测试过程中JMeter自身出现内存溢出,也可能导致异常。但这里用户的问题是关于HTTP 500错误,所以主要关注服务器端。不过,如果JMeter因为内存不足而无法正确发送请求或接收响应,也可能导致异常情况。因此,可以检查JMeter运行机器的资源使用情况,以及JMeter的JVM参数设置(如堆内存大小)。 根据引用[2],我们可以联想到代码规范,但这里更直接的是测试脚本的编写规范。确保脚本遵循良好的编写规范,比如合理的注释、清晰的命名、正确的结构,有助于排查问题。 解决方案建议: 1. 首先,在“查看结果树”中检查返回的响应数据,服务器可能在500错误的响应体中提供了具体的错误信息(如错误堆栈),这有助于定位问题。 2. 如果响应体中没有明确信息,则需要查看服务器日志。 3. 确保脚本中处理了重定向和会话(比如使用HTTP Cookie管理器)。 4. 检查是否有参数化错误,比如在需要整数的地方传入了字符串,或者字符串没有正确转义。 如果以上步骤无法解决问题,可能需要更深入地分析服务器状态和应用程序逻辑。 相关问题: 1. 如何配置JMeter以记录更详细的调试信息? 2. 在JMeter中如何有效地管理动态参数(如token)? 3. JMeter测试中常见的错误有哪些以及如何解决? 4. 如何分析服务器日志以定位HTTP 500错误? 5. JMeter脚本调试的最佳实践是什么?</think>### JMeter脚本执行返回HTTP 500错误排查指南 HTTP 500错误表示服务器内部错误,通常由服务端问题或脚本配置不当引起。以下是系统化的排查步骤: --- #### **1. 验证请求正确性** - **检查请求参数**: - 确认请求体(Body Data)、路径参数、查询字符串与API文档一致 - 检查特殊字符是否转义(如`&`, `%`, `+`) - 示例:若需JSON格式但发送了`x-www-form-urlencoded`,会触发500错误[^1] - **对比合法请求**: - 用Postman发送相同请求,验证是否成功 - 在JMeter的「查看结果树」中对比正常/异常请求的原始数据 --- #### **2. 处理动态参数** - **会话管理**: - 添加 **HTTP Cookie管理器**(自动处理会话) - 检查`JSESSIONID`等令牌是否在后续请求中传递 - **参数关联**: - 使用**正则表达式提取器**或**JSON提取器**获取动态值(如CSRF token) - 验证提取的变量值是否正确(通过`Debug Sampler`) --- #### **3. 检查服务器端问题** - **查看服务器日志**: - 定位具体异常(如`NullPointerException`, `DatabaseConnectionFailed`) - 关注错误发生时间戳与JMeter请求时间匹配 - **资源监控**: - 检查服务器CPU/内存是否过载(`top`, `htop`命令) - 数据库连接池是否耗尽(如MySQL的`SHOW STATUS LIKE 'Threads_connected'`) --- #### **4. JMeter配置优化** - **超时设置**: ```java // 在HTTP请求中调整 Connect Timeout: 5000 // 毫秒 Response Timeout: 10000 ``` - **重试机制**: - 添加**重试控制器**(Retry Controller)处理瞬时故障 - **资源限制**: - 调整JVM堆内存(避免JMeter自身OOM): ```bash jmeter -JXmx=4G -n -t test.jmx ``` --- #### **5. 测试数据验证** - **参数化数据**: - 检查CSV文件编码(推荐UTF-8 without BOM) - 验证数据边界:空值、超长字符串、非法格式是否触发服务端异常 - **数据依赖**: - 确保前置请求生成的数据被正确引用(如订单ID) --- #### **6. 高级调试技巧** - **逐步执行**: 1. 禁用所有其他线程组 2. 只保留单个HTTP请求 3. 逐步添加关联组件 - **错误响应分析**: - 在「查看结果树」中检查响应头`X-Application-Error`(常见于Spring应用) - 捕获HTML响应中的异常堆栈(如Tomcat的`/error`页面) --- ### 常见解决方案 | 问题类型 | 解决措施 | |---------|---------| | 会话丢失 | 添加`HTTP Cookie管理器` | | 动态令牌缺失 | 使用`JSON提取器`获取token | | 请求格式错误 | 设置`Content-Type: application/json` | | 服务端资源不足 | 扩容服务器或降低JMeter并发数 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值