按照网上的这个demo,用jmeter测试了一下。有GlobalTransactional注解的吞吐量只能没有注解的20% 这个正常么?
[seata]求助,按照demo测试,发现使用seata性能下降很多
回答
您的集群构建模式是什么?您的客户端到 Seata-Server 的延迟是多少? Seata-Server 到其存储的延迟是多少?你的集群架构模式是什么?你的客户端与seata-server的延迟是多少?seata-server与它的功耗是多少?
我发现我慢的地方了,我查询了库存,然后外贸的计数后进入。如果我去掉这一步,那么他的成绩几乎是没有影响的
如果你在下面写我的sql,而不是先查询然后更新怎么办?
update stock set count=count-2 where id=? and count>=?
我怀疑认为你的内容没有改变,受影响的行数为0并且被seata忽略。一种版本的seata的处理方式如下代码所示,请告诉我您正在使用的seata版本
protected T executeAutoCommitFalse(Object[] args) throws Exception {
if (!JdbcConstants.MYSQL.equalsIgnoreCase(getDbType()) && isMultiPk()) {
throw new NotSupportYetException("multi pk only support mysql!");
}
TableRecords beforeImage = beforeImage();
T result = statementCallback.execute(statementProxy.getTargetStatement(), args);
int updateCount = statementProxy.getUpdateCount();
if (updateCount > 0) {
TableRecords afterImage = afterImage(beforeImage);
prepareUndoLog(beforeImage, afterImage);
}
return result;
}
只是改变SetCount
操作?我明白这只是一个记忆操作。
你是对的,我发现undo日志中没有记录任何数据。sql被seata忽略了。我使用的seata版本是2.0.0。
我的seata-server配置是默认的,我的seata-server的存储模式、配置类型和注册表模式都是文件。数据源代理模式是AT。其实我只启动了spring-jpa-seata的例子,和一个seata-server,并没有改变......我如何检查我的客户端和seata-server之间的延迟?
缓慢的部分不应该在这里,因为这只是一个内存操作,理论上不应该有任何性能开销。如果你能将你的 demo 上传到 git 会很有帮助,因为这样会更容易分析原因。
https://seata.io/zh-cn/docs/overview/faq#42此故障排除也将帮助您解决问题
这并不能解决我的问题,我根据seata-sample中的示例进行测试并得到这样的结果
不带globaltransaction注解的吞吐量比带注解的吞吐量高12倍。添加注解时也存在一些错误。
我使用以下代码进行测试。 https://github.com/seata/seata-samples/tree/master/seata-spring-boot-starter-samples