8. SQL 서버에서 분할(Partition)을 활용하라
SQL 서버 엔터프라이즈 사용자들은 성능을 가속화하기 위해 데이터 엔진의 자동 분할 기능을 활용할 수 있다. SQL 서버에서는 간단한 테이블조차도 하나의 분할로 생성되며, 사용자는 나중에 그것을 필요에 따라 여러 개의 분할로 쪼갤 수 있다. 테이블 간에 많은 양의 데이터를 옮겨야 할 경우, INSERT와 DELETE 문 대신에 SWITCH 명령을 사용할 수 있다. 테이블 간에 많은 양의 데이터를 삭제하고 삽입하는 대신, 단일 테이블에 대한 메타데이터만 변경하는 것이기 때문에, 실행하는데 몇 초 밖에 걸리지 않는다.
9. 배치 모드로 삭제(Delete)와 갱신(Update) 작업을 하라
큰 테이블에서 대량의 데이터를 삭제하거나 업데이트하는 것은 악몽이 될 수 있다. 문제는 이 두 진술이 모두 한 번의 거래로 실행되고 그 과정이 중단되어야 한다는 것이다.여행이나 운영 과정에서 무슨 일이 생기면, 시스템은 전체 거래를 복원해야 한다. 이 작업은 진행 중인 다른 거래를 차단할 뿐만 아니라 시간이 많이 걸릴 수 있어 기본적으로 시스템 병목 현상을 일으킨다.
해결책은 작은 일괄 처리에서 삭제 또는 업데이트 작업을 수행하는 것이다. 트랜잭션을 중지하더라도 몇 행만 복원하면 되기 때문에 데이터베이스는 훨씬 더 빨리 온라인 상태로 돌아온다. 그리고 소규모 배치 작업이 Disk에 할당되는 동안 다른 작업이 개입하여 작업을 수행하여 동시성을 크게 향상시킬 수 있다.
10. 서두르지 말고 천천히 하라
일부 개발자들은 이러한 삭제와 업데이트가 같은 날에 완료되어야 한다는 것을 기억한다. 항상은 아냐. 특히, 보관 작업은 그렇지 않다. 이 작전은 필요에 따라 늘릴 수 있으며, 더 작은 레이아웃이 그것을 완성하는 데 도움이 된다. 이 집중적인 작업을 더 천천히 할 수 있다면, 시스템이 다운되는 것을 막기 위해 여분의 시간을 보내야 한다.
11. ORM을 피하라
ORM(Object Relative Mapper)은 지구상에서 최악의 코드를 생성하며 개발자가 직면할 가능성이 있는 성능 문제를 대부분 책임진다. 그러나 ORM을 피할 수 없는 경우, 자체 저장 프로시저를 생성하고 ORM이 자체 쿼리를 생성하는 대신 사용자 생성 쿼리를 호출하도록 함으로써 부정적인 측면을 최소화할 수 있다.
12. 가능한 경우, 저장 프로시저(Stored Procedure)를 사용하라
저장 프로시저는 더 나은 코드로 이어질 뿐만 아니라 많은 다른 장점들을 가지고 있다. 저장 프로시저는 통화가 더 짧아지기 때문에 교통량을 크게 줄인다. Profiler와 같은 도구를 사용하여 추적하기가 더 쉬워서 사용자가 성능 통계를 얻고 잠재적인 문제를 더 빨리 식별할 수 있다. 좀 더 일관된 방식으로 정의할 수 있는데, 이는 실행 계획이 재사용될 가능성이 높고 임의의 질의에 비해 엣지 케이스 및 감사에 사용하기 쉽다는 것을 의미한다.
많은 닷넷 코더들은 비즈니스 로직이 데이터베이스가 아닌 애플리케이션의 프론트 엔드에 속한다고 믿고 있다. 그렇지만, 그들은 틀렸다(대부분의 경우).
13. 더블 디핑(Double-Dipping: 중복 처리)을 피하라
저장 프로시저를 사용하는 것은 때때로 "이중 다이빙"으로 이어질 수 있다. 큰 테이블에 대해 여러 개의 개별 쿼리를 실행하려면 임시 테이블에 쿼리를 넣은 다음 테이블을 다시 결합하십시오. 이것은 성능에 큰 장애가 될 수 있다. 가능하면 큰 테이블을 한 번만 쿼리하는 것이 훨씬 좋다.
약간 다른 시나리오는 프로세스의 여러 단계에서 큰 테이블의 일부가 필요한 경우로서, 매번 큰 테이블에 대한 쿼리를 발생시킨다. 쿼리를 일부에 대해 실행하고 다른 곳에서 쿼리를 영구화한 다음 후속 단계를 더 작은 영구 데이터 세트로 이동하십시오.
14. 커다란 트랜잭션은 작은 트랜잭션 여러 개로 쪼개라
단일 트랜잭션에서 여러 테이블을 처리하면 해당 트랜잭션이 끝날 때까지 모든 테이블을 잠글 수 있기 때문에 다중 차단으로 이어진다. 해결책은 이러한 트랜잭션을 하나의 테이블에서 개별적으로 작동하는 여러 루틴으로 나누는 것이다. 이렇게 하면 차단 횟수가 줄어들고 다른 테이블이 방출되어 다른 작업이 계속 진행될 수 있다.
'SQL > 데이터 베이스 기초' 카테고리의 다른 글
[MS-SQL] view(가상테이블) 개념, 사용법 / 임시 테이블 차이점 (0) | 2019.12.26 |
---|---|
sql 튜닝 / 튜닝을 위한 21가지 규칙 / 튜닝 가이드 / 더 빠른 데이터베이스 쿼리(3/3) (0) | 2019.12.26 |
sql 튜닝 / 튜닝에 도움 되는 21가지 규칙 / 튜닝 가이드 / 더 빠른 데이터베이스 쿼리(1/3) (0) | 2019.12.26 |
댓글