【发布时间】:2014-10-22 09:30:08
【问题描述】:
我有一个项目涉及记录来自多个设备(数千个)的数据 - 设备每 X 秒发送一次需要记录的数据。
设备向应用服务器 (Apache TomEE) 发送 HTTP GET 请求,服务器解析请求并将其存储到 SQL Server DB。
TomEE 服务器被复制了 3 次,并且有一个负载均衡器在它们之间循环请求。
我使用 OpenJPA 来存储记录,这样(em 保存需要存储的记录):
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
u = execute(em);
tx.commit();
} catch (SQLException | RuntimeException e) {
u = handleError(e);
if (tx.isActive())
tx.rollback();
} finally {
em.close();
}
当我用 JMeter 测试性能时,我发现这个架构每秒处理大约 200 个请求 - 我想让它更快。 我想了一些方向:
- 在单个事务中插入多条记录可以提高性能,但是如何在单个事务中插入多条记录? (它们都来自不同的 HTTP 请求)
- 也许不同的 SQL 服务器配置可以提高性能?
- 也许 SQL Server 机器需要更多的 CPU/内存 - 我怎么知道这是否是瓶颈?
- 从业务逻辑的角度来看,事务可以并行编写 - 如何验证 SQL 服务器配置未设置为一对一模式?
有人可以考虑其他方向来改进这一点吗?
有人可以推荐找到瓶颈的方法吗?
谢谢!
【问题讨论】:
标签: sql-server performance openjpa apache-tomee