본문 바로가기

Database

SQL 튜닝을 공부중입니다 2 강의를 들을 수록 이건 한달 만에 할 수 있는 분량이 아니라는 생각이 듭니다. 일단 지금까지 수강한 목차는 아래와 같습니다. 1. 인덱스2. 결합 인덱스3. 옵티마이저4. 실행 계획5. 테이블 실행 계획6. SORT, IN/OR7. 기타 실행 계획 줄여서 이 정도이고 내용으로 펼치면 더 많고 익숙하지 않은 내용이다보니 정리가 전혀 되지 않습니다. 제가 지금껏 하던 SQL튜닝이 인덱스 설정과 실행 계획, 힌트의 사용 정도라면 이 강의에서는 근본적으로 어떤 방식으로 실행 계획이 생성되는지부터 특정 상황에서는 어떤 실행 계획을 사용하는 것이 효율적인가까지 굉장히 세세하게 가르치고 있습니다. 때문에 한 강의를 들었을 때 나오는 텍스트양만 해도 거의 100줄 정도는 가볍게 나옵니다. 양만 많으면 상관이 없는데 이..
SQL 튜닝을 공부중입니다 '권순용의 실전 SQL 튜닝'에 대해서 공부중입니다. 어디서 많이 봤던 이름이라고 생각했었는데 구루비에서 활동하시는 유명한 분이셨습니다. 이 강의를 듣게 되면 DB를 기본적으로 사용하면서 개념적으로만 알고 있던 것들. 또한 막연히 알고 있던 것들에 대해 분명히 알 수 있게 됩니다. 현재까지 공부하며 알게 된 부분은 아래와 같습니다. 1. 해당 쿼리에 사용되는 테이블의 내용을 대략적으로라도 알고 있어야 한다.2. 인덱스는 많은 고려가 필요하다.3. 실행 계획을 명확히 사용할 줄 알아야 한다. 위 세 가지 사항만 고려하더라도 많은 성능 향상이 있을 것으로 예상합니다. 제가 현재 맡고 있는 업무 중에는 다른 곳에서 제공하는 쿼리를 튜닝하여 필요한 데이터를 받아오는 배치가 있는데 이 업무시에 사용되는 쿼리 중 ..
ORA-00054 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다 오류문구ORA-00054 리소스가 사용 중이어서 NOWAIT가 지정되었거나 시간 초과가 만료된 상태로 획득합니다ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired 원인현재 리소스가 사용 중이라서 대기중인 상태라 응답을 할 수 없는 상황입니다. 주로 락이 걸려 있는 테이블에 접근할 시 나오는 오류 문구입니다. 아주 드문 경우로 대량의 데이터에 대한 쿼리를 수행할 때 발생하기도 합니다. 해결 방법1. Commit 혹은 Rollback을 실행가장 간단한 방법으로 대기중인 자원을 해제시켜줍니다. 2. 락이 걸린 테이블을 찾아 해제먼저 아래의 쿼리로 락이 걸린 테이블을 찾습니다. 12345678910SELECT O.OBJECT..
SQL 작성 규칙 SQL 작성시 준수사항1. 읽기 편리성 - 들여쓰기, 작성 형식 등을 통일하여 가독성을 향상2. 성능 보장 - 실행 계획을 통한 SQL 성능 보장3. 네이밍 준수 - 테이블 이름, 컬럼, 기본키 등 규칙에 맞추어 생성4. 일관적인 작성 - 대소문자 등 모든 SQL에 대해 일관성 유지 줄바꿈의 중요성12345678-- 한 줄SELECT 카드번호 FROM 거래 WHERE 거래일 = '20180906'; -- 여러 줄SELECT 카드번호FROM 거래WHERE 거래일 = '20180906'; Colored by Color Scriptercs 들여쓰기123456SELECT 카드번호FROM (SELECT 카드번호, 거래일자 FROM 거래 WHERE 지역 = '서울')WHERE 거래일자 = '20180906'ORDE..