SQL Server 2008 구현된 클라우드 기반 RDB 서비스인 SQL Azure 분산 데이터베이스로서 다수의 사용자 물리적 서버를 공유하는 multi-tenant 구조를 가지고 있다. 따라서 공유하는 물리적 서버 자원을 사용자가 독점하여 다른 사용자의 데이터베이스 성능에 지장을 주지 못하도록 모니터링하며 필요에 따라서는 데이터베이스 연결 자체를 끊는다. 이러한 SQL Azure Throttling 관해 공개된 정보가 있어 소개하고자 한다.

SQL Azure 데이터베이스 연결을 끊는 경우는 아래와 같다.

  • 세션이 1백만개 이상의 lock 사용할 ..
  • 로그 크기 1GB 이상 넘어가는 트랜잭션..
  • 로그 파일 기준으로, 커밋 안된 트랜잭션과 현재 트랜잭션 사이의 길이가 전체 로그의 20% 넘는 트랜잭션.. (장기 트랜잭션)
  • 시스템 운영에 필요한 리소스를 20 이상 잡고 있는 트랜잭션..
  • TempDB 크기가 5GB 넘는 트랜잭션..
  • 3번과 비슷한데, 메모리 경합(Memory contention) 발생시, 메모리 16GB 이상을 20 이상 잡고 있는 세션들이 있으면, 가장 오래된 세션부터 차례로..
  • SQL Azure 구독시 신청한 데이터테이스 크기를 초과할 경우, 요청된 Update/Insert 트랜잭션.. (ALTER DATABASE 명령으로 크기 변경 가능)
  • 데이터베이스 연결이 30분간 IDLE 상태인 경우 해당 데이터테이스 연결.. (커넥션 풀에 있을지라도)
  • 24시간 이상 경과하는 모든 트랜잭션..
  • DoS 방지 차원에서 같은 IP 주소로부터 반복되는 로그 실패 명령시 해당 IP 차단..
  • 머신 기준으로 CPU 사용량, IO 반응속도, 활성화된 worker 수가 정해진 수를 초과할 .. (busy worker 숫자 현재 300개로 세팅)

위의 여러 상황 가운데, 어느 경우에는 전혀 에러를 발생치 않는 경우도 있지만, 에러를 발생하는 많은 경우에는 서로 다른 에러 코드를 제공하기 때문에 SQL Server 대한 지식이 있다면 쉽게 에러를 알아낼 있다. 아울러 모니터링 기능이나 쿼리를 통해서 현재 상황을 알아내는 것도 가능하다.

에러 상황을 회피하기 위해 개발자가 있는 방법은 방어적인 프로그래밍이며, 글에 언급된 사항에 대한 상세한 설명이나 대처 방법, 코드 라이브러리에 대한 사항은 아래 원문을 참고하면 좋을 하다.

SQL Azure : Connection Management in SQL Azure

Posted by 장현춘
좀 지난 소식이긴 한데, SQL Azure가 공식적으로 JDBC를 지원하는군요.
마이크로소프트가 제공하는 SQL Server 2008 R2 및 SQL Azure용 JDBC 드라이버는 아래에서 다운로드 받으실 수 있습니다.
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ae924066-2946-40a7-93c6-c7e83f54072f&displaylang=en

- 위 드라이버로 접근 가능한 데이터베이스는 SQL 2000, 2005, 2008, 2008 R2 및 SQL Azure입니다.
- JDBC 4.0 compliant한 드라이버로서 JDK 5.0 이상에서 사용가능합니다.
- 제공하는 JDBC 드라이버가 Type 4이기 때문에 사용가능한 운영체제는 윈도우즈, 리눅스, 유닉스 등 JVM이 제공되는 것이면 가능합니다.
Posted by 장현춘

마이크로소프트의 Windows Azure Platform을 사용하기 위해서 Live ID가 필수이며, 모든 빌링은 이 계정 기반으로 청구가 된다. 하나의 계정을 통해 Windows Azure, SQL Azure, AppFabric 등 다양한 서비스를 Subscription할 수 있으며, SQL Azure인 경우 몇 가지 주의 사항이 있어서 두서 없이 정리하고자 한다.

1. 하나의 계정으로 다수의 SQL Azure를 Subscription할 수 있다.
2. 하나의 Subscription에는 하나의 SQL Azure Server만 생성할 수 있다.
3. 하나의 SQL Azure Server에는 최대 150개의 SQL Azure database를 생성할 수 있다. (master database는 필수이므로 사용자는 149개의 database를 생성할 수 있다.)
4. database 생성시 MAXSIZE로 지정한 한계에 다다르면 더 이상의 insert, update 등 실행시 에러를 발생시킨다. 하지만, read, truncate, drop 등은 가능하며, 공간 확보 후 insert, update 등은 약 15분 가량 후에 시도하여야 한다.
5. 이전과 다르게 이제는 SQL Azure database를 생성한 이후에, database 이름, database 크기, database 에디션을 변경할 수 있다.
ALTER DATABASE database_name
{
MODIFY NAME = new_database_name
|MODIFY (MAXSIZE = {1 | 5 | 10 | 20 | 30 | 40 | 50} GB)
|MODIFY (EDITION = {'web' | 'business'})
}
6. SQL Azure는 database 단위로 과금이 되고 날마다 요금 계산이 이루어져 매달 청구가 되는 구조로 되어 있다. 즉, 하루에 같은 이름의 database를 만들고 삭제하고 또 만들고 삭제하고 반복하면 만들 때마다 에디션에 따라 요금이 계산되어 한달 후에 청구가 된다. 즉, 같은 이름의 database일지라도 하루에 여러 번 만들면 궁극적으로 남은 건 하나의 database일지라도 요금은 만들 때마다 추가됨을 명심하자.
7. 현재 버전의 SQL Azure에서 cross-database 쿼리를 지원하지 않으며 USE (database) 명령어를 지원하지 않는다.
8. SQL Azure 구독시 사용자가 만든 database는 한 벌의 primary, 두 벌의 secondary replica로 복제되어 하나의 Azure 데이터센터 내에서 (Geolocation) 물리적으로 다른 세 대의 서버에, 세 개의 SQL Server database에 각각 분산되어 저장된다. SQL Azure Server란 이러한 분산 데이터베이스의 논리적인 묶음을 의미한다. 모든 사용자의 활동 등 가령, 읽고 쓰는 작업은 모두 Primary replica에서 발생하고, 나머지 secondary replica에 비동기로 싱크된다. 아래 그림에서 화살표가 있는 것은 사용자가 만든 Primary replica이며, 같은 색깔의 화살표가 없는 database가 바로 secondary replica를 의미한다. 만약 USE 명령을 허용한다면, USE를 써서 database를 바꾸는 순간 원하는 database가 물리적으로 다른 서버에 있을 가능성이 있기 때문에 그곳으로 연결이 재설정되어야 한다. 따라서 SQL Azure에서 USE를 허용하지 않는다.

9. SQL Azure는 대규모 data node로 구성된 분산 시스템으로 SQL Server 기반으로 구성되어 있으며, 각 data node는 하나의 SQL Server 인스턴스가 구동된다. 이 SQL Server 인스턴스에는 하나의 커다란 데이터테이스가 존재하는데, 이는 다시 650개의 파티션으로 구분되고, 아래 그림에서 처럼 각 파티션에는 SQL Azure에서 사용자가 생성한 primary replica 혹은 secondary replica가 하나씩 배정된다.  하나의 data node에 호스팅되는 650개의 파티션은 하나의 로그 파일을 공유한다.

10. SQL Azure에서 commit은 quorum commit 정책을 따른다. 즉, 모든 사용자의 읽고 쓰는 활동은 primary replica에 이루어지며 트랜잭션 커밋을 결정할 때는 primary replica와 적어도 하나의 secondary replica가 트랜잭션 로그가 정상적으로 기록되었다는 것을 보장해야만 트랜잭션이 commit된다. (거의 실시간으로 2PC가 이루어진다는 것인지... HA를 위해서 최소 두 개 머신에 로그를 남기는 것은 알겠는데, 실시간 2PC라면 부하가 만만치 않을 듯....)
11. 2010년 11월 기준 SQL Azure의 data node에 사용되는 서버 사양은 32GB RAM, 8 cores, 12 disks 으로 약 $3,500 짜리 중간 정도의 성능을 가진 머신으로 구성되어 있으며, 이는 Windows Azure에 사용되는 머신과 동일하여 서로 호환된다.
12. 고장된 하드웨어를 다른 것으로 교체하면서 그 안에 들어 있는 수많은 replica를 다른 머신에 살려내는 작업을 Reconfiguration이라고 하는데, 이를 위해 노드에 문제가 발생했다는 사실을 감지하는 체계가 있다. SQL Azure에 저장되는 사용자의 데이터는 한 개의 primary replica와 두 개의 secondary replica로 복제되는 데, HA를 위해서 이들 세 replica는 모두 서로 rack 스위치를 공유하지 않는 머신에 할당된다. 더 나아가 노드의 문제 발생을 감지하기 위해서 주변의 여섯 노드들이 서로를 감시하도록 되어 있는데, 이들 역시 rack 스위치를 공유하지 않도록 설계되어 있다. 즉, 특정 노드에서 문제가 발생할 시 주변 여섯 노드 (Neighbor) 중 어떤 것이라도 문제 발생을 보고하게 되며 이때 Partition Manager가 개입되어 해당 노드에 저장되어 있는 사용자의 replica들을 하나 하나 살려내는 작업이 진행된다. (하나 노드에 최대 650개의 파티션이 있으니, 작업량을 추측할 수 있다.)
13. SQL Azure는 HA를 위해 두 가지 기능을 제공한다. 하나는 Engine Throttling이며, 다른 하나는 Load Balancer이다. Throttling을 통해 SQL Azure는 하나의  SQL Server에 들어있는 수많은 replica들이 하나의 SQL Server 자원을 효율적으로 활용할 수 있도록 제한을 둔다. Engine Throttling 기능은 각 replica가 사용하는 로그 사이즈, 로깅 시간, CPU 사용률, 물리적인 database 사이즈 제한 등을 모니터링하게 된다. 특정 replica가 이 제한을 넘어서게 되면, 리소스를 공유하는 다른 replica를 위해 해당 replica의 읽기, 쓰기 접근을 10초간 거부한다.
14. SQL Azure의 디폴트 Isolation Level은 SQL Server와 마찬가지로 READ_COMMITTED이다. 또한, READ_COMMITTED_SANPSHOT과 ALLOW_SNAPSHOT_ISOLATION 옵션을 허락함으로써 SQL Azure는 READ_COMMITTED with Optimistic Concurrency가 디폴트 값으로 지정되어 있다. SQL Server의 디폴트 값인 READ_COMMITTED with Pessimistic Concurrency로 변경은 불가능하다. Isolation Level 변경은 커넥션에 대해 SET TRANSACTION ISOLATION LEVEL 명령을 통해 가능하다.

좀 더 상세한 정보는 아래 원문에서 확인할 수 있다.
http://social.technet.microsoft.com/wiki/contents/articles/inside-sql-azure.aspx


기타 아래 정보도 한번쯤 둘러볼 필요가 있다.
SQL Azure에서 지원하지 않는 SQL Server 기능들 : http://msdn.microsoft.com/en-us/library/ff394115(v=MSDN.10).aspx
SQL Azure 보안 가이드라인 : http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=4322517e-9d80-4ad3-8a75-bf0a10aa64d9

Posted by 장현춘

마이크로소프트가 며칠전에 SSMA for MySQL을 공개하고 MySQL 마이그레이션을 위한 본격 행보에 나섰다. 기존에 SSMA for Oracle은 널리 알려져 있어서 국내에서 많이 활용되고 있으며, 지난 2005년 공개된 이후로 현재까지 250,000회가 다운로드 된 것으로 집계된다. SSMA는 데이터베이스 마이그레이션시에 수반되는 수작업을 줄여주고, 혹 발생할 수 있는 리스크를 졸여주는 기능을 제공한다. 최근 지금껏  SSMA를 다운로드 받은 사용자를 대상으로 진행한 조사 결과, 94%의 사용자가 이 툴을 다른 사람에게 추천할 것이라고 응답했다. 이번에 공개된 SSMA for MySQL과 최신 버전의 SSMA for Access의 경우에는 SQL Azure로의 빠르고 쉬운 마이그레이션도 제공한다.

현재까지 공개된 최신 버전의 SSMA는 다음과 같다. 아래 각 링크는 각각 2005와 2008을 위한 파일을 하나씩 제공하고 있다.
1. SSMA for MySQL v1.0 : SSMA 2008 for MySQL 1.0.zip을 이용하면 SQL Azure로의 마이그레이션을 이용할 수 있다.
2. SSMA for Access v4.2 :  SSMA 2008 for Access 4.2.zip을 이용하면 SQL Azure로의 마이그레이션을 이용할 수  있다.
3. SSMA for Oracle v4.2
4. SSMA for Sybase v4.2

SSMA for MySQL v1.0은 MySQL 4.1 이상을 대상으로 한다. 이 툴을 통해 마이그레이션 되는 것들은 아래와 같다.
- Tables, Views, Stored procedures, Stored functions, Triggers, Cursors, DML statements, Control statements, Transactions

좀 더 자세한 내용은 아래 블로그를 참고하면 좋을 듯 하다.
1. SQL Server Team 블로그
2. Microsoft SQL Server Migration Assistant Team 블로그

Posted by 장현춘

이번주부터 시작된 TechEd 북미 행사에서 마이크로소프트 클라우드 서비스인 Windows Azure Platform 관련하여 몇 가지 주목할 만한 업데이트를 발표하였다.

1. Windows Azure Tools for Visual Studio 1.2
한마디로 Windows Azure를 사용하기 위한 SDK와 Visual Studio 플러그인이라고 볼 수 있으며, 새 버전에서는 .NET Framework 4.0 기반의 Windows Azure 애플리케이션을 만들 수 있다. 가장 눈길을 끄는 것은 로컬 Development Fabric에서 테스트를 마친 애플리케이션을 Windows Azure에 deploy시킬 때, 이전에는 Azure Portal 화면이 열리고 패키지를 수동으로 업로드했어야 하는데, 이 버전부터는 계정 관련 정보를 Visual Studio에서 설정해  두면 “Publish" 클릭시 자동으로 Windows Azure에 deploy가 되며, 이 과정 또한 Visual Studio 로그 창에서 진행과정을 볼 수 있다. 또한 Server Explorer에 Windows Azure 가 서버로 자동 등록되어 실시간으로 Windows Azure내의 내 계정 상황을 확인할 수도 있다.
azure tool
Windows Azure Tools for Visual Studio 1.2는 아래 링크에서 다운로드 할 수 있다.
http://go.microsoft.com/fwlink/?LinkID=128752
Windows Azure Tools for Visual Studio 1.2에 관한 추가 정보는 여기에서 확인할 수 있다.

2. SQL Azure 기능 추가
먼저,클라우드 상의 Relational Database 서비스인 SQL Azure 관련해서 용량 측면에서 이전부터 약속했던 기능이 추가되었다. 즉, 현재 1GB 짜리 Web Edition과 10GB짜리 Business Edition 밖에 없는데, 이제는 Web Edition에는 1GB외에 5GB짜리가 추가되고, Business Edition에는 50GB (즉, 10GB, 20GB, 30GB, 40GB, 50GB 단위로 과금)까지 확장이 가능하다. 과금은 과금 대상 기간중에 가장 peak시 용량을 기준으로 청구된다. 즉, 23GB를 썼다면 30GB 기준으로 과금이 된다.
또한 SQL Server에서와 마찬가지로 SQL Azure에서도 Spatial Data type이 지원된다. 따라서 위도, 경도 등의 정보를 함께 저장할 수 있어서 클라우드 상에 지리 정보 관련된 애플리케이션을 자주 볼 수 있을 것으로 기대한다.
위에서 언급한 SQL Azure 관련 추가 기능들은 6월 28일부터 사용 가능하며 SQL Azure 추가 기능에 대한 좀 더 상세한 설명은 여기에서 확인할 수 있다.

3. Windows Azure CDN
Windows Azure Blob을 사용하는 애플리케이션의 경우 Windows Azure CDN 기능을 사용할 수 있으며, 이 경우 전세계 19개의 CDN 전용 데이터센터가 활용되어 컨텐츠를 배포할 수 있어 좀 더 빠르게 사용자 요구를 수용할 수 있게 된다. 현재 마이크로소프트가 Windows Updat,e Zune Videos, Bing Map 등에서 사용하고 있는 CDN 관련 데이터센터를 Windows Azure Blog 사용자들에게 유료로 제공하는 것이다. 실제 많은 클라우드 애플리케이션이 CDN을 위한 별도의 비용을 지출하고 있는 상황에서 Windows Azure에서 제공하는 CDN 기능이 이를 대체할 수 있다면, 개발자 입장에서 더할나위 없는 선택이 될 것으로 기대한다.
blob 
Windows Azure storage 서비스에는 신청시 CDN 사용 체크 박스가 있으며, 서비스 중에도 위 그림에서처럼 CDN을 활성화시킬 수 있다. 이때 CDN 활성화 정보 전파에 60분 정도 소요된다는 팝업을 볼 수 있다.
이와 관련된 부가 정보는 여기에서 확인할 수 있다.

4. Data Sync Service for SQL Azure
이 기능은 현재 preview 상태로 공개된 것으로 다수의 SQL Azure 인스턴스 사이에 데이터를 동기화해주는 서비스이다. 이전부터 제공되는 것으로, 로컬 SQL Server와 클라우드 SQL Azure사이의 데이터를 동기화해주던 SQL Azure Data Sync와는 다른 것이다. 이 둘은 클라우드상의 Data Hub를 구상하는 큰 그림을 완성하는 각각의 퍼즐들이다. 이에 대해 좀 더 상세한 설명은 여기를 참조하면 좋을 듯 하다.

5. Windows Azure Platform Training Kit – June 2010 Update
실로 오랜만에 업데이트가 되었는데, Windows Azure에 관한 가장 방대한 자료를 담고 있으며, 개발자들이 쉽게 따라할 수 있는 HOL을 제공하고, 관련 동영상도 온라인을 통해 제공하고, 데모하는 사람을 위한 데모 킷들도 제공하고, 최신 Visual Studio 2010 기반으로 작성되는 샘플 코드까지 제공되고 있다. 따라서 Windows Azure Platform을 사용하여 클라우드 맛을 보고 싶은 개발자들을 위한 최상의 자료 모음집이라 할 수 있다.
Windows Azure Platform Training Kit – June Update는 여기에서 다운로드 받을 수 있다.

마이크로소프트의 클라우드 서비스 전반에 관한 정보는 http://azure.com 에서 확인할 수 있다. Windows Azure Platoform은 현재 전 세계 41개국에서 상용 서비스되고 있으며, 한국은 내년 상반기 중에 정식 서비스에 들어갈 예정이다.

Posted by 장현춘

클라우드상의 관계형 데이터베이스 서비스인 SQL Azure가 올 6월까지 업데이트 일정을 발표했다. SQL Azure는 마이크로소프트 SQL Server를 클라우드로 확장한 것으로 비지니스 도메인에 따라서 때로는 클라우드로, 때로는 로컬 데이터베이스를 사용할 수 있는 유연함을 제공하고 있다. SQL Azure 발표된 시점부터 많은 피드백이 있었고, 그 중 일부가 이번 업데이트를 통해 구현되었다.  아래는 서비스 업데이트 일정을 보여준다.

추가될 기능에는 다음과 같다.

1. 50 GB 데이터베이스  (SU3)
SQL Azure가 처음 공개될 당시부터 논란이 되었던 용량 제한 이슈를 어느정도 풀어줄 것으로 기대한다. 현재 1GB 스탠다드 버전과 10GB 비지니스 버전의 두 가지만 제공하고 있어서, 좀 더 큰 용량을 제공해달라는 피드백이 많았는데, 서비스 업데이트 3 시점에 맞추어 50GB 짜리 서비스가 제공될 예정이다.

2. SQL Azure OData 서비스 (Incubation)
MIX 키노트에서 시연한 것처럼 SQL Azure에서 곧바로 OData 프로토콜 형태로 서비스를 노출시킬 수 있다. OData는 REST 기반의 통신 기법으로 JSON, Atompub을 데이터포맷으로 쓰는 표준을 지향하는 통신 기법이라 할 수 있다. 현재 incubation 상태이며, SQL Azure Lab을 통해 사용해볼 수 있다.

3. 프로젝트 "휴스턴" (SU3)
지난 PDC09에서 소개되었던 클라우드 기반 데이터베이스 개발 도구인 "Houston"이 서비스 업데이트 3 시점에 맞추어 추가될 예정이다. 프로젝트 휴스턴은 리본바, Object Explorer 등을 갖춘 Silverlight 기반의 데이터베이스 도구로서 클라우드 상에서 동작한다. 프로젝트 휴스턴에 관한 좀 더 상세한 소개 및 데모는 PDC 세션을 참고하시길..

4. MARS (Multiple Active Result Sets) 지원 (SU2)
하나의 커넥션에 대해 다수의 Result Set을 열어 작업할 수 있는 기능을 서비스 업데이트 2 시기에 맞추어 지원한다는 방침이다.

5. Spatial type 지원 (SU3)
SQL Server 2008부터 지원하기 시작한 GEOMETRY/GEOGRAPHY 데이터 타입을 SQL Azure에서도 사용할 수 있게된다. GPS 관련된 시장이 커지고 지도를 이용한 서비스가 확산됨에 따라 관심을 끌게 될 것으로 보인다.

참고로, Windows Azure Platform AppFabric이 4월 9일을 시작으로 상용 서비스에 들어간다. 물론 현재 우리나라는 Windows Azure Platform 자체가 상용 서비스 대상 국가에서 제외되었긴 하지만, 전 세계적으로 Windows Azure Platform AppFabric 서비스는 상용화 서비스에 들어간다. AppFabric에 대해 테스트를 해보고 관련된 피드백을 전달할 수 있는 공간으로 AppFabric Lab이 있다.

Windows Azure Platform에 대한 좀 더 많은 정보는 공식 싸이트인 http://azure.com을 방문하시길..

Posted by 장현춘