从不同的线程快速多次插入SQL服务器

时间:2014-10-22 09:30:09

标签: sql-server performance openjpa tomee

我有一个涉及记录来自多个设备(数千个)的数据的项目 - 设备每隔X秒发送一次需要记录的数据。

设备将HTTP GET请求发送到应用服务器(Apache TomEE),服务器解析请求并将其存储到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个请求 - 我想让它更快。 我想到了一些方向:

  1. 在单个事务中插入多个记录可以提高性能但是如何在单个事务中插入多个记录? (它们都有不同的HTTP请求)
  2. 也许SQL服务器的不同配置可以改善性能?
  3. 也许SQL服务器机器需要更多的CPU /内存 - 我怎么知道这是否是bottelneck?
  4. 从业务逻辑方面来看,事务可以写成并行 - 我如何验证te SQL server配置是否未设置为逐个模式?
  5. 有人可以考虑在其他方向上改善这一点吗?

    有人可以推荐找到瓶颈的方法吗?

    谢谢!

1 个答案:

答案 0 :(得分:0)

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