SQL Server 2K / 2K5 / 2K8 및 솔리드 스테이트 디스크 : 특정 최적화?


9

솔리드 스테이트 드라이브에서 SQL Server를 실행중인 사람이 있습니까? 특정 최적화 팁을 찾았습니까? 특히 SQL Server가 SSD 성능, 특히 MLC SSD 드라이브의 중요성이기 때문에 작은 임의 쓰기 작업을 수행하는 빈도를 줄이는 방법에 관심이 있습니다.

물론 읽기 가능한 많은 데이터를 SSD에서 제공해야하며 쓰기가 많은 데이터는 기존의 회전 디스크에 남겨 두어야합니다. 여기에는 자연스럽게 트랜잭션 로그가 포함됩니다!

물론 충분한 예산이 있다면 X25-E 또는 Vertex Ex 시리즈와 같은 SLC SSD 디스크 또는 다양한 엔터프라이즈 급 제품을 사용하고 싶을 것입니다. 그러나 MLC SSD 설정에 도움이 될 수있는 팁에 관심이 있습니다. 나는 그것이 흥미로운 영역이라고 생각합니다. 내 고객의 고객 중 하나는 예산이 적고 데이터 세트가 엄청나게 커졌으며 적절한 수준의 성능을 유지하기 위해 수백 건에 가까운 쿼리를 완전히 다시 작성해야합니다. 그러나 나는 500 달러 미만의 RAM과 SSD 공간으로 인해 개발자 시간이 수천 달러 (수만 달러)보다 더 큰 성능을 얻을 수 있다고 의심합니다.

답변:


3

SQL Server에서 수행하는 작은 임의 쓰기의 양을 줄이면 무슨 의미인지 알 수 없습니다. SQL Server는 검사 점 중에 만 데이터 페이지를 작성하므로 쓰기 수를 제한하는 유일한 방법은 검사 점 간격을 변경하거나 IUD 작업이 많지 않은 것입니다. 다른 의미가 있었습니까?

내가 본 (소수의) SSD의 모든 구현에서, 그것은 당신이 제안하는 것과 반대입니다 .SSD를 가장 많이 사용하는 것은 쓰기가 많은 트랜잭션 로그와 tempdb에 대한 것 같습니다-기본적으로 가장 큰 곳은 어디입니까? / O 하위 시스템 병목 현상이 발생하여 SSD를 고정시킵니다. 탐색 시간과 대기 시간이 낮게 유지됩니다.

MS가 생산 한이 연구 보고서를 확인하십시오 (불행히도 SQL Server 관련 사항에 대해서는 자세히 설명하지 않음) : 서버 스토리지를 SSD로 마이그레이션 : 트레이드 오프 분석 .

도움이 되었기를 바랍니다!


MS의 기사 링크를 주셔서 감사합니다. 구체적으로는 실망스럽지 않습니까? :) 불행히도 작은 무작위 쓰기는 실제로 SSD에 적합 할 수있는 것입니다. 간단히 말해서, 작은 쓰기 (4KB) 쓰기에도 SSD는 전체 블록을 메모리로 읽고 수정 한 후 다시 써야합니다. 현재 세대 플래시 메모리가 작동하는 방식입니다. 훌륭한 SSD 개요 기사 : anandtech.com/storage/showdoc.aspx?i=3531&p=1
John Rose

2

SQL Server IO 특성을 수정할 수 없습니다. 데이터 파일의 기본 디스크 액세스 단위는 8Kb 페이지입니다. 주로 체크 포인트 동안 작성하지만 가능하면 지연 작성합니다.
SQL은 리턴하기 전에 데이터 디스크에 대한 쓰기가 완료되기를 기다리지 않고 완료해야하는 것은 로그 쓰기입니다. 디스크에 하나의 데이터베이스 로그 만 보관할 수있는 경우 순차적으로 기록되며 일반 고속 하드 디스크에서는 정상입니다.
SQL 관점에서 볼 때 성능 저하는 디스크를 읽어야 할 때입니다. 더 많은 메모리를 제공 할 수 있다면 SQL은 더 많은 데이터 페이지를 메모리에 보유합니다. 이는 모든 종류의 디스크, SSD 또는 그 밖의 것보다 빠릅니다. 적절한 색인을 작성하여 디스크 읽기 수를 줄일 수도 있습니다. 나는 SSD가 이러한 읽기에 도움이 될 것으로 기대합니다. 왜냐하면 드라이브 헤드가 움직일 때까지 기다릴 수 있기 때문입니다.
여기서 말하는 데이터베이스 크기를 모르지만 HyperOS를 살펴보고 싶을 것입니다. 그들은 실제로 SSD 또는 2.5 인치 디스크를 백업으로 사용하여 실제로 DDR2 램 스틱의로드 인 sata 디스크를 만듭니다. 서버의 액세스 패턴은 문제가되지 않습니다. 나는 이런 식으로 로그를 넣지 않을 것입니다. 로그는 데이터를 일관되게 유지하는 것으로 신뢰할 수있는 매체로 이동해야하며 백업 SSD 및 배터리에도 불구하고 서버에 UPS 등이있을 수 있지만 실제 하드 디스크에 로그가없는 것이 여전히 불편할 것입니다. 어떤 종류의 내결함성 RAID 어레이.


