'2017/04/13'에 해당되는 글 1건

  1. 2017.04.13 SQL Server 교육

 

 

 

* SQL Server 교육 *


1. 사용자별 CPU
   - Oracle인 경우 Process방식
     . 1인 접속자 기준으로 PGA가 설정되면 CPU가 할당 된다.
     . run -> wait -> ready
     . Context : run중 실행중이 였던 내용을 저장하는 곳.
     .
   - MS Sql인 경우 Thread방식
     . Core당 1개의 Process가 생성됨.
     . Thread 1개당 메모리 512kb 자원이 할당 됨
     . 4 Core기준으로 최대 512개 Thread 생성
     . 1명의 user가(1개의 select문장) cpu를 여러개 사용할 수 있다.

2. hint
   - MS Sql은 hint를 사용하지 않아서 Optimizer가 알아서 모든 처리를 자동으로 해줌.
   - 대용량 select문장을 기술시 패널널로 Optimzer가 수행 시켜줌.

3. Memory
   - 5개 영역으로 구성되어 있음
   - Utility, Lock, Query Work Space(dirty page)(rollback, commit등 페이지), Plan Cash(실행계획), Data Buffer Cash
   - Data Buffer Cash : 한번 읽었던 자원을 메모리 올리는데 이곳이 Data Buffer Cash영역이다.
                      : Logical Reading

4. Covering index
   - select시 조회 컬럼정보가  모두 index컬럼들이면 index영역에서 자료를 조회 하는 기준

5. Tuning
   - set statistics io on;
     set statistics time on;
   - page reading(logical, physical page)하는 갯수를 보여줌.  (자료 읽은 페이지수)
   - 최소 메모리사이즈는  db용량의 10%정도가 권장사항
   - Logical, Physical 속도 : 약 5배 차이
   - Hit 수  : Logical read 수 (ms 권장율은 97%)

6. sql
   - select * from a;
     . *을 사용 하지 말것
     . Covering index를 사용하기 위해서임
   - bind query
     . 한번 날라온 query를 재 사용하게 해줌
     . 대소문자 구분, 중간에 공백등에 의해서 queyr를 해석할지, 그냥 사용할지 구분함
   - addon query.
     . query문장을 재사용하지 않고 계속 sql문장을 재 해석 함.
  
 
7. Procedure
   - sp_ : 를 앞쪽에 붙이면 db서버는 Master db를 먼저 뒤짐
           즉, sp_는 system에 기본 설정 naming rule임
           고로 개발시 앞쪽에 sp_를 붙이면 안됨.
   - exec : 로 Procedure를 수행시 모든 sql문장은 재 해석함.
            addon query라는 용어를 사용함.
   - sp_executesql : 로 sql을 수행해야 sql을 재 해석하지 않음.
   - 해석 : sql문장 parsing, 실행계획 수립... 기타 등등.
  
  

.
8. function
   - f_ : 도 위와 같은 형태로 옮겨짐
   - 

9. schema
   - dbo : default를 사용
   - 되도록 schema는 생성하지 말것
   -

9. Table
   - name : 대문자 권장
   - varchar  : 1byte
     nvarchar : 2byte, unicode, 다국어 지원
                offset을 활용함
                하지만 값이 null인 경우에는 offset이 없음.
   - varchar 와 nvarchar join시 varchar가 nvarchar보다 작기 대문에 varchar가 navarchar로 converting됨
     이렇다 보면 index가 수행되지 않음 (내부적으로 함수를 사용했기 때문)
   - 8k * 8 = 1 extent (한개의 테이블이 속한 최소 단위)
   - nchar : 2byte형 char
           : offset 정보를 활용하지 않음. 자료수가 고정 되었기 때문에
   -

 

11. 1page(8k)
   - Header :
            : time stamp - 최종 수정시각
   - Footer : offset - varchar의 시작위치, 길이를 저장 함
                     - 모든 컬럼의 varchar에 대한 정보가 저장 됨
                     -

 

10. Sequence, indentity
   - indentity : int 보단 bigint를 사용
               : 컬럼의 type임
   - Sequence  : sequece 는 numeric이 좋음 (27,0) (8byte)
               : object임
   -

10. Partition
   - 단점 : index tree가 partion별로 구성 되어 있음
            이 단점을 극복하려면 where조건에 partion을 지정 해야됨
            (참고, oracle에서는 global index를 만듬)
   -

11. isolation
   - Latch, Lock
     . Latch : phycial (물리적인 자원)
             : memory, cpu, process등. 서버의 모든 자원이 Latch
             : page io latch : 조회시 내가 필요한 자원이 memory에 없을 경우 hdd에 가게 되는데 
                               이때 ... page io latch 가 발생
     . Lock  : logical (논리적인 자원)(자료)
             :

12. Lock
   - Share-Lock, eXeclusiv-Lock, Update-Lock, Schema-Lock
   - Share-Lock     :
   - eXeclusiv-Lock :
   - Update-Lock : update전에 where조건절로 찾을 때는 Share-Lock이 발생하고,
                   조건을 찾은 후 Update를 할때는 eXeclusiv-Lock 을 발생 시킴.
   - Schema-Lock :
13. Lock 에스컬레이션
   - Lock 범위 : key -> Row -> Page -> Table -> DB
               : 자동으로 momory등을 보고 위 단계가 상승됨
   - Lock hint를사용 해야됨
   -
  
14.  Undo
   - Oracle : 값을 update시 최종 commit전에는 이전 자료는 undo segment에 저장 됨
              그래서 다른 사용자가 update자료를 select하게 되면 undo segment에서 조회 한다.
   - MS SQL : undo 가능
             
   - Undo 단점 : 대량의 정보를 undate하려면 undo의 용량이 커짐
                 속도도 무한으로 생성 됨
  
  
  
  
  
  
              
select * from sys.sysprocess; 
---------------------------------------------------------------------------------------------

1. connect by

2. int, bigdecimal, numric

---------------------------------------------------------------------------------------------
 Loop join : 결과 자료가 적을 경우
 Hash join : 결과 자료가 많을 경우
  
  
  
  
  
  
  
  
  
  
  

'(DB) MySql > 설치 및 초기DB작업' 카테고리의 다른 글

MySQL.설치 후 기본 설정  (0) 2017.02.28
MySQL - 임시  (0) 2017.01.27
5. MySQL - TABLE 생성  (0) 2017.01.22
4. MySQL - DB 접속  (0) 2017.01.22
3. MySQL - DB 생성  (0) 2017.01.22
Posted by 농부지기
,