버스트 사용량에 대한 IO 요구 사항 추정


11

우리는 하루 종일 주기적으로 SQL 데이터베이스를 쿼리하는 응용 프로그램을 가지고 있습니다. 상대적으로 많은 양의 데이터에 대한 개별 요청과 함께 산재 해 있거나 활동이 적은 기간이 있습니다. 이러한 요청이 들어 오면 기본 목표는 데이터를 빠르게 전달하는 것이며, 보조 목표는 비용 효율적으로 수행하는 것입니다. 응용 프로그램의 특성상 데이터 / 인덱스가 이전 쿼리 (데이터의 다른 부분에서 작업하는 다른 사용자)의 RAM에 캐시되어있을 가능성은 거의 없습니다.

비교적 꾸준한 사용 경험이있는 시스템의 경우 디스크 큐 길이를 관찰하고 그 수를 상대적으로 작게 유지하는 경험이 있습니다. 이것은 특히 AWS에서 실행되며 100 IOPS 당 1의 디스크 큐 길이가 합리적이라는 경험을 보았습니다.

그러한 시스템의 IO 요구 사항을 어떻게 추정 할 수 있습니까? 개별적이고 복잡한 쿼리를 처리 할 때 디스크 큐 길이가 신뢰할 수있는 지표입니까? 고려해야 할 다른 메트릭이 있습니까?


쓰기 작업이 진행 중입니까, 아니면 읽기 작업이 많습니까?
잭 topanswers.xyz 시도라고

@JackDouglas :이 수치는 98 %입니다. 쓰기의 물방울이 있습니다.
Eric J.

1
다음 질문 : 읽기가 흩어져 있거나 "상대적으로 많은 양의 데이터에 대한 개별 요청"이 순차적 IO를 수행 할 가능성이 있습니까?
Jack은 topanswers.xyz를 시도해

@JackDouglas : WHERE 절이 인덱스에 해당하지만 인덱스에있는 것보다 더 많은 데이터를 반환하도록 인덱싱 된 뷰를 통해 가장 많이 읽습니다. 그것이 순차적 IO의 정도에 어떤 의미가 있는지 잘 모르겠습니다. 기본 IO 하위 시스템이 AWS EBS이므로 물리적 액세스에 어떤 영향을 미치는지 잘 모르겠습니다.
Eric J.

기본 IO 서브 시스템은 성능의 일관성에 영향을 미치지 만 로컬 스토리지와 유사한 방식으로 흩어진 v 순차 액세스를 처리합니다. 큰 읽기, 일반적으로 몇 개의 별개의 블록이 충돌합니까? 인덱스 스캔 자체는 순차적이지만 지금까지 올바르게 이해했다면 테이블 액세스가 불가능합니다.
잭 topanswers.xyz 시도 말한다

답변:


10

SQL Server에서 IO에 대해 항상 고려한 기본 메트릭은 IOP 또는 디스크 큐 길이가 아니라 디스크 처리량 (초 / 읽기 및 초 / 쓰기)입니다. 전반적으로 데이터베이스는 디스크에서 얼마나 많은 작업을 처리 할 수 ​​있는지가 아니라 이러한 작업이 얼마나 빨리 완료되는지에 관한 것입니다. 일반적인 경험 법칙은 20ms / 조작 미만이어야합니다 (낮은 것이 항상 더 낫습니다). 자세한 내용은 이 기사를 참조하십시오 .

디스크 대기열 길이는 가짜 통계이며 더 이상 관련이 없습니다. 문제는 값이 단일 드라이브의 대기열을 측정하지만 이제는 RAID, SAN 및 기타 분산 스토리지의 시대에 살고 있기 때문에이 값을 의미있는 숫자로 올바르게 변환 할 수있는 방법이 없습니다. Quest / Dell 의이 포스터 는 성능 지표의 훌륭한 출발점 으로 중요한 이유 또는 이유에 대한 많은 정보와 설명을 제공합니다. 당신은 그들 모두를 사용할 필요는 없지만, 그들은 시작입니다.

IO를 테스트하려면 작업 부하가 최대인지 이해해야합니다. 얼마나 많은 트랜잭션과 캐시가 있습니까? 이것을 알고 측정하지 않으면 판단하기가 정말 어렵습니다. 워크로드를 작성하고 SQLIO 와 같은 도구를 사용 하여 스토리지를 테스트 할 수 있지만 적절한 테스트를 빌드하려면 워크로드 패턴이 필요합니다.

마지막으로 AWS에 대한 참고 사항 : Amazon은 AWS에서 IO 성능을 보장하지 않습니다. 이는 주로 스토리지가 방대한 공유 리소스이기 때문에 특정 스토리지 영역에서 사용자와 이웃의 패턴을 측정 할 수 없기 때문입니다 ( Noisy Neighbor 문제 참조 ).

가능한 한 많은 메모리를 할당하는 것이 좋습니다. SQL Server는 LRU-K를 기반으로하는 버퍼 풀의 공간과 압력이있는 경우에만 메모리에서 항목을 밀어냅니다. 따라서 버퍼 풀이 대부분의 데이터베이스를 메모리에 저장할 수있는 경우 일부 성능 저하를 완화 할 수 있습니다. 또한 캐시 개체를 "따뜻하게"유지할 수있는 전술을 고려하십시오. 마지막으로, SQL 2014 및 새로운 Hekaton 기능을 주시하십시오 .


"압력이 가해지면 SQL Server가 메모리에서 항목을 밀어냅니다"또는 체크 포인트 ?
잭 topanswers.xyz 시도 말한다

5
검사 점은 버퍼에서 개체를 제거하지 않지만 복구를 위해 더티 페이지를 디스크에 씁니다. 여전히 버퍼 풀에서 오브젝트를 유지 보수합니다.
Mike Fal

자세한 답변 감사합니다. AWS는 이제 프로비저닝 된 IOPS라는 프리미엄 기능을 통해 구매 한 초당 IO 작업 수를 99.9 %의 시간 동안 수행 할 수 있습니다. IO 작업은 16K 데이터 블록을 읽거나 쓰는 것으로 정의됩니다.
Eric J.

@ MikeFal :이 파열 패턴에 대한 테스트 방법에 대한 생각이 있습니까? 하나의 쿼리를 실행하고 문제의 카운터를 보시겠습니까? 카운터를 보면서 (정기적으로 주기적으로) 여러 쿼리를 실행합니까?
Eric J.

네, 저는 PIOPS에 익숙합니다. 내가 말했듯이, 얼마나 많은 작업을 수행 할 수 있는지 알고 싶지 않고 얼마나 빠른지 알고 싶습니다. 그리고 이것은 PIOP에서도 AWS가 보장 할 수있는 것이 아닙니다.
Mike Fal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.