1

작은 무작위 작업은 헤드 디스크 검색 대기 시간으로 인해 기존 디스크의 핵심입니다. SSD는이 문제를 정확하게 해결합니다.

긴 순차적 작업으로 표준 디스크의 성능이 뛰어나므로 SSD를 사용하는 데는 아무런 목적이 없습니다 (물론 성능 관점에서).


2
SSD는 거의 제로 탐색 대기 시간으로 인해 임의 읽기 작업에서 환상적입니다. SSD 쓰기 작업에는 전체 플래시 블록 (일반적으로 128KB)을 읽고 내용을 수정하며 전체 블록을 플래시에 다시 쓰는 것이 포함되어 있기 때문에 임의 쓰기 작업에 대한 부담이 적습니다. 긴 순차적 작업과 관련하여 더 나은 소비자 수준 SSD (Intel, OCZ Vertex, Samsung)는 단일 회전 디스크가 생성 할 수있는 것보다 훨씬 빠른 200MB / sec 이상의 읽기 및 80MB-150MB의 쓰기를 달성합니다.
존 로즈

확실해? 쓰기 작업이 데이터 블록을 다시 쓰기 전에 읽어야하는 이유를 이해하지 못합니다. 기록 될 데이터는 컴퓨터의 메모리에 있어야합니까?
Massimo

2
@Massimo : OS가 몇 바이트 만 쓰지만 SSD는 128KB (대개) 단위 (페이지) 단위로 작동하기 때문입니다. 128KB의 페이지 만 쓸 수 있으며 그 이하도 아닙니다. 따라서 페이지 중간을 수정하면 드라이브가 전체 페이지를 읽고 중간을 업데이트 한 다음 일반적으로 다른 위치에 새 페이지를 쓰면서 이전 위치를 무효화합니다.
Cristian Ciupitu

크리스티안 시우 투투가 맞습니다. 일부 SSD의 경우 이는 온보드 캐시 (Indilinx 컨트롤러를 사용하는 모든 드라이브에는 64MB의 캐시가 있음)와 운영 체제의 쓰기 캐싱 (활성화 된 경우)에 의해 완화됩니다. 64MB 캐시조차도 많은 쓰기 작업을 수행하는 데이터베이스 서버의 경우 64MB로 충분하지 않을 수 있습니다. 펌웨어 제조업체는 많은 세부 사항을 발표하지 않지만 더 나은 펌웨어 (Intel, Indilinx)는 128KB 페이지 내에서 작은 임의 쓰기를 유지하기 위해 지능적인 재정렬 / 배치를 수행 하여이 오버 헤드를 최소화한다고 가정합니다.
John Rose

캐시에 대한 나의 이해에서, 당신이 걱정하는 작은 글을 많이 저장할 것입니다. 데이터베이스는 많은 선형 읽기 / 쓰기를 수행하도록 설계 되었기 때문에 그다지 중요하지 않습니다. SSD는 순차적 읽기가 아니라 선형 읽기 때문에 여전히 더 잘 작동 할 것이라고 확신합니다. 데이터와 SSD 사이에 여전히 틈이있어 탐색 시간을 제거한다는 의미입니다.
Pyrolistical

0

아직 주석 스레드에 추가 할 점은 없지만 SSD의 모든 페이지 크기 / 다중 읽기 수를 SSD의 페이지 크기의 배수로 설정하면 문제가되지 않습니다.

오랫동안 SQL Server에서 작업하지 않았으므로 이러한 옵션을 사용할 수 있는지 확실하지 않습니다. 지난 몇 년 동안 Oracle과 DB2를 해왔으며 DB가 디스크 특성에 맞게 조정되므로 문제가 해결 될 것입니다.


0

데이터베이스 파일이 저장된 파티션을 정렬하는 것이 좋습니다.

또한 perf (ldf 및 TempDB)에 대해 RAID 0에서 수행 할 작업을 결정하고 RAID 1 (mdf)에 중요한 데이터를 배치하는 것이 좋습니다.

셋째, SATA 컨트롤러 펌웨어 / 드라이버뿐만 아니라 드라이브의 펌웨어도 업데이트해야합니다. 그렇게하면 하드웨어 회사와 개발자가 성능을 최적화 할 수 있습니다.


데이터베이스 서버에 RAID 0을 사용해서는 안됩니다. 단일 드라이브에 장애가 발생하면 디스크를 교체하고 누락 된 데이터를 테이프에서 복원 할 때까지 데이터베이스가 다운됩니다 (로그 포함).
mrdenny

돈이 문제가되지 않는 세상에서는 모든 것이 배터리 지원 L1 캐시에서 실행되어야합니다. 금융 업계에서 LDF 파일은 mdf만큼 중요합니다. 과학 컴퓨팅의 경우 MDF는 실제로 100 % 여야하는 유일한 파일입니다.
GregC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.