블로그 이미지
010-9967-0955 보미아빠

카테고리

보미아빠, 석이 (500)
밥벌이 (16)
싸이클 (1)
일상 (1)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

select top 10 * from t_outer option (loop join, hash join)

이렇게 돌려도 쿼리가 돌아갑니다.

 

"SQL Server 운영과 튜닝"책에서 dbcc ruleon off 라는 기능을 소개한 적인 있었잖아요,

해당 rule 을 on off 시키는 기능과 동일하지 않을까 생각 합니다.

option (loop join, hash join) 이라고 주면, join 이 필요 할 때 merge join 만 제외하고 physical join 이 선택될 수 있습니다.

 

Posted by 보미아빠
, |

 

세션 1

*) ssms 응답속도가 다르다?

    세션당 플랜 enable disable 등을 해 실행시간이 다르게 나오는걸 소개하지 않을까?

    Resultset Table 인지 아닌지에 따라

    set statististics io on off .... 등등

    protocol 에 따라서 틀릴수 있다. shared memory , tcp/ip TCP:hostname  을 붙여서 접속 등

    shared memory 가 더 느린 이유는 뭘까?

 

*) MUTEX TockenAndPermUserStore

    sys.dm_os_spinlock_stats R2 이상

    lock - latch - spinlock (mutex) (설명 너무 간소했음.......컥....난 몇시간을 했는디.....)

    lock 은 transaction 의 일관성

        updlock, xlock....뭐 이런게 있고

    latch 는 critical section 을 관리하기 위한 것

        여기는 spinlock, semaphore, mutex 등이 있다.

    이것을 lock - latch - spinlock 이라고 설명하면 뭔가 단계가 맞아 보이지 않는다.

    설명하는 사람은 알겠지만, 오해도 생기지 않을까 생각한다.

 

*) CXPACKET 대기 

    CXPACKET 은 희생자 이다....뭐 어찌 보면...그럴수도 있지만......좀 그시기한 설명...

    scan_range_generator - clustered index scan 병렬처리가 많더라 

 

*) writelog 대기 

    시스템을 다시 깔고 해결이 되었다. 라고 설명 했는데,

    근본적인 문제를 더 deep-dive 해 봤어야 할 듯 하고 원인도 결과도 모르면 소개하지 않는것이 좋다.

    주로 writelog 가 느렸다고 하지만, 물리적으로 디스크는 충분한 파워를 가지고 있다면,

    민석은 dbcc loginfo 를 봤으면 한다. vlf 파일이 많아서 인 경우가 많았다.

    복제가 느리거나  log 를 늦게 쓰거나...........등.

 

*) sp_MSdistribution_cleanup 때문에 300 MB 정도 읽었다. 

    복제를 쓴다면 복제 내부 작업에 리소스를 얼마를 쓰는지 모니터링 해봐라

    

*) TF2371 R2 SP1 이후부터 

    업데이트 해봐라 정말 20% 에서 통계를 업데이트 하는가?...해봤어? 해봐......

    테스트 시나리오는 어떻게 되는가? 

    대용량 테이블에서 통계를 더 자주 업데이트 하는 TF 입니다.

    http://blogs.msdn.com/b/saponsqlserver/archive/2011/09/07/changes-to-automatic-update-statistics-in-sql-server-traceflag-2371.aspx?utm_source=Brent+Ozar+PLF+List&utm_campaign=b16f70a5ba-Weekly_News_2011_09_129_11_2011&utm_medium=email

   - 비동기 통계 업데이트를 같이 설명해 줬으면 좋았을듯...

   0.01초 만에 돌아가던 쿼리가 갑자기 통계 업데이트를 위해 6초 걸리면 시스템 장애다...이걸 왜 자꾸 설명 안해주징......정말 중요한데........이걸로 장애나면, 나중에 찾지도 못한다.

 

*) Anti-Virus

   매번 나오는 이야기 아닐까 싶습니다.

   높은 cpu, 응답속도, 멈춤, 심각한 차단, 시간초과, 동시 접속 방해, System Filter Driver 

   KB2454053

 

