전체 글122 2장. [옵티마이저] 2-1. 옵티마이저란? 1. 옵티마이저 뭐 사전적 정의 이런거는 많이들 봤을 테고, 그냥 단순하게 사용자를 대신해서 프로그래밍 해주는 서포터라고 보면 된다. 아이언맨의 자비스, 배트맨의 루시우스 폭스 같은 느낌이랄까?? 여튼 고스트바둑왕의 느낌으로 다가 우리는 SQL을 잘 작성만 해주면 된다. 굳이 멋지게 정리하자면, 사용자가 원하는 작업을 가장 효과적으로 실행 할 수 있는 최적의 경로를 선택해서 자동으로 프로시저를 생성해주는 DBMS의 핵심엔진이다. 2. 4세대 언어 SQL은 구조화된 질의어이다. 그러니까 우리는 육하원칙에 따라 질문하는 것 처럼 논리적인 기획과 설계를 바탕으로 결과 집합을 요구하는 쿼리를 작성한다. 어떤식으로 처리되는지? 그런 프로세스를 직접 기술하지는 않는다. 3. 실행계획과 비용 사용자의 구조화된 질문 .. 2021. 10. 8. 1장. [SQL 분석 도구] 1-5. DBMS_XPLAN 패키지 DBMS_XPLAN 란? 오라클 9? 버전부터 제공되는 패키지라고 한다. Plan_Table에 저장된 실행계획들을 좀 더 편하게 볼 수 있는 자체 라이브러리? 같은 거라고 생각하면 될 것 같다. 사용법 여러가지 방법이 있으나 다 요새는 대부분 10 이상 버전을 쓰기 때문에 기본적으로 Plan_Table과 Synonym이 생성되어 있다. 아래와 같은 방법을 사용하면 편하게 실행해 볼 수 있다. 힌트 /*+ gather_plan_statistics */ 구문 추가 select /*+ gather_plan_statistics */ * from 테이블 통계를 보고자 하는 쿼리에 /*+ gather_plan_statistics */ 를 추가한다. 세션 ALTER ALTER SESSION SET "_rowsourc.. 2021. 10. 7. 1장. [SQL 분석 도구] 1-4. V$SQL 트레이스의 치명적인 단점 : 파일이 서버에 저장된다. 그래서 개발자 입장에서는 권한의 문제가 있을 수 있다. 요즘에는 보안의 문제가 상당히 중요해졌기 때문 V$SQL 이란? SQL에 대한 모든 정보를 결과로 보여주는 것 V$SQL 은 라이브러리 캐시에 캐싱돼 있는 각 Child 커서에 대한 수행통계를 보여준다. 하여 해당 결과를 바탕으로 튜닝의 대상을 용이하게 선정할 수 있게 도와준다. 쿼리의 수행속도 자체에 대해서 고민할 때는 SQL의 블록 단위별 개수를 파악해서 튜닝대상을 선정한다. CPU의 성능에 대해서 고민할때는 각 블록 단위별 수행횟수를 파악해서 튜닝대상을 선정한다. select sql_id, child_number, sql_text, sql_fulltext, parsing_schema_name.. 2021. 10. 6. 1장. [SQL 분석 도구] 1-3. 트레이스 수집 트레이스를 수집 및 분석하는 것은 튜닝의 시작과 끝이라고 할 수 있다. 그 정도로 중요하다. 1. 트레이스 수집 /* 수집시작 */ alter session set sql_trace = true; /* 수집 종료 */ alter session set sql_trace = false; 해당 명령어를 실행하면 트레이스를 수집해서 DB 서버에 저장 된다. 2. 트레이스 파일 찾기 /* 트레이스 파일 위치 */ SELECT r.value || '/' || LOWER(t.instance_name) || '_ora_' || ltrim(to_char(p.spid)) || '.trc' trace_file FROM v$process p, v$session s, v$parameter r, v$instance t WHERE.. 2021. 10. 5. 1장. [SQL 분석 도구] 1-2. AutoTrace 명령어's 쿼리를 실행하기 전에 아래 명령어를 실행하고 쿼리를 수행하면 각각의 분석결과를 자동으로 출력해준다. 1. set autotrace on : 쿼리 수행 결과, 실행계획, 실행통계를 출력 2. set autotrace on statistics : 쿼리 수행 결과, 실행통계 출력 3. set autotrace on explain : 쿼리 수행 결과, 실행계획 출력 4. set autotrace traceonly : 실행계획, 실행통계 출력 5. set autotrace traceonly statistics : 실행통계 출력 6. set autotrace traceonly explain : 실행계획 출력 7. set autotrace off : 트레이스 출력 안함, 이게 default 직접 하나의 쿼.. 2021. 10. 4. 1장. [SQL 분석 도구] 1-1. Explain Plan @?/rdbms/admin/utlxplan.sql 1. 튜닝 쉽게 이해하기 내 기준에서다. 평소 축구를 즐겨보기에 축구라는 종목을 기준으로 SQL 튜닝을 이해해보려고 한다. 1. 실행계획 SQL 튜닝하기 위해서는 실행계획이 파악하는 것이 중요하다. 그 실행계획을 분석하여 어떻게 튜닝할 지를 결정할 수 있기 때문이다. 내가 한 구단의 감독이라면, 이 실행계획을 가볍게 스쿼드를 짜는 것이라고 생각하면 될 것이다. 예산은 정해져 있기 때문에, 각 포지션의 어떤 선수를 영업할 것인지 11명의 선수로 어떤 포메이션을 할 것인지 감독은 다양한 관점으로 생각해 둔다. Auto Trace Auto Trace는 쿼리 수행 결과와 계획 통계를 sql이 알아서 출력해주도록 설정해주는 것이다. 감독이 해당 선수를 가볍게 검증.. 2021. 10. 3. [SQL 튜닝] SQL 튜닝의 시작 SQL 튜닝을 시작하며... SQL은 RDBMS의 데이터를 관리하기 위하여 특수 하게 프로그래밍 한 언어이다. 구조화 질의어 (Structured Query Language) 라고하는데, 그냥 나는 조금 쉽게 아무 말이나 하는게 아니라 육하원칙에 의거하여 물어보는 것이다? 정도로 이해했다. 예를 들면 재판장에서 검사나 변호사가 증인을 심문하는 과정이랄까?... 뭐 아무튼 논리적인 사고를 통해 어떤 질문을 할 것인지 정하고 실제로 그 논리적인 사고를 바탕으로 내 입을 통해 물리적인 질문을 하게 된다. 이걸 SQL로 치면 어떤 질문을 할 것인지 정하는 과정 자체가 SQL 쿼리를 작성하는 것 이라고 이해하면 될 것 같다. 그리고 실제로 본인이 생각한대로 보통 입밖으로 말을 꺼내게 되지만 간혹 내가 생각지도 못.. 2021. 10. 2. 오픈채팅방 / 프로그래머스 연습문제 / programmers / level2 / Java https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 이번문제는 복잡한 것 같지만 원리는 간단한? 문제이다. 오픈채팅방의 로그를 단순히 반복하는 코드만으로는 시간초과로 풀기 어려울 것이다. 따라서, List/Set/Map 같은 걸 익혀 두고 풀어보는 것이 좋다. 가볍게 정리하자면, List : 순서가 있다. 데이터가 중복이 가능하다. Set : 순서가 없다. 데이터 중복이 불가능하다. Map : Key=Value의.. 2021. 8. 6. 짝지어 제거하기 / 프로그래머스 연습문제 / programmers / level2 / Java https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 역시 레벨2는 쉽게 풀리지 않는다. 1레벨 처럼 for, if, while 만으로도 풀수는 있겠으나, 효율성 측면에서 실패한다. 하여 본격적으로 자바의 Stack을 활용해보기로 했다. [알고리즘 flow] 1. Stack 선언 2. 문자열의 길이만큼 for 문 실행 3. Stack이 비어있으면 push 4. 맨위의 스택과 s.charAt(i) 비교 .. 2021. 8. 5. 이전 1 2 3 4 5 ··· 14 다음