2014-10-22 18 views
0

我有一个涉及从多个设备(千次)记录数据的项目 - 设备每X秒发送一次需要记录的数据。快速多次在不同线程的SQL服务器上插入

设备向应用服务器(Apache TomEE)发送HTTP GET请求,服务器解析请求并将其存储到SQL Server数据库。

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请求 - 我想让它变得更快。 我想到了一些方向:

  1. 插入多个记录在一个事务中能够提高性能,但我怎么可以插入多个记录更在一个单一的交易? (它们都来自不同的HTTP请求)
  2. 也许不同配置的SQL服务器可以提升性能?
  3. 也许SQL服务器机器需要更多的CPU /内存 - 我怎么知道这是不是bottelneck?
  4. 从业务逻辑的角度来看,事务可以写成并列 - 我如何验证te服务器配置没有设置为逐一模式?

有人可以考虑在其他方向改善吗?

有人可以推荐一些方法来找到瓶颈吗?

谢谢!

回答

0

最好的方法是: 1)监视数据库并查看其负载(它是有限的,中间可以缩放不是数据库)。 2)使用jstack获取一些线程堆栈或在服务器上杀掉-3来查看会发生什么。如果没有足够的分析可以帮助,但我怀疑它会在这里有用