*) 그룹웨어 튜닝 이슈?

    ODBC query 

    API Cursor 사용시 

    dm_exec_cursors() 를 이용하면 2008 에서 커서 내용을 볼 수 있다. 

    일부러 안보이게...........해 놓았다...statements complete 퀴즈인지......강의인지.....아흑~

    누가 뭘 했을지 알면 좀 알려주세요~ ^.^

 

 

세션 2

 

고객사 CASE 소개....

*) view 안에 컬럼을 가공후 predicate 조건으로 씀 -> 성능하락

    SARG로 쓸 경우 가공하지 말것

 

*) 불필요한 like 조건 update 조건

    updlock 을 깥이 씀

    -> = 로 바꾸니 되더라

 

*) 월마감 2일 걸림

    -> left outer join 에서 오른쪽 것이 is null 인것만 잡는것을 exists 로 검사한다.

     exists ( select * from a left outer join b on a.i = b.i where b.i is null)

    -> count() 로 처리하면 hash join 하고 exists 로 체크하면 nl 로 풀어서 하루종일 한다.

 

*) 분류코드 검색 코드 SARG 문제

    substring (분류코드, 1, case 코드길이 when 3 .....4 ....5 ..6..) = @검색값

    -> like

 

*) 차단 (인텔리전스 기능 쓸 경우) 발생 할 수 있다.

 

*) 뷰에 불필요한 열 참조 .......

    가상의 엔티티를 위한 목적

    원래의 목적에서 벗어난 기능 (음..설명하다가 맘.....뷰의 목적이라고 정의를 내려 주실듯해 정말 열심히 쳐다 봤었는데....ㅠ.ㅠ)

       - 코드 재사용 목적

       - 모듈화

       - 서로 다른 인터페이스 끼리 연결

       - 편리하기 위한 목적은 성능 문제가 있을 수 있다.

 

*) view 병합 문제 -> push predicate 이슈로 설명하는것이 옳음

         - group by view 에서 원래 쿼리는 view 안에 있는것에 predicate 가 있어

*) delete 대상에 인덱스가 없어서 느림 -> 인덱스 만들어

 

*) lock 대기 월마감 오전시간

       화면이 넘어가지 않아요..........3Tier 아키텍처...

       병렬처리   

 

*) Escalation

     문제가 많더라, 그래서 erp 고쳤다.

 

*) 만능조회

    case 문

    어떻게 해결 ?

    case by case  다

    성능 - 쿼리 break down

 

*) 백업압축

    드라이브 개수와 대상 파일의 개수에 따라 병렬처리 정도가 결정된다.

   

 

 

나도 잘 모르겠다 시리즈 다 떠봐야 하니 힘들죠....SQL 파트가 아닌것 같습니다. 플랫폼과 네트워크에 넘기는게....쿨럭~

*) 18056  pool  을 재사용 하지 못하는 경우(...구체적으로 처리해본적 .x)

    이전 에러로 인해서 pool 을 distroy 한 경우

    application 연결 reset

    timeout

    app 에서 중지요청

    - KB2543687 에서 처리된다.

 

*) 17830 network error (.구체적으로 처리해본적 ..X.)

    0x2746 10054 이고 socket error 연결 종료 , 실패, 시간 초과

    4029, 3689 필요 (undocumented flag)

    windows envent log, sql server error log

    sys.dm_os_ring_buffers 에서 -- 주의해서 써라

    profiler

     - errors and warnings (Attention)

   개발과 시스템 팀에서 협력필요

 

나도 잘 모르겠다 시리즈 끝

    

*) relog 를 이용해서 성능카운터를 csv -> db로 등등 바꿀 수 있다.

    guid 구이드 라고 읽더라.......

    perfmon 에서 바로 보거나 join 해서 볼 수 있다.

 

*) bug or features

    column aliases

    all at once

    try_convert

    subqueries

 

    - 쿼리는 앞에서 부터 움직이는게 아니고 집합으로 처리한다.

       석이는 아니다......sql 은 언어일 뿐이고 순차 처리를 하고 집합처럼 보여줄 뿐이다.

집합적 사고가 필요한 절차적 언어다. -진훈식 -  집합이라고 생각하시면 곤란 합니다. -_-

 

if object_id('tblx') is not null
drop table tblx
go


