SQL/데이터 베이스 기초

sql 튜닝 / 튜닝을 위한 21가지 규칙 / 튜닝 가이드 / 더 빠른 데이터베이스 쿼리(2/3)

삐뚤어진 개발자 2019. 12. 26.

sql 튜닝 1편

 

sql 튜닝 / 튜닝에 도움 되는 21가지 규칙 / 튜닝 가이드 / 더 빠른 데이터베이스 쿼리(1/3)

데이터 베이스의 데이터들을 효율적으로 관리하려면 최적화된 쿼리가 필수적일 것이다. 데이터 베이스의 효율성을 위해 쿼리 속도가 빨라지는 SQL 쿼리 튜닝을 고려해 볼수 있다. SQL 개발자와 DBA 모두 이런 목표..

taewooblog.tistory.com

sql 튜닝 3편

 

sql 튜닝 / 튜닝을 위한 21가지 규칙 / 튜닝 가이드 / 더 빠른 데이터베이스 쿼리(3/3)

sql 튜닝 1편 sql 튜닝 / 튜닝에 도움 되는 21가지 규칙 / 튜닝 가이드 / 더 빠른 데이터베이스 쿼리(1/3) 데이터 베이스의 데이터들을 효율적으로 관리하려면 최적화된 쿼리가 필수적일 것이다. 데이터 베이스의..

taewooblog.tistory.com

 

 

 

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. 커다란 트랜잭션은 작은 트랜잭션 여러 개로 쪼개라
단일 트랜잭션에서 여러 테이블을 처리하면 해당 트랜잭션이 끝날 때까지 모든 테이블을 잠글 수 있기 때문에 다중 차단으로 이어진다. 해결책은 이러한 트랜잭션을 하나의 테이블에서 개별적으로 작동하는 여러 루틴으로 나누는 것이다. 이렇게 하면 차단 횟수가 줄어들고 다른 테이블이 방출되어 다른 작업이 계속 진행될 수 있다.

댓글