수줍던 볼터치

2012. 12. 5. 14:00 from 사진/사진\접사



'사진 > 사진\접사' 카테고리의 다른 글

쭈뿌쭈뿌  (2) 2012.07.15
꽃 쟁반 과 미식가 나비  (0) 2012.07.14
맥주한병 어때?  (0) 2012.07.10
빛이 깃들때...  (0) 2012.07.04
개망초  (0) 2012.06.25
Posted by Mr.Jo :

디비 서버를 운영하다 보면 다음과 같은 경고 메시지를 가끔 보곤 한다

다른거야 그렇다 치고 TrustedInstaller.exe 요녀석이 평소에는 별 문제가 없는데 가끔 메모리와 CPU를 마구 먹는다


서비스에서 다음 서비스를 중지 시키면 되는데 중지 시키기 전에 시스템 관리자에게 먼져 꼭 물어보길...

뒷일은 책임 안진다.

Posted by Mr.Jo :

프로세서나 코어가 2개 이상 있고 대량 처리 작업중에서 실행계획에 ParallelSort가 있는 경우

순서가 보장되지 않는다.

MSSQL 20052008, 2008R2에서 확인했던 내용인데 2012는 아직 확인해 보지 못했다


아마도 CPU에 일을 분할 할 때 문제가 발생하는 것 같은데 버젼이 바뀌어도 계속 발견되고

운에 따라 발생 안할 경우도 있고 해서 상당히 신경 쓰이는 문제다


해결 방법은 간단하게 MAXDOP 1 을 옵션으로 줘서 병렬처리를 막으면 정상 적으로 결과가 나온다.

Posted by Mr.Jo :

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
위의 실행 결과 비교는 다음과 같다


테스트용 데이터 이기 때문에 데이터 량이 적지만 실제 서버의 엄청난 데이터를 생각한다면 그 차이는 더더욱 클 것이라 생각된다.



ps1. Apply 구문에는 Cross Apply와 Outer Apply가 존재 하며
       이 차이는 Inner Join과 Left Outer Join혹은 Right Outer Join과 동일함

ps2. 테스트 데이터는 다음과 같이 만들었음
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



Posted by Mr.Jo :

쭈뿌쭈뿌

2012. 7. 15. 13:00 from 사진/사진\접사


'사진 > 사진\접사' 카테고리의 다른 글

수줍던 볼터치  (0) 2012.12.05
꽃 쟁반 과 미식가 나비  (0) 2012.07.14
맥주한병 어때?  (0) 2012.07.10
빛이 깃들때...  (0) 2012.07.04
개망초  (0) 2012.06.25
Posted by Mr.Jo :



'사진 > 사진\접사' 카테고리의 다른 글

수줍던 볼터치  (0) 2012.12.05
쭈뿌쭈뿌  (2) 2012.07.15
맥주한병 어때?  (0) 2012.07.10
빛이 깃들때...  (0) 2012.07.04
개망초  (0) 2012.06.25
Posted by Mr.Jo :

아우~~~~~~

2012. 7. 13. 13:00 from 사진/사진\스넵


'사진 > 사진\스넵' 카테고리의 다른 글

잠시 쉬었다 가세  (0) 2012.12.09
모든것이 저물어 가는 시간...  (0) 2012.12.06
커피 한잔 어때요?  (0) 2012.07.12
부대 차렷!  (2) 2012.07.11
속도를 줄이시오  (0) 2012.07.09
Posted by Mr.Jo :


'사진 > 사진\풍경(삼각대)' 카테고리의 다른 글

꼭꼭 숨어라 머리카락 보일라  (0) 2012.06.08
어느 화창한 날에  (0) 2012.05.25
텔레토비 동산  (0) 2012.05.22
자연의 수묵화  (0) 2012.05.02
Posted by Mr.Jo :


'사진 > 사진\스넵' 카테고리의 다른 글

모든것이 저물어 가는 시간...  (0) 2012.12.06
아우~~~~~~  (0) 2012.07.13
부대 차렷!  (2) 2012.07.11
속도를 줄이시오  (0) 2012.07.09
꿈의 다리로...  (0) 2012.07.06
Posted by Mr.Jo :

부대 차렷!

2012. 7. 11. 13:00 from 사진/사진\스넵


'사진 > 사진\스넵' 카테고리의 다른 글

아우~~~~~~  (0) 2012.07.13
커피 한잔 어때요?  (0) 2012.07.12
속도를 줄이시오  (0) 2012.07.09
꿈의 다리로...  (0) 2012.07.06
동화속으로...  (0) 2012.07.03
Posted by Mr.Jo :