繁体   English   中英

从不同线程在SQL Server上快速多次插入

[英]Fast multiple Insert on SQL server from different threads

我有一个项目,涉及从多个设备(数千个)记录数据-设备每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 Server配置可以改善性能?
  3. 也许SQL Server计算机需要更多的CPU /内存-我怎么知道这是否是bottelneck?
  4. 从业务逻辑的角度来看,事务可以并行编写-如何验证SQL Server配置未设置为一对一模式?

有人可以考虑从其他方向改进它吗?

有人可以建议找到瓶颈的方法吗?

谢谢!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM