문제

이미 데이터베이스에 이미 데이터베이스에 299GB의 JPEG 이미지를보고 및 대역폭 목적으로 썸네일 등가물로 얻었습니다.

나는 이미지를 다시 샘플링하는 사업을하기 위해 스레드 안전한 sqlclr 기능을 작성했습니다.

문제는 내가 그것을 실행할 때입니다 UPDATE 명령문 (Photodata 필드에서 Thumbdata 필드까지)은 하나의 프로세서 만 사용하여 이미지를 재 샘플링하여 레이스 조건을 방지하기 위해 선형으로 실행됩니다.

그렇다면이 데이터베이스 머신이 가지고있는 12 코어 및 PHAT RAID 설정을 어떻게 가장 잘 활용할 수 있습니까? 그것은 서브 쿼리를 사용하는 것입니다 FROM 업데이트 문의 조항? 이것이 이런 종류의 작업에 병렬성을 가능하게하는 데 필요한 모든 것입니까?

어쨌든 작업은 배치 당 약 4000 개의 이미지 (약 391k 이미지의 창문 쿼리)로 분할됩니다.이 기계에는 많은 자원이 있습니다.

도움이 되었습니까?

해결책

나도 Kragen2uk와 Onupdatecascade가 옹호하는 "라운드 로빈"방법론을 추천합니다 (투표하고 있습니다). 나는 CLR 루틴과 SQL Paralellism에 대해 짜증을내는 것을 읽은 것을 알고 있지만 지금은 무엇이되었는지 잊어 버렸습니다. 그러나 나는 그들이 잘 놀지 않는다고 생각합니다.

과거에 비슷한 작업에 대해 수행 한 비트는 수행 할 각 작업을하는 테이블을 설정하기 위해 비슷합니다. 발사되는 각 연결에 대해이 테이블로 이동하여 다음 배치를 게스트로 표시하고 처리중인 것으로 표시하고 처리하고 완료 한대로 업데이트하며 반복합니다. 이를 통해 성능을 측정하고 스케일링을 관리하며 다시 시작하지 않고 정지 및 재시작을 허용하며 작업이 얼마나 완전한 지 보여주는 내용을 제공합니다 (실제로 무엇이든하고 있음을 보여 주지는 않습니다).

다른 팁

SQL 서버에서 최대 병렬 처리 정도 (MaxDop)에 대한 구성 설정을 확인하십시오. MaxDop의 값을 설정할 수도 있습니다.

이 링크는 귀하에게 유용 할 수 있습니다 http://www.mssqltips.com/tip.asp?tip=1047

건배

쿼리를 배치로 분할하고 별도의 연결에서 각 배치를 별도로 실행할 수 있습니까? SQL Server는 느낌이들 때 쿼리에서 병렬 처리 만 사용하며, 병렬 처리 옵션에 대한 비용 임계 값을 O로 변경하여 중지하거나 (약간) 격려 할 수는 있지만 꽤 타격을 입었다고 생각합니다.

주목할만한 가치는 쿼리가 컴파일 될 때 병렬 처리를 사용하는지 여부 만 결정한다는 것입니다. 또한 CPU로드가 높을 때 쿼리가 컴파일되면 SQL Server는 병렬 처리를 고려할 가능성이 적습니다.

세트를 별도의 하위 집합 (1-100, 101-200 등)으로 나누는 몇 가지 기준을 찾은 다음 각 연결이 테이블에서 한 행의 하위 집합을 처리하는 동시에 여러 연결에서 업데이트 문을 호출하십시오. . 모든 연결은 병렬로 실행되어야합니다.

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