create table tblx
(idx int
,t varchar(10)
,v varchar(10)
)
go

insert into tblx values (1, 'int', 1)
insert into tblx values (2, 'varchar', 'a')
insert into tblx values (3, 'bigint', 2)
go

select * from tblx where isnumeric(v) = 1 and t in( 'int', 'bigint') and v > 0
select * from tblx where t in( 'int', 'bigint') and v > 0 and isnumeric(v) = 1

테스트 해봐라......이건 플랜이 어떤것을 먼저 푸느냐에 따라 다른 것이다. 예상 실행계획을 보면서 연구해 보길...

 

*) 병렬처리

    dbcc setcpuweight (100)

    dbcc traceon (8649) -> 임계 cost 를 0 으로 조정

    그런데 outer reference table 이 행이 하나밖에 없을때 병렬로 thread 를 쓸 것인가?

    연산자 추가 없이는 힘들듯 한데...............distribute stream 이 나오지 않는이상 첫번째 seed 가 1개이면 뒤는 병렬처리 하기 힘들다. thread 일량배분을 봐야 한다. 단순히 parallel 이냐 sireal 이냐가 중요하지 않다.

   

*)  dbcc rule on off 명령...관련

     우리 책에도 있는데 ^.^

 

*) join elimination

    단일 컬럼만 가능하고 tempdb 는 안 된다. <-- 잘못된 지식인듯....

  

USE TEMPDB
GO


DROP TABLE TBLY
DROP TABLE TBLX
GO

CREATE TABLE TBLX
(K1 INT NOT NULL
,K2 INT NOT NULL
,C1 INT
)

CREATE TABLE TBLY
(K1 INT NOT NULL
,K2 INT NOT NULL
,C1 INT
)
GO

INSERT INTO TBLX VALUES (1,1,1)
INSERT INTO TBLY VALUES (1,1,1)
GO
ALTER TABLE TBLX ADD CONSTRAINT PK_TBLX PRIMARY KEY NONCLUSTERED (K1,K2)
GO
ALTER TABLE TBLY WITH CHECK ADD CONSTRAINT FK_TBLX_K1_K2 FOREIGN KEY (K1,K2)
REFERENCES DBO.TBLX(K1,K2)
GO

SELECT *
FROM TBLY A
WHERE EXISTS
(SELECT * FROM TBLX WHERE K1=A.K1 AND K2 =A.K2)

해보세요~ -> 되는데요....

 

 

*) Scan Tipping Point

    http://www.sqlskills.com/BLOGS/KIMBERLY/category/The-Tipping-Point.aspx

 

*) 이상한 Update 잠금

    1200 로 보니 update 로 잠검 걸때 클러스터 인덱스를 업데이트 하면, 그냥 X 락 잡힌다.

 

*) TF4199

    버그나 잘못된 최적화 관련 핫픽스 후 기본 disable 인 정책을 모두 enable 하는 traceflag 입니다.
    http://support.microsoft.com/kb/974006/en-us

    사용자의 혼란과 운영서버의 급격한 리소스 사용률 변화는 혼란을 초래할 수 있으므로

    정책상 disable 해 두었다. 실제 핫 픽스 후 문제가 이러한 문제가 있다면 해당 각각의 TF 를 활성화 해라.

    의도는  해당 문제가 없는 사용자가 hotfix를 설치 했다고 실행 계획이 확확 변하면, 무서워서 적용 못 할 것이니 

    실행계획의 변경은 없으니 걱정 하지 말라 라는 의도로 이해하시면 될 듯 합니다.

    전 실제 해당 서버가 문제가 있었고,

    현재  hotfix를 이용해 문제를 해결 하고자 할 경우 각각의 TF를 enable 하기를 권고하구요

    전역으로 enable 하는것은 권고하지 않겠습니다.

    목숨은 하나죠? 4199를 켜면 선배에게 or 팀장에게 열라 털려도....할 말 없을듯 합니다. ;-)

 

   이건 설명을 좀 잘못 하신듯 하던데....내가 착각하면서 들었나....-_-

 

