데이터 검색을 수행하는 코드가 있습니다. 기본적으로 3 개에서 12 개의 SQL (oracle) read 문을 실행하여 객체에 대한 데이터를 검색합니다.다중 스레딩을 사용하여 SQL 문 실행
유감스럽게도 천천히 실행 중입니다. 특히 SQL 문이 없기 때문에 나는 그 중 많은 수가 있습니다. 문당 0.2 초 정도 걸리므로 코드 완성을 위해 2 초 이상 걸릴 수 있습니다.
나는 성능을 향상시키는 방법을 찾고있다. 한 가지 방법은 테이블 중 일부를 단일 쿼리로 병합하는 것입니다 (조합 된 결과를 0.5 초까지 줄일 수 있음). 그러나 특정 상황에서 데이터가있을 것이기 때문에 나머지를 병합하는 것은 의미가 없으며, 마샬링 할 데이터가있는시기를 결정하려고 할 때 까다로울 수 있습니다.
내 프로그램에 스레딩을 도입하려고합니다. 그래서 초기 쿼리 후에 다른 쿼리 각각에 대해 스레드를 생성하므로 동시에 실행됩니다. 그러나 나는 결코 쓰레딩을 사용하지 않았고 교착 상태 나 다른 구덩이에주의해야합니다.
현재 다른 쿼리는 결과를 SAME 개체의 여러 섹션으로 마샬링합니다. 이로 인해 문제가 발생 했습니까? 즉, 객체 내의 다른 섹션/필드를 통해 다른 스레드에서 같은 객체를 액세스/업데이트하고 있기 때문입니다. 모든 스레드가 완료된 후에 결과를 반환하고 개체로 마샬링하는 것이 더 좋을까요?
나는 이러한 유형의 질문이 일반적인 조언이 있기 때문에 대답하기가 어렵지만 누구나 그것이 좋은 생각이라고 생각하거나 다른 제안이 있다면 감사하겠습니까?
이것이 XY 문제인지 궁금합니다. 사실상 단일 주체에 대한 데이터를 얻으려면 3-12 왕복을 수행해야합니까? 이 질문을 단일 쿼리로 가져올 수없는 방식으로 데이터가 계층에 분산되는 이유는 무엇입니까? 입출력 문제에서 쓰레드를 던지는 것은 보통 그렇게 잘 작동하지 않습니다. – spender
그는 아직 IO 경계에 있지 않은 것처럼 보입니다. 스레딩은 어느 정도 도움이됩니다. – vav
단일 개체 인스턴스 당 3 ~ 12 개의 쿼리를 실행하는 것이 맞습니까? DB (100, 1000, 1000000, ...)에서 정상적으로로드 된 객체 수 – ThinkJet