'전체보기'에 해당되는 글 117건
- 2012.12.05 수줍던 볼터치
- 2012.10.10 [Windows] 메모리 부족 경고와 TrustedInstaller.exe
- 2012.10.05 [MSSQL] Parallel과 Sort 가 동시에 있을 때 발생하는 문제
- 2012.09.11 [MSSQL] Cross Apply
- 2012.07.15 쭈뿌쭈뿌 2
- 2012.07.14 꽃 쟁반 과 미식가 나비
- 2012.07.13 아우~~~~~~
- 2012.07.13 때론 그림같은 노을처럼...
- 2012.07.12 커피 한잔 어때요?
- 2012.07.11 부대 차렷! 2
디비 서버를 운영하다 보면 다음과 같은 경고 메시지를 가끔 보곤 한다
다른거야 그렇다 치고 TrustedInstaller.exe 요녀석이 평소에는 별 문제가 없는데 가끔 메모리와 CPU를 마구 먹는다
서비스에서 다음 서비스를 중지 시키면 되는데 중지 시키기 전에 시스템 관리자에게 먼져 꼭 물어보길...
뒷일은 책임 안진다.
프로세서나 코어가 2개 이상 있고 대량 처리 작업중에서 실행계획에 Parallel과 Sort가 있는 경우
그 순서가 보장되지 않는다.
MSSQL 2005와 2008, 2008R2에서 확인했던 내용인데 2012는 아직 확인해 보지 못했다
아마도 CPU에 일을 분할 할 때 문제가 발생하는 것 같은데 버젼이 바뀌어도 계속 발견되고
운에 따라 발생 안할 경우도 있고 해서 상당히 신경 쓰이는 문제다
해결 방법은 간단하게 MAXDOP 1 을 옵션으로 줘서 병렬처리를 막으면 정상 적으로 결과가 나온다.
'프로그래밍 > MSSQL\정보' 카테고리의 다른 글
[MSSQL] Cross Apply (0) | 2012.09.11 |
---|---|
[MSSQL] sqlcmd 응용 (0) | 2012.05.28 |
[MSSQL] Identity 컬럼 입력(SET IDENTITY_INSERT) (0) | 2012.05.10 |
[MSSQL] 정규식으로 특수문자 유무(문자열 패턴) 검사 (0) | 2012.05.04 |
[MSSQL] 원하는 순서로 정렬된 Identity 컬럼 추가 (0) | 2012.04.24 |
MSSQL2005 부터 생긴 Cross Apply 조인
아직 많은 테스트가 필요하지만 적당한 Index가 있을 경우 처리할 데이터를 상당히 줄여줘 성능 향상에 도움이 된다
(다른 경우도 마찬가지지만 더욱 큰 폭으로)
특히 해당 유저의 최근 기록 같은 류의 정보를 추출할 때 기존 방식의 경우 이를 다시 Self Join 하거나
문자열 조작으로 처리하곤 했는데
Self Join 의 경우 테이블을 두번 읽게 되고 문자열 조작의 경우 그 구문이 상당히 길어질 뿐더러 복잡해서 쉽게 사용 하기 힘들다
더군다나 SQL의 경우 (C, C++, C#, Java, 등등의)프로그램 랭귀지들 보다 문자열 처리에 느린 편이다
하지만 Cross Apply의 경우 비교적 간단한 구문으로 빠르고 유용하게 사용 할 수 있다
이는 유지보수도 쉬워서 내가 아닌 다른 사람이 주석 없이도 내용 파악이 쉽고 그만큼 실수를 할 가능성도 줄어듬을 의미한다.
조심할 점은 Nested Loop Join으로 풀어 나가니 대용량 처리에는 부적합 하고 이런 저런 테스트를 꼭 해봐야 한다는 것!
--기존방식 SELECT a.UID, b.RegDate FROM dbo.[User] AS a WITH(NOLOCK) INNER JOIN ( SELECT a.UID, MAX(a.RegDate) AS RegDate FROM dbo.[UserLoginLog] AS a WITH(NOLOCK) GROUP BY a.UID ) AS b ON a.UID = b.UID --Cross Apply SELECT a.UID, b.RegDate FROM dbo.[User] AS a WITH(NOLOCK) CROSS APPLY ( SELECT TOP 1 b.UID, b.RegDate FROM dbo.[UserLoginLog] AS b WITH(NOLOCK) WHERE a.UID = b.UID ORDER BY RegDate DESC ) AS b
테스트용 데이터 이기 때문에 데이터 량이 적지만 실제 서버의 엄청난 데이터를 생각한다면 그 차이는 더더욱 클 것이라 생각된다.
CREATE DATABASE TEST; GO USE TEST; GO CREATE TABLE dbo.[User] ( UID int ,Name varchar(10) ,CONSTRAINT PK_User_UID PRIMARY KEY(UID) ); CREATE TABLE dbo.[UserLoginLog] ( UID int ,RegDate datetime ,CONSTRAINT FK_UserLoginLog_User_UID FOREIGN KEY(UID) REFERENCES dbo.[User](UID) ); CREATE UNIQUE CLUSTERED INDEX UIDX_UserLoginLog_UID_RegDate ON dbo.[UserLoginLog](UID, RegDate); GO INSERT INTO dbo.[User](UID, Name) VALUES(1, '가나다'); INSERT INTO dbo.[User](UID, Name) VALUES(2, '라마바'); INSERT INTO dbo.[User](UID, Name) VALUES(3, '사아자'); INSERT INTO dbo.[User](UID, Name) VALUES(4, '차카타'); GO INSERT INTO dbo.[UserLoginLog](UID, RegDate) SELECT ROW_NUMBER() OVER(ORDER BY a.OBJECT_ID) % 4 + 1 AS UID, DATEADD(SS, ROW_NUMBER() OVER(ORDER BY a.OBJECT_ID), GETDATE()) AS RegDate FROM sys.objects AS a CROSS JOIN sys.objects AS b; GO
'프로그래밍 > MSSQL\정보' 카테고리의 다른 글
[MSSQL] Parallel과 Sort 가 동시에 있을 때 발생하는 문제 (0) | 2012.10.05 |
---|---|
[MSSQL] sqlcmd 응용 (0) | 2012.05.28 |
[MSSQL] Identity 컬럼 입력(SET IDENTITY_INSERT) (0) | 2012.05.10 |
[MSSQL] 정규식으로 특수문자 유무(문자열 패턴) 검사 (0) | 2012.05.04 |
[MSSQL] 원하는 순서로 정렬된 Identity 컬럼 추가 (0) | 2012.04.24 |
'사진 > 사진\스넵' 카테고리의 다른 글
잠시 쉬었다 가세 (0) | 2012.12.09 |
---|---|
모든것이 저물어 가는 시간... (0) | 2012.12.06 |
커피 한잔 어때요? (0) | 2012.07.12 |
부대 차렷! (2) | 2012.07.11 |
속도를 줄이시오 (0) | 2012.07.09 |
'사진 > 사진\풍경(삼각대)' 카테고리의 다른 글
꼭꼭 숨어라 머리카락 보일라 (0) | 2012.06.08 |
---|---|
어느 화창한 날에 (0) | 2012.05.25 |
텔레토비 동산 (0) | 2012.05.22 |
자연의 수묵화 (0) | 2012.05.02 |