*) Insert Lock Escalation

    이건 Connect 에서 난리친 이야기 일듯 합니다.

     http://connect.microsoft.com/SQLServer/feedback/details/506453/lock-escalation-no-longer-kicks-in-for-inserts-in-sql-server-2008

     http://support.microsoft.com/kb/2448971/en-us

 

 *) sqlworkshops.com 의 메일링 리스트중

     CPU에 매우 로드가 심할때 , I/O 성능이 느려질 수 있다. 라고 소개하고 있다.

     이건 머 당연하지 않을까 싶다.

     io affinitymask 를 이용한 테스트를 한번 해보는 것도 좋아 보이는데............ 왠지 안될듯 하기도 하고 될것 같기도 하고 아리송 하다.  이 아저씨 sql 을 10년간 만들었으니, 그런 단순한 문제면 connect 에 신고도 안할듯 하다. 그래서 테스트 안하기로 한다. ㅋ

 

- 잘 들었습니다. -

몇 몇 틀린 내용도 있는듯 하지만 많이 배웠습니다.

선물로 주신 책은 숙 언니 열공에 필요하다 해서....드렸어요~

전 먼저 받았거든요 ^.^

Posted by 보미아빠
, |

1탄
- High Scale OLTP LL From SQLCAT Performance Labs
   http://sqlbits.com/Sessions/Event8/High_Scale_OLTP__LL_From_SQLCAT_Performance_Labs
   spinlock 관련 pdf 는 google 에서 검색해야 함
        검색어
           ewan fairweather spinlock 
           아래쪽에 PDF 하나 있음
2탄
- When to Break Down Complex Queries
   http://sqlcat.com/sqlcat/b/technicalnotes/archive/2011/10/21/when-to-break-down-complex-queries.aspx

 

SQLCAT 팀에 감사하구요, 또 우리 SQLTAG 강좌를 사랑해 주셔서 더 감사합니다.

공부하시다 모르는게 있으면 언제든지 연락 주세요

Posted by 보미아빠
, |

Decoding stat_blob

http://sqlblog.com/blogs/joe_chang/

 

copy

http://blog.sqlauthority.com/2011/01/05/sql-server-copy-statistics-from-one-server-to-another-server/

 

Posted by 보미아빠
, |

Machine supports memory error recovery. SQL memory protection is enabled to recover from memory corruption.


이게 error log 에 찍히면,

하드웨어 메모리 오류로부터 platform 이 시그널을 sql 로 줄 수 있고

sql server 는 이 시그널 기반으로 bpool 메모리를 디스크에서 다시 읽어 메모리 오류로 부터 복구 될 수 있다.


자세한 내용은

http://sqlcat.com/sqlcat/b/technicalnotes/archive/2012/06/05/memory-error-recovery-in-sql-server-2012.aspx


몇 몇 에러로부터는 좀 더 안전하게 보호 할 수 있겠군요...

 

Posted by 보미아빠
, |

http://social.technet.microsoft.com/Forums/en-us/winservergen/thread/fb7a6ef7-5a70-43a4-b0fe-c0252877467b

Posted by 보미아빠
, |

링 버퍼

카테고리 없음 / 2012. 7. 2. 13:56
http://blogs.msdn.com/b/psssql/archive/2009/09/17/how-it-works-what-are-the-ring-buffer-resource-monitor-telling-me.aspx

 

Posted by 보미아빠
, |

울 마누리 핸펀 사러가서 갤럭시 노트 32G 할부원금 78만원에 36개월 할부로 살뻔 했는데요

오늘 이 핸드폰 최저가는 할부원금 39만원 입니다. -_- 차이가 좀 나죠?

싸게 사실려면 아래글을 잘 읽어 보세요~

 

스마트폰 사러 가면 질문은 단 한

 

"할부원금을 얼마까지 해 줄 수 있어요?"

"24개월 할부로 부탁 합니다."

 

24개월 약정에 36개월 할부 이럼 -_- 왜 그러세요......이러면서 나오세요...

아래는 위 결론에 도달하기 위한 길고긴 여정 입니다.

 

