응용 프로그램의 Mulitple 스레드에서 데이터베이스에 대한 여러 연결이 쿼리 삽입 성능을 증가시킬까요?

StackOverflow https://stackoverflow.com/questions/605607

문제

여기서 저는 수천만 레코드가 포함 된 데이터베이스를 다루고 있습니다. 데이터베이스에 연결하는 응용 프로그램이 있고 테이블의 단일 열에서 모든 데이터를 가져오고 일부 작업을 수행하고 (커서를 사용하여 SQL Server의 경우) 업데이트합니다.

수백만 레코드의 경우 업데이트하는 데 오랜 시간이 걸립니다. 그래서 나는 그것을 더 빨리 만들고 싶다

  1. 각 스레드에 대해 독립적 인 연결로 여러 스레드를 사용합니다.

또는

  1. 모든 스레드 전체에서 단일 연결을 사용하여 업데이트 쿼리를 발사합니다.

어느 것이 더 빠르거나, 다른 아이디어가 있다면 plz가 설명합니다.

데이터베이스 유형과 무관 한 솔루션이 필요하거나 각 유형의 DB에 대한 특정 솔루션을 알고 있더라도 응답하십시오.

도움이 되었습니까?

해결책

달성하려는 속도는 작동하지 않습니다. 반대로 데이터베이스가 여러 연결/세션/트랜잭션을 동기화해야하므로 전체 처리 속도가 느려집니다.

반복적이고 비슷한 운영을 위해 가능한 한 적은 연결/거래를 유지하십시오. 취향에 너무 오래 걸리면 쿼리를 어떻게 든 최적화 할 수 있는지 분석하십시오. 또한 문제에 적합한 데이터베이스 별 확장 (IE 벌크 작업)을 살펴보십시오.

다른 팁

모두 데이터베이스와 실행중인 하드웨어에 따라 다릅니다.

데이터베이스가 동시 처리를 사용할 수 있고 공유 리소스에 대한 경합을 피하면 (예 : 페이지베이스 잠금 장치는 여러 레코드에 걸쳐 있으면 레코드 기반은 그렇지 않습니다). 이 경우 공유 리소스에는 하드웨어가 포함되며, 단일 코어 박스는 여러 CPU 집중 활동 (예 : SQL)을 병렬로 실행할 수 없습니다.

네트워크 대기 시간은 데이터베이스 자체가 동시성을 이용할 수 없더라도 동시 인서트로 완화하는 데 도움이 될 수있는 것입니다.

성능에 대한 질문과 마찬가지로 특정 시나리오에서 테스트를 대신 할 수 있습니다.

가능한 경우 저장된 절차를 사용하여 모든 처리를 수행하고 레코드를 업데이트하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top