세션 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 에 신고도 안할듯 하다. 그래서 테스트 안하기로 한다. ㅋ
 
- 잘 들었습니다. - 
몇 몇 틀린 내용도 있는듯 하지만 많이 배웠습니다. 
선물로 주신 책은 숙 언니 열공에 필요하다 해서....드렸어요~
전 먼저 받았거든요 ^.^