1. 스마트폰 요금 계산법
http://blog.naver.com/holocaust44/80146767046
2. 휴대폰 공짜의 비밀 - 할부원금
http://blog.naver.com/holocaust44/80146940650
3. 할부원금? 더 자세히 파헤쳐보자
http://blog.naver.com/holocaust44/80147259402
4. 24개월 약정, 36개월 할부의 숨겨진 요소
http://blog.naver.com/holocaust44/80148175542
* 핸드폰 보조금 종류는 많아요...
http://ask.nate.com/qna/view.html?n=7768343

 

 

 

1) http://www.ppomppu.co.kr 사이트의 뽐뿌 > 휴대폰뽐뿌로 가서 최저가 확인 > 오프라인 최저가

2) 기업특판을 노린다!

 

 

Posted by 보미아빠
, |

이제 2005 쓸일이 있을라나.......6Core 처음 나왔을때 문제 되었던 현상 입니다.

KB 관리 하는건지 안하는건지....

 

http://support.microsoft.com/kb/954835/en-us

 

numproc = 1 설정해 줍니다.

Posted by 보미아빠
, |

만약 최신의 하드웨어로 마이그레이션 할 기회가 생긴다면 아래 주의사항을 읽어보길 바란다.

 

sql server 2008 은 64개 논리 코어까지만 지원한다. 최신 10Core 4Socket CPU 에서 Hyper Thread 를 활성화 하면 모든 리소스를 사용 할 수 없다. 최신의 하드웨어로 마이그레이션 하면 sql server 2008 r2 sp1으로 가는걸 추천한다.

 

sql server 2008 의 경우 하드웨어 리미트 문서를 보면....

 

http://msdn.microsoft.com/en-us/library/ms143760(v=sql.100).aspx

 

SQL Server 2008 edition

Number of processors supported

Enterprise

Operating system maximum

Developer

Operating system maximum

Standard

4

Web

4

Workgroup

2

Express

1

Express with Tools

1

Express with Advanced Services

1

 

일단 세월이 좋아져서 좋은 하드웨어 많이 나왔으니 명확하게 bol 이나 msdn 에 logical processor limit 와 주의사항을 파인프린트라도 꼭 명시해 주면 좋겠다.

 

k-group (Processor Group / Kernel Group) 상에 1-group 은 64개의 core 를 지원 할 수 있다.

 

windows 2008 r2 전 버전(windows 2008 이전 버전)은 k-group 이 없다. 그러므로 max 64개 이상의 logical core 를 지원 할 수 없을 것이다.

windows 2008 r2 환경에서는 k-group 을 지원하니 4 Socket * 10 Core * HT = 80 개의 논리 코어가 모두 인식은 할 수 있으나 k-group 을 uneven 하게 할당 할 수 있다. QFE 를 적용하지 않은 windows 2008 r2 는 Xeon E7 Family 에서 HyperThread 를 활성화 하면, 80개가 나오는데 60개는 group 0에 20개는 group 1 에 올라온다. sysinternals 의 coreinfo 툴로 확인 할 수 있으며, 이때 QFE 를 적용하면 even 하게 배분 할 수 있기는 하다고 한다. 새로운 windows 는 이런 정책을 잘 적용되어 만들어 질것이다라고 한다.

 

자 여기서 sql server 2008 을 쓸 경우 k-group 을 인식하지 못하는데, SQL 이 시작할 때 group 0 에 할당되면 core 60개를 바라볼 수 있고 group 1 에 할당되면 core 20개를 볼 것이다. 이렇게 되면 성능문제를 경험 할 수 있을 것이다. 이 경우 Root Cause 는 64개 이상의 논리코어가 문제이기 때문에 OLTP workload 에 좋다(?) 라고 알려진 Hyper-Thread를 disable 하고 40개의 논리 코어로 보이게 하면 문제는 피해 갈 수 있다. 아니면 k-group 을 인식하는 sql server 2008 r2 를 쓰면 더 좋을 것이다.

 

windows 2008 r2 에 k-group 을 인식하지 않는 sql server 2008 같은 소프트웨어를 사용 할 때 성능 문제 이슈 해결을 위한 핫픽스가 있으나 인스턴스레벨은 지원하지 않는다고 한다. 이 또한 SQL 2008 R2로 가는 좋은 이유가 될 수 있을 것이다.

 

