3 가지 유형의 튜닝, 1 개의 반응 및 2 개의 능동을 수행하게됩니다.
반응성
파란색으로 인해 일부 쿼리가 문제를 일으키기 시작합니다. 응용 프로그램 버그 또는 기능, 예상치를 초과하는 테이블 증가, 트래픽 급증 또는 쿼리 최적화 프로그램이 "크리에이티브"를 얻기 때문일 수 있습니다. 이것은 심야 중 오작동의 다운 유형일 수도 있고, 중요하지 않은 특성의 시스템 속도 저하에 대한 응답 일 수도 있습니다. 어느 쪽이든, 반응성 튜닝의 정의 특성은 이미 문제 가 있다는 것 입니다. 말할 것도없이, 당신은 가능한 한 적은 일을하고 싶습니다. 어느 것이 우리를 ...
능동적
유형 1 : 일상적인 유지 관리
스키마가 얼마나 자주 변경되고 얼마나 빨리 데이터가 증가하는지에 따라 몇 달 또는 몇 주마다 일정에 따라 데이터베이스의 성능 분석 도구 (예 : Oracle DBA의 AWR 보고서)의 출력을 검토해야합니다. 초기 문제, 즉 반응성 조정을 요구하는 방법과 낮은 매달린 과일, 곧 문제를 일으키지 않지만 멀리 예방하기 위해 약간의 노력으로 개선 할 수있는 품목을 찾고 있습니다. 미래의 문제. 당신이 이것에 소비하는 시간은 얼마나 많은 시간과 당신이 그것을 소비 할 수있는 다른 것에 달려 있지만 최적의 금액은 결코 0이 아닙니다. 그러나 더 많은 일을함으로써 지출해야 할 금액을 쉽게 줄일 수 있습니다.
유형 2 : 적절한 디자인
"조기 최적화"에 대한 Knuth의 권고는 널리 알려져 있으며 정식으로 존중됩니다. 그러나 "조기"의 적절한 정의를 사용해야합니다. 일부 응용 프로그램 개발자는 자신의 쿼리를 작성할 수있는 경우 논리적으로 정확한 첫 번째 쿼리를 채택하는 경향이 있으며 성능, 현재 또는 미래에 대해 아무 것도 신경 쓰지 않습니다. 또는 단순히 프로덕션 환경을 대표하지 않는 개발 데이터 세트에 대해 테스트 할 수도 있습니다 (팁 : 수행하지 마십시오! 개발자는 항상 테스트를 위해 현실적인 데이터에 액세스해야합니다). 요점은 쿼리를 조정하는 적절한 시간은 성능이 떨어지는 SQL 목록에 나타날 때가 아니라 중요한 문제가 발생하지 않을 때가 아니라 처음 배포 될 때라는 것입니다.
그렇다면 DBA 토지에서 조기 최적화의 자격은 무엇입니까? 내 목록의 맨 위에는 입증 된 필요없이 정규화를 희생하는 것이있을 것입니다. 물론 자식 행에서 런타임에 계산하지 않고 부모 행의 합계를 유지할 수 있지만 실제로해야합니까? Twitter 또는 Amazon 인 경우 전략적 비정규 화 및 사전 계산이 가장 친한 친구가 될 수 있습니다. 5 명의 사용자를위한 작은 회계 데이터베이스를 설계하는 경우 데이터 무결성을 촉진하는 적절한 구조가 최우선 순위가되어야합니다. 다른 조기 최적화도 마찬가지로 우선 순위의 문제입니다. 0.1 초로 줄일 수 있다고 생각하더라도 하루에 한 번 실행되고 10 초가 걸리는 쿼리를 수정하는 데 시간을 소비하지 마십시오. 어쩌면 매일 6 시간 동안 실행되는 보고서가있을 수 있습니다. 그러나 조정에 시간을 투자하기 전에 배치 작업으로 스케줄을 탐색하십시오. 프로덕션로드가 10 %를 넘지 않는 경우 (보안을 관리 할 수 있다고 가정) 별도의 실시간 복제보고 인스턴스에 투자하지 마십시오.
현실적인 데이터에 대한 테스트, 성장 및 트래픽 패턴에 대한 교육 된 추측 (스파이크에 대한 허용량) 및 플랫폼의 최적화 요구 사항에 대한 지식을 적용함으로써 현재뿐만 아니라 미래에도 최적으로 실행되는 쿼리를 배포 할 수 있습니다. 이상적이지 않은 조건에서. 적절한 기술을 적용하면 쿼리 성능을 정확하게 예측하고 최적화 할 수 있습니다 (각 구성 요소가 필요한만큼 빠름).
(그리고 당신이 그것을하는 동안 통계를 배우십시오! )