감안할 때 : SQL Server 2008 R2. 일부 speedin 데이터 디스크를 종료하십시오. 로그 디스크 지연.대용량 삽입 성능 최적화 ...?
필수 : 많은 양의 삽입이 필요합니다. 초당 두 개의 인덱스가있는 간단한 테이블에 10.000 ~ 30.000 행이 있습니다. 인서트는 본질적인 순서를 가지며 반복되지 않습니다. 이러한 인서트 순서는 단기간 내에 유지되어서는 안됩니다 (즉, 여러 개의 평행 인서트는 괜찮습니다).
지금까지 : 데이터를 대기열에 누적했습니다. 정기적으로 (비동기식 스레드 풀) 대기열에 들어오는 작업 항목에 최대 1024 개의 항목을 비 웁니다. 스레드 풀 (사용자 정의 클래스)에는 32 개의 가능한 스레드가 있습니다. 32 개의 연결을 엽니 다.
문제점 : 성능은 300 배로 떨어지고 .... 초당 약 100-150 행이 삽입됩니다. 로그 대기 시간은 SQL Server에서 최대 40 % - 처리 시간 (초당 ms)의 45 %입니다. 서버 CPU 부하가 적습니다 (4 % ~ 5 % 정도).
사용할 수 없음 : 대량 삽입. 데이터는 가능한 한 실시간으로 디스크에 기록되어야합니다. 이것은 시스템을 통해 실행되는 데이터의 아키비스트 프로세스이지만, 데이터에 정기적으로 액세스해야하는 쿼리가 있습니다. 나는 그들을 디스크에 버리고 일괄 업로드를 사용하여 초당 1-2 번 시도해 볼 수 있습니다.
누구나 스마트 아이디어? 다음 단계는 로그를 빠른 디스크 세트 (128GB 최신 ssd)로 옮기고 그 다음에 어떤 일이 발생하는지 확인하는 것입니다. 상당한 성능 향상은 아마도 상당히 다른 일을 할 것입니다. 그러나 그럼에도 불구하고 .... 문제는 실현 가능한지 여부입니다.
그래서 멋진 아이디어를 발사하십시오.
에서 촬영? – Carth