cmd 명령어로 특정 NUMA node 에서 명령을 실행 하고자 할 경우 windows 2008 r2 와 windows 7 의 경우 hotfix 를 설치해야지만 가능하다.

 

다시 말하지만, sql 2008 을 새로운 하드웨어로 마이그레이션 시 위 이슈는 64개 이하의 논리코어만 있다면 문제가 되지 않는다. 4개의 Socket 이 있다면, hyper thread 끄고 40개 논리코어로 운영하면 문제가 없다. 그러나 8 Socket 을 지원하는 하드웨어의 경우 sql 2008 은 하드웨어 리소스를 모두 사용할 수 있는 방법이 없다. (Hyper Thread 를 disable 하더라도 80개 논리 core 로 인식하기 때문에) 이때는 bios 등에서 core 인식 숫자를 조정해 64개 코어만 활용 할 수 있는 work-around 가 unplugged 2012에 소개 되기도 했었다.  

 

또, MS 서포트 계약이 있다면, MS 에 windows 2008 r2 에 sql 2008 sp2 의 경우 마이그레이션 하는 하드웨어와의 호환성을 검증해 달라고 요청하고, HW 벤더에는 해당 하드웨어에 적합한 SQL 버전을 추천해 달라고 해야 한다. 이때 최신의 프로세서가 실장되어 있는 Intel E7 Family 를 쓴다면 당연히 Windows 2008 r2 에 SQL 2008 R2 로 가라고 가이드 될 것이다. 이때 하드웨어 업체에는 2008 SP2 가 호환성이 있는지 또 요청하는것이 좋다. 그러나, 약간의 보수적인 SQL DBA 입장에서 버전을 바꾸지 않고 마이그레이션 하고 싶은 것도 사실이다. 이때는 모든 책임은 MS 가 지도록 해당 하드웨어에서 SQL 2008 SP2 가 잘 동작하는지 보증하라고 요청해야 할 것이다. 보증 할 수 없다면 MS 입장에서 이제것 E7 프로세서에서 나온 많은 문제를 반드시 언급해 주는것이 맞을 것이다. 그리고 우리가 권장하지 않는 버전에 대한 책임은 고객이 지는 것이다. 라고 가이드 하는것이 바를 것이다.

 

지금 메이저 버전이 SQL 2012가 나온 상황에서는 본인이 만약 2008 sp2 와 R2 sp1 의 갈림길에 서면 SQL Server 2008 R2 SP1 을 선택 할 것이다. sql server 2008 R2 SP1 이 2011년 7월 11일 나왔으므로 약 1년간 충분히 테스트가 되지 않았을까 생각한다. 더불어 할 수 있다면, SQL Server 2008 R2 SP1 이 깔려있는 사이트 리스트와 워크로드를 분석해 볼 것이다. 최신 하드웨어에 sql 2008 r2 sp1을 설치 한다면, 최신의 하드웨어를 가장 효율적이고 안정적으로 쓸 수 있을 것이다.

 

HT 를 disable 하고 40코어를 선택(sql 2008 sp2)해도 좋은 솔루션이지만 이때는 2008 r2 sp1 까지의 알려진 모든 문제에 대해서 우리 환경에서 일어나지 않음을 검증해야 하고, MS 에서 발표하지 않은 Confidential 패치의 문제점들은 안고 가야 한다.

 

말하고 싶은점은 SQL 만 생각해서는 안되고 요즘나온 최신의 하드웨어를 이해하고 마이그레이션 해야하며, 신중하게 sql server version 을 선택해야 한다는 것이다.

 

별건 아니지만, sql server 2008 은 windows 2008 과 2008 R2 의 Core installation 을 지원하지 않는다.

 

참고 url

http://msdn.microsoft.com/en-us/library/ff564483(v=vs.85).aspx

http://blogs.msdn.com/b/psssql/archive/2012/01/23/assigning-sql-server-sql-agent-to-a-processor-group-oom-hang-performance-counters-always-zero-for-buffer-pool.aspx

http://support.microsoft.com/kb/2510206/en-us

http://support.microsoft.com/default.aspx?scid=kb;EN-US;2028687

 

Posted by 보미아빠
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함