- 같은 결과가 나오는 프로그램을 5가지에서 10가지 사이로 만들어본다.
이 중에서 최적을 찾는다!!!!!!!!
- 인덱스의 채우기 비율이란.............?
-- * 통계
요즘엔 비동기로 업데이트 한다.
병렬프로그래밍 - cpu를 효율적으로 사용하도록 자동 설계됨.
- 힙구조
개체는 힙에 저장이 되며, 한칸한칸 저장되다가 중간에 데이터를 삭제하면 빵꾸가 난 상태로
있는다. 따라서 주소값을 지정하여 검색하면 더 빠름
- 스택
힙구조에서 몇호에 어떤데이터가 있는지 정확히 알고있다.
- 조각모음
힙구조에서 중간중간 삭제된 데이터들로인해 빈 공간이 생겼을 때, 디스크 조각모음으로
빈 공간을 없애고 앞으로 한칸(빈공간만큼)씩 땡겨준다. 그리고 통계에 알려준다.
- 통계는 힙 구조내의 데이터들의 위치를 알고있고 때문에
인덱스 리빌드가 가능하다.(자주는안함)-> 통계는 업데이트를 해야 정확하고 빠름.
- 컨넥, 클로즈, 디스포즈.//////........?
- 인덱스 구조는 비트리 구조이다
- 인덱스는 스캔보다 시크가 빠르다!!!!!
- DELETE : 자주 DELETE가 일어나면 CLUSTER INDEX에 변형이 생기면 다시 생성해야 할 수 있다
- INSERT : 자주 입력, 삭제가 반복되면 조각이 날 수 있어 재작성이 필요하다
- UPDATE : 채우기 등을 덜해도 된다.
- SELECT후 INSERT를 할 경우 멀티컬럼으로 정렬해서 넣기!
- 튜닝할 때에는 쿼리플랜이나 쿼리저장소를보고 튜닝어드바이저를 쓴다
- DMV명령어들을보고 실행한다규
-- * 웨어하우스
데이터
인덱스는 대량의 데이터를 빨리 가져오기 위해 씀 -> 주로 전용쿼리(컬럼기반)를 만들어서 씀.
-- * 인덱스 선택의 유의사항
1. 인덱스를 생성/수정하지 않는다 = 신중하게 선택
2. INCLUDE 사용해서 중복사용을 하지 않도록 한다.
3. 인덱스를 사용 할 때 키의 크기를 너무 크게하지 않는다.(10개에서 15개가 적당)
CHAR / VARCHAR = 10~15개 자릿수 미만, 최대 20지릿수만 사용 권장
4. 데이터베이스 엔진의 특성에 맞게 인덱스를 선택
OLTP = Row Index
OLAP = Column Index를 사용
WHERE 또는 Group 구문등에서 사용에 맞게 설계 사용하는것을 권장한다.
5. 인덱스를 생성 할 때에는 컬럼 순서와 정렬도 중요하다.
6. Join에서 사용되는것도 최대한 인덱스를 사용하도록 원장
7. 인덱스를 주기적으로 수집 계획을 세운다(인덱스의 채우기비율)
-- SQL서버 엔진의 처리순서
FROM-> ON-> JOIN-> WHERE-> GROUP BY-> WITH-> HAVING-> SELECT-> DISTINCT-> ORDER BY-> TOP(*)
위와같이하면 실행순서를 예측 할 수 있다.
-- 옵티마이저의 사용
대부분 옵티마이저는 비용기반 옵티마이저기때문에 최적을 찾아야 하며, 가끔은 해당옵티마이저가
최적이 아닐 수 있다.(요구사항 때문에)
따라서, 비용기반 옵티마이저를 100% 신뢰하지는 말것.
-- 실제 실행계획
예상/실제/활성 실행계획을 비교분석해야한다.
-- XML은 대부분 보고서를 만들때 빼내어 쓴다.
-- 비용은 보통 10~20미만으로 체크한다.
-- 스캔과 시크
스캔 : 처음부터 끝까지 가져온다
시크 : 정해진 범위
-- 쿼리 실행시 경고/오류가 나는 경우
SELECT FROM 쓸 때 인덱스 만들으라고하거나 성능이 안나오는경우
INSERT양이 많아 TIMEOUT이 나오는 경우
-- 쿼리프로세서
SQL서버 2017,2019는 메모
-- 예상행수 대비 실제 실행행수가 5%정도 차이나면 튜닝 대상이다
-> 인덱스를 바꿀지 채우기비율을 바꿀지 결정해야 한다.
-> 인덱스 속성에 가서 최대/최소 행크기, 조각화 비율도 확인 가능
-- 유지관리
인덱스 다시 구성 : 인덱스 페이지를 효율적으로 사용(조각모음) = DELETE가 많을 때
인덱스 다시 작성 : 채우기 비율을 새걸로 바꾼다 = INSERT가 많을 때
(인덱스 옵션의 조각화의 조각화에 문제가 있으면 다시 구성한다.
'Database > 이론' 카테고리의 다른 글
X-event (0) | 2020.11.25 |
---|---|
SQL 서버의 튜닝 (0) | 2020.11.25 |
SQL 인덱스 조각모음(구성/작성)을 CLUSTERED/NONCLUSTERED 를 비교하여 성능 비교 (0) | 2020.11.24 |
[COLUMNSTORE INDEX] SQL 프로파일러 이용하여 성능 테스트 2 (0) | 2020.11.24 |
[튜닝] 쿼리와 성능의 기초지식!!!!!! (0) | 2020.11.23 |