You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter调用SQL Server带命名参数存储过程遇阻塞求助

解决JMeter调用SQL Server带命名参数存储过程卡住的问题

1. 确认JDBC连接配置正确性

  • 驱动类必须使用SQL Server官方驱动:com.microsoft.sqlserver.jdbc.SQLServerDriver
  • JDBC URL需适配驱动版本,新版驱动(mssql-jdbc 10+)需指定加密参数避免连接阻塞:
    jdbc:sqlserver://你的服务器地址:1433;databaseName=DB_NAME;encrypt=false;trustServerCertificate=true
    
  • 确保mssql-jdbc-x.x.x.jreX.jar驱动包已放入JMeter的lib目录,重启JMeter生效。

2. 修正存储过程调用写法

选择JDBC Request的Callable Statement类型,SQL语句采用SQL Server兼容的命名参数格式:

{call STORE_PROCEDURE_NAME (@param1=?, @param2=?, @param3=?, @param4=?, @param5=?, @param6=?)}

注:仅需写入必填参数和需要自定义的可选参数,未指定的可选参数将使用存储过程默认值。

3. 正确绑定参数

在JDBC Request的参数配置区按以下规则填写:

  • Parameter names:填写不带@的参数名,逗号分隔,例如:param1,param2,param3,param4,param5,param6
  • Parameter values:对应参数值,逗号分隔,字符串加单引号、数值直接写,例如:'val1','val2','val3',val4,val5,'val6'
  • Parameter types:对应SQL Server数据类型,逗号分隔,例如:VARCHAR,VARCHAR,VARCHAR,INT,INT,VARCHAR

4. 排查存储过程阻塞问题

若配置无误仍卡住,在SQL Server执行以下查询检查会话阻塞情况:

SELECT 
    session_id, 
    blocking_session_id, 
    wait_type, 
    wait_time, 
    sql_text = SUBSTRING(st.text, (qs.statement_start_offset/2)+1, 
    ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) 
    ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1)
FROM sys.dm_exec_requests qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
WHERE blocking_session_id <> 0;

若发现阻塞,终止阻塞会话或优化存储过程锁机制。

5. 其他注意事项

  • 控制JMeter线程组并发数,避免超过SQL Server最大连接数限制
  • 若存储过程含输出参数,需在Parameter types中指定OUT类型
  • 先在SSMS手动执行存储过程,确认执行正常且无性能问题

内容的提问来源于stack exchange,提问作者Pandarian Ld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:22:50