2010-05-21 2 views
24

로그 항목을 보관할 데이터베이스가 있습니다.NVARCHAR (MAX)와 비교할 때 SQL Server에서 XML 데이터 형식의 성능 저하는 무엇입니까?

로그 테이블의 열 중 하나에 직렬화 된 (XML로) 개체와 NVARCHAR (MAX) 대신 XML 데이터 형식을 사용하도록 제안 된 팀원이 있습니다. 이 테이블은 "영원히"보관 된 로그를 갖습니다 (나중에 매우 오래된 항목을 보관하는 것이 고려 될 수 있습니다).

CPU 오버 헤드가 조금 걱정되지만 DB가 더 빨리 성장할 수 있다고 걱정됩니다 (XML을 사용할 때 참조 된 질문에서 FoxyBOA가 70 % 큰 DB를 얻음).

나는 이것을 question으로 읽었으며 아이디어를 얻었지만 데이터베이스 크기가 증가했는지 감소했는지에 대한 명확한 설명에 관심이 있습니다.

귀하의 통찰력/경험을 말씀해주십시오.

BTW. 현재 SQL Server의 XML 기능에 의존 할 필요가 없습니다 (특정 경우 저에게 거의 이점이 없습니다). 때때로 로그 항목이 추출되지만 .NET을 사용하여 XML을 처리하는 것을 선호합니다 (작은 클라이언트를 작성하거나 .NET 어셈블리에 정의 된 함수 사용).

답변

32

XML이 있고 항상 XML이라고 확신 할 수 있다면 꼭 그렇게하는 것이 좋습니다. SQL Server는 XML을 최적화 된 형식으로 저장합니다. XML 인덱스를 사용하지 않아도 XML의 이점을 누릴 수 있습니다.

5KB XML의 5000 행을 XML 열에 삽입하면 대략 1250 페이지 = 9MB가됩니다. 동일한 5KB XML을 사용하여 동일한 5000 행을 NVARCHAR (MAX)에 삽입하면 3700 페이지 또는 29MB가 사용됩니다.

SQL Server에 저장된 XML 스키마와 XML을 연결할 수 있다면 그 차이가 더욱 분명해질 것입니다. 또한 저장된 XML이 스키마를 준수 함을 보증합니다 - 때때로 매우 유용 할 수 있습니다! 일반 NVARCHAR (MAX) 열을 사용하여이를 수행 할 수 없습니다 ...

그리고 NVARCHAR (MAX)에서 XML을 사용하면 성능 저하가 발생한다는 것에 동의하지 않습니다. 콘텐츠를 표시하거나 가져올 때 SQL Server에서 데이터를 덜 가져올 가능성이 있으므로 NVARCHAR (MAX)보다 훨씬 빠릅니다.

+1

하지만이 로그 항목, 그래서 그것은 훨씬 느리게 읽어했다하더라도 아마 당신은 (직렬화 된 객체가 큰 경우 상당한 수) 인덱싱 오버 헤드없이 쓰고 싶어? – MusiGenesis

+0

네, 물론 XML 전체를 보여줄 필요가있는 한 (로깅 항목을보아야 할 때) XML 인덱스는별로 도움이되지 않지만 오버 헤드 비용이 듭니다. –