[SQL Angeles] 2016-10-25 LA 한인 SQL Server 스터디 모임

[SQL Angeles] 2016-10-25 LA 한인 SQL Server 스터디 모임

 

SQL Angeles 커뮤니티는 정기적으로 화요일 8PM ~ 10PM (2시간) 스터디를 진행하며(장소 및 시간은 공식 홈페이지를 통해 공지 합니다.) SQL Server를 함께 공부하고 다양한 IT 트렌드를 공유하는 기술 및 네트워크를 공유하는 모임 입니다. SQL Angeles 스터디에 참여하고 싶은 분들은 카카오톡(ID : SQLMVP), 페이스북(https://www.facebook.com/sqlmvp) 메신저, email(jevida@naver.com) 등으로 연락 주시기 바랍니다.  스터디 장소의 출입이 자유롭지 못한 관계로 반드시 사전에 협의가 되어야 합니다.

 

스터디는 회원제로 운영되며 불성실 회원의 경우 회칙에 따라 참여 또는 기타 활동이 제한될 수 있습니다.

 

오늘의 주제는 SQL Server Internals 중 Storage 부분에 대해서 강성욱님께서 발표해 주셨습니다. 스토리지에서 사용되는 디스크의 종류, 성능에 대한 이야기, 스토리지 타입 및 RAID 구성 및 노하우 등 SQL 뿐만 아니라 일반적인 시스템 관점에서 자세하고 쉽게 설명해 주었습니다.

 

오늘 스터디는 6명이 참여하였습니다.

 

스토리지에 대한 세션은 2주에 걸쳐 진행될 예정이며 1주차에는 디스크에 대해서 자세히 살펴보는 시간을 가졌습니다. 2주차에는 실제 디스크에서 장애가 발생하였을 때 SQL 서버에서 발생할 수 있는 문제점을 공유하고 이를 해결하기 위한 방법에 대해서 다루도록 하겠습니다.

 

이번 발표는 한국의 SQLTAG 스터디(http://sqltag.org)에서 2012년에 발표했던 내용으로 LA 한인 SQL Server 스터디에서 한번 더 진행하게 되었습니다. 이번 발표를 하면서 느낀점은 2012년의 경우 SSD가 등장한지 오래되지 않은 시간으로 아직 SSD에 대한 정보 부족 및 도입에 대한 많은 고민(성능, 비용, 관리 등)이 필요한 시기였지만 4년이 지난 지금 SSD는 대중화 되었으며 성능 또한 그 시절에 비해 비약적으로 발전하여 그때의 트렌드 및 성능 자료가 많이 달라졌다는 것을 느낄 수 있었습니다. 물론 SQL Server 부분에서도 많은 변화가 있었지만 하드웨어 분야에 있어서는 너무 많은 발전이 이루어져 시스템 관점에서는 새로운 시대가 열린 듯 합니다. 기존에 DBA들이 많이 고민했던 부분들에 대해서 고민할 필요가 없어졌으며 튜닝에 대한 접근도 많이 달라져야 한다는 것을 다시 한번 느낄 수 있었습니다.

 

아래 이미지는 금일 진행했던 1차분의 발표 슬라이드 입니다. 2012년에 만들어졌던 자료로 다소 현재의 성능과 맞지 않은 부분도 있지만 전체적인 디스크에 대한 개념을 정리하는 차원에서 다루어보았습니다.

 

NCQ(Native Command Queuing)는 특정 상황에서 SATA장치의 성능을 향상시키기 위해 도입 되었다. IO 요청을 우선 Queue에 저장한 다음 전체 헤드의 움직임을 최소화 할 수 있도록 요청 순서를 재배열하는 방식이다. IO가 많이 일어나는 서버에서 주로 사용하는 방식이다. 최대 명령어 길이는 32(실제 31개)이다. SCSI에서 사용하였다.

 

DMA 33에서는40핀, DMA 66 이상에서는 80핀 사용. 이때 80핀에서도 신호 대역폭을 증가 하는 대신 신호 간섭 때문에 (1,3,5), (2,4,6) 이렇게 번갈아 가며 신호를 전송하였다. 이처럼 신호 간섭으로 인해 실제 병렬전송에서 좋은 성능을 나타내지 못하였다.

 

SSD는 기존의 마그네틱 플래터 대신 플래쉬 메모리를 사용한다. 기존의 하드 드라이브 경우에는 하드 드라이브는 회전하는 자기 플래터와 헤드가 드라이브에 내장되어 오른쪽 섹터로 움직인다. 요청이 들어오면 드라이브 헤드는 레코드 플레이어 위로 바늘을 움직인다. 하드 드라이브가 다른 플래터에 엑세스 해야하는 경우 지연이 발생한다. OLTP에서는 랜덤 액세스가 매우 중요하다. SSD는 이런 패널티가 없이 모든 데이터에 엑세스가 가능하다. 또한 진동에 민감하지 않다.

 

데이터센터 안의 수 백개의 하드 드라이브 랙에서는 진동과 소음이 발생한다. 이는 디스크의 성능을 떨어 저하시킨다. 실제 한 연구 결과에서는 하드 드라이브 랙에 소음을 가했을 경우 작업 지연의 원인으로 밝혀 졌다.

 

인터리빙은 연속 블록을 읽을 때 한 블록을 읽은 후 OS에 전달하고 다음 섹터를 바로 읽을 수 없기에 데이터를 일정한 블록 단위로 배치하여 결과를 수신하는데 걸리는 시간을 단축한 것이다.

 

 

Raid 5는 드라이브가 데이터의 동일한 부분을 공유한다는 점에서 RAID 0과 유사하지만 하나의 드라이브 실패로 전체 배열이 다운되지 않도록 패리티를 추가하여 데이터를 보호한다. 어느 한 드라이브가 실패하면 다른 드라이브에서 그 내용을 리빌드 한다. 패리티를 계산하는 것은 프로세서 집약적이라 데이터 쓰기를 할 때 여러 블록의 패리티 데이터를 만들기 위해 검사해야 하는데 이때 성능 저하가 발생한다. 최근에는 RAID 컨트롤러의 발달로 전문 프로세서가 빠르게 계산될 수 있도록 디자인 되었다. 예를들어 500G가 드라이브 4개가 있으면 실제 용량은 1.5테라 이다. 다른 드라이브가 추가되는 동안에도 배열을 유지 할 수 있으며 서버다운 없이 가능하다.  리스트라이프가 되는 동안 느려질 수 있으나 추가 스핀들로 인하여 성능이 향상된다. RAID5는 하나의 디스크 깨짐은 방지하지만 2개 이상일때는 보호할 수 없다. RAID6은 2개까지 가능하다. SATA처럼 큰 디스크에서는 리빌드 시간이 오래 걸릴 수 있다.

 

파티션 정렬은 추가 비용 없이 스토리지를 향상 할 수 있는 가장 쉽고 효과적인 방법이다. DBA는 하드웨어 구성이나 스키마 변경없이 작업이 가능하다. 아래 그림에서 상단 파티션은 정렬되어 있지 않아 데이터가 여러 섹터에 걸쳐 있기 때문에 페널티를 얻게 된다.

 

윈도우 2008 부터는 새로운 파티션은 자동으로 오프셋이 1024로 작동한다.2008 이전의 경우에는 수동으로 정렬 해 주어야 한다. 이때 방법은 아래의 4가지로 정의 할 수 있다. 이 작업은 다운타임을 필요로 한다. 따라서 기존 서버보다 새로 추가되는 서버에 도입하면 좋을 듯 하다.

 

 

SQL Server에서 가장 손쉽게 성능을 얻을 수 있는 방법은 MS의 권장 가이드대로 64K를 지정하는 방식이다. 그러나 일부 경우데 따라 다르게 지정 해야한다 OLTP에서는 8킬로의 작은 단위가 성능에 이익이 있을 수 있다. 포맷을 한 후에는 설정을 변경할 수 없다.

 

하드디스크는 데이터를 저장하는 기본 단위로 섹터를 사용한다. 하드디스크는 기본 저장소 격인 섹터가 여러 개 모인 큰 덩어리인 셈이다. 보통 하드디스크 섹터는 512B로 나뉘어져 있고 섹터마다 에러 수정 코드 ECC를 하나씩 갖고 있다. 4k 어드밴스드 포맷이란 섹터 8개를 합치고 ECC를 하나만 단 걸 말한다. 4k란 명칭은 512B 8개를 합한 4,096B를 섹터 단위 하나로 붙여져서 생긴 말이다. 4k 포맷을 쓰면 ECC가 차지할 자리가 줄어 하드디스크의 물리적 공간은 7∼8% 늘어난다. 같은 용량이라도 포맷 기술 차이 하나로 실제로는 더 많은 데이터를 담을 수 있게 되는 셈이다. 또 액세스 횟수까지 덩달아 줄어 하드디스크 속도까지 빨라지는 효과를 볼 수 있다. 여러 번 액세스하면 에러 발생 확률도 높아지기 마련인데 섹터 단위를 크게 묶어 이 문제를 해결한 것이다.

 

다음 주에는 디스크 성능을 테스트하기 위한 툴 소개 및 디스크 커럽션, 장애 유형 및 해결 방안에 대해서 공유하도록 하겠습니다. 오늘도 늦은 시간까지 스터디 하시느라 고생 많으셨습니다.

 

2016-10-25 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

LA 한인 SQL 스터디 모임, LA IT 모임, DB 스터디, SQL 스터디, SQL Server, DB 스터디, LA SQL Server, sqlmvp, SQL Angeles

 

 

Leave a Reply

%d bloggers like this: