퇴근할라는 김 모 수석 붙잡고 나눈 대화중 건질만한거 몇가지.
김 수석/네. 대용량에서는 그렇게 해야됩니다. 클러스터 인덱스 잡는거 한방에 실행시키는거는 원 트랜잭션이고 엄청나게 데이터가 클때 트랜잭션 로그도 많이 쓰고 소팅하는데 디스크도 많이 잡아먹습니다. 병렬로 쪼개서 읽어서 부으면 제일 좋지요. 하지만 bulk insert 베스트 프랙티스에서 이야기하는 것처럼 클러스터 인덱스 순으로 데이터를 부어도 공간이 연속적으로 할당되지 않을 가능성도 크고, 병렬로 부으면 데이터 들어가는 순서가 클러스터 인덱스 순서로 들어간다는 보장이 없으므로 클러스터 인덱스 빌드 속도는 생각보다 빠르지 않을 수 있습니다. 그래도 create clustered index 문 날리는 것보단 훨씬 빠릅니다.
BI나 DW같은 플젝할때는 대량 데이터 옮길때 저렇게 하는게 당연한데, 제가 삼성생명 플젝 할 때 메인프레임에서 내려온 데이터가 1조개였습니다. (흐어.. 1조!!! -_-) 이걸 저렇게 쪼개서 밀어넣었죠.
그리고 bulk insert 할 때 여러개를 완전히 동시에 돌리진 마십시오. 잘못하면 bulk insert api 콜할때 경합이 생겨서 한두개가 실패할 수도 있습니다. 1분정도 시차를 두고 돌리는게 안전합니다.
김 수석/네 가능합니다. 원래 sp 가 먼저 나온거고 옵티마이저는 sp 를 최적화하는 것을 가정하여 만들어져 있습니다. 그런데 sp_executesql 은 ad-hoc 을 sp 처럼 돌도록 하기 위해서 흉내를 내주는건데, 그게 sp 를 최적화하는거하고 완전히 똑같지는 않습니다(어떻게 다른지는 자세히 설명하지 않음. 설명해도 못알아들었을것임-_-) 그래서 실행계획이 다르게 나올 수 있습니다. 중요한 업무에는 sp를 분기해서라도 sp를 쓰시고 중요하지 않은 업무에서는 sp_executesql 을 쓰세요.
쥔장/앗. 제가 보니까 JDBC로 SQL2000 에 붙을 때 DB에서 보면 인풋버퍼가 sp_executesql;1 로 다 찍히던데 이렇게 되면 잘못하면 실행계획 엉뚱한거 만들어져서 난리가 날 수도 있겠네요???
김 수석/네 그렇지요. 대단히 복잡한 SQL을 JDBC로 매우 자주 날리면 완전 쥐약입니다.
쥔장/MS에서 나온 JDBC 드라이버 써도 그래요?
김 수석/네
쥔장/그럼 Java는 Oracle하고만 써야되나요?
김 수석/Oracle하고 붙여도 썩 좋지는 않습니다. Oracle은 OCI Call로 들어오는게 최선인데 JDBC는 범용적으로 돌아가게 만들다보니 별로입니다
(음.. 그런데 이건 좀 아닌것같기도... 예전에 얼핏보니 JDBC콜이 OCI콜로 변환이 되는 Oracle 드라이버가 있었던 것 같은데... 내가 자바를 잘 모르니 패스~ 아시는 분은 댓글로 좀 달아주세요...)
쥔장/ 오옷...
쥔장/오옷....
쥔장/오옷....
쥔장/오옷....
(LOCK 메카니즘에 대한 깊은 이해가 없어서 진위를 판단하기 힘들었음. 누가 아는 사람 없나요??? )
(근데 리소스를 고갈시키는 넘은 뭐가 될지 모르기 때문에 그게 문제. DB내부의 서버 프로세스라면 sysprocesses 에서 보이긴 하지만 DB에 액세스하는 서드파티 솔루션이라던가... 뭐 그딴 넘이라면 블러킹에 잡히지도 않고 그저 주변 상황보고 판단하는 수 밖에 없는데 실제 장애가 벌어진 상황에서 그걸 재빨리 판단하기란 쉽지 않다.. -_-)
김 수석/사실 저희들도 그 이상 되는 자료들은 쉽게 접하기 힘듭니다. 내부적으로 100, 200, 300, 400 레벨 교육이 있는데 Inside SQL Server 2005 시리즈 책들은 200~300 레벨 정도 됩니다. MS본사 엔지니어들 블로그의 글들은 그보다는 좀 높구요. 400레벨 정도 되는 것은 일단 굉장히 어렵고 특허나 지적재산권에 관련된 것들이 많아서 외부에 공개가 안됩니다. 공개된 자료를 모두 다 깊이 이해하는 것도 그렇게 만만한 일이 아닙니다.
김 수석/연봉 산정할 때 경쟁사로 생각되는 회사 10개사의 평균연봉을 구하고 언제나 6위에 위치하도록 합니다. 경쟁사는 어떤 회사가 될지는 알 수 없습니다. MS에 들어오면 얻는 거는 회사 이름값밖에 없습니다. ^^
(한국MS매력도 급감 ㅋㅋㅋㅋ)
Posted by maceo




