簡體   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