SQLD 문제풀이 2
1.성능데이터 모델링
분석 설계단계에서 데이터베이스 처리 성능을 향상시킬수 있는 방법을 주도 면밀하게 고려해야한다.
어떤 트랜잭션이 해당 비즈니스 처리에서 핵심적이고 사용자 업무처리에 있어 중요함을 가지고 있고 성능이 저하되면 안되는 특징을 가지고 있다면 프로젝트 초기에 운영환경에 대비한 테스트 환경을 고려하고 실제 성능 테스트를 해보아야한다.
이때 데이터 모델의 구조도 변경하면서 어떤 구조가 해당 사이트에 성능상 가장 적절한 구조인지를 검토해나가바며 디자인하는 전략이 필요하다.
2. 성능데이터 모델링 순서
1.데이터 모델링 할때 정규화를 정확하게 수행한다.
2.데이터베이스 용량산정을 수행한다.
3.발생되는 트랜잭션유형을 파악한다.
4.용량과 트랜잭션유형에 따라 반정규하를 실시한다.
5.이력모델의 조정 pk/fk조정 슈퍼타입 서브타입 조정등을 수행한다.
6.성능관점에서 데이터 모델을 검증한다.
3. 반정규화 고려 요소
다량의 데이터 탐색의 경우 인덱스가 아닌 파티션 및 데이터 클리스터링 등의 다양한 물리 저장 기법을 활용하여 성능개선을 유도할 수 있다ㅣ.
다만 하나의 결과셋을 추출하기 위해 다량의 데이터를 탐색하는 처리가 반복적으로 빈번하게 발생하면 이때 반정규화를 고려할 필요가 있다.
이전 또는 이후 위치의 레코드에 대한 탐색은 윈도우 함수로 접근 가능하다.
집계 테이블 외에도 다양한 유형 다수테이블의 키 연결 테이블등 에 대하여 반정규화를 할 수 있다.
4. 컬럼수가 많은 테이블
한테이블에 많은 컬럼이 존재할 경우 데이터가 물리적으로 저장되는 디스크상에 넓게 분포할 가능성이 커지게 되어 디스크 i/o가 대량으로 발생할수 있고 이로인해 성능이 저하될수있다.
따라서 트랜잭션이 접근하는 컬럼 유형을 분석해서 자주 접근하는 컬럼들과 상대적으로 접근 빈도가 낮은 컬ㅓㅁ들을 구분하여 1대1테이블을 분리하면 추력이 줄어들어 성능을 향상시킬수잇다.
테이블 내에서 컬럼의 위치를 조정하는것응ㄴ 데이터주로 채워지는 컬럼을 앞쪽에 위치시키고 데이터가 채워지ㅣㅈ안혹 주로 null상태로 존재하는 컬럼들을 뒤쪽에 모아둠으로서 로우의 길이를 어느정도 감소시킬 수 있으나 null상태이던 컬럼을 나중에 채워지게 될경우 더많은 로우체인이 발생할수도 있기 때문에 바람직한 해결책으로 보기엔 부족하다.
무엇보다도 채워지지 않고 null상태로 존재하는 컬럼이 많이 나타타는 이유는 너무많은 엔티티들에 무리하게 동질성을 부여하여 통합을 수행햇거나 예츨하기 어려운 미래 시점을 겨냥하여 과도하게 의욕적으로 속성을 확장한 경우에서 나타나기 때문에 자주 사용하는 컬럼을 한데 모으고 사용빈도가 낮은 커럼을 모아 분리하는것이 좋다.
5. pk인덱스
인덱스의 경우 범위에 따라 일정하게 정렬되어 있으므로 상수값으로 eqaul이 먼저나오는 것이 먼저 범위가 나중에 오도록하는 것이 범위를 좁힐 수 있는 좋은 조건이 된다.
6. fk
엔티티간에 논리적 관계가ㅣ잇을 경우 상호 간에 조인이 자주 발생한다느 ㄴ것을 의미하는 것이기 때문에 fk를 생성햊ㅅ느니 ㅈ여부와 상관없이 조인 성능을 향상시키기 위한 인덱스를 생성해주는 것이 좋다.
7. 분산데이터베이스
장점
1.지역자치성 점증적시스테묭량확장
2.신뢰성과 가용성
3.효용성과 유통성
4.빠른응답속도와 통신비용절감
5.데이터의 가용성과 신롸ㅣ성 증가
6.시스템규모의 적절한 조절
7.각지역사용자의 요구수용증대
단점
1.소프트웨어 개발비용
2.오류의잠재성증대
3.처리비용의 증대
4.설계관리의 복잡성과비용
5.불규칙한 응답속도
6.통제의어려움
7.데이터의 무결성에 대한 위협
8. 외래키설정시 delete(/modify) action
delete(/modify) action : Cascade, Set Null, Set Default, Restrict
1.cascade : master 삭제시 child같이삭제
2.set null : master삭제시 child 해당필드 null
3.set default : master삭제시 child해당필드 디폴트값으로 설정
4.restrict : chlild테이블에 pk값이 없는 경우만 master삭제 허용
5.no action : 참조무결성 위반하는 삭제 수정액션을 취하지 않음
9. 외래키 insert action
automatic, set nul, set default, dependent
1.automatic : master 테이블에 pk가 없는 경우 master pk를 생성후 chlid에 입력
2.set null : master 테이블에 pk가 없는경우 chlid외부키를 null값으로 처리
3.set default : master테이블에 pk가 없는경우 chlid외부키를 지정된 기본값으로 입력
4.dependent : mater테이블에 pk가 조재할 땨만 child입력허용
5.no action : 참조무결성 위반하는 입력액션을 취하지 않음
10. 트랜잭션 격리성 낮은경우 발생하는 문제
1.Dirty Read : 다른트랜젝션에 의해 수정되었는데 아직 커밋되지 않은 데이터를 읽는 경우
2.non-repeatable read : 한 트랜잭션 ㄴ내에서 같은 쿼리를 두번수행햇는데 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 방람에 두쿼리 겨로가가ㅏ 다르게 나타나는 현상
3.phanton read : 한 트랜잭션 내에서 같은 쿼리를 두번 수행햇는데 첫번째 쿼리에서 없던 유령레코드가 두번째 쿼리에서 나타나느 현상
11. null 조회
''으로 insert하면 오라클에선 null로 입력된다.