* 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 |