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

카테고리

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

달력

« » 2024.3
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

공지사항

최근에 올라온 글

 

세션 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 보미아빠
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함