728x90 반응형 IT 공부56 [SQL튜닝] 옵티마이저 [SQL튜닝] 옵티마이저 주요내용 옵티마이저의 개념 옵티마이저의 종류 옵티마이저의 레벨별 설정 RBO와 CBO의 실행계획 비교 학습목표 옵티마이저 종류에 따라 달라지는 데이터베이스 성능을 모니터링할 수 있다. CBO, RBO의 실행계획 확인을 통해 SQL 문장에 적합한 옵티마이저를 선택할 수 있다. 옵티마이저의 개념 옵티마이저 : 사용자가 실행한 SQL을 해석하고, 데이터 추출을 위한 실행계획을 수립하는 프로세스 옵티마이저의 종류 RBO(Rule Based Optimizer) : 초창기 버전부터 제공함 기본적으로 15개의 순위가 매겨진 규칙이 있음 -> 이를 기초로 해서 실행계획을 수립함 SQL에 대한 실행계획이 하나 이상일 경우, 순위가 높은 규칙을 이용하게 됨 수립될 실행계획이 예측 가능하기 때문에 .. 2024. 3. 7. [SQL튜닝] 실행계획 [SQL튜닝] 실행계획 주요내용 실행계획의 정의 실행계획 확인 방법 실행계획 분석 학습목표 SQL 문장의 실행계획을 통해 데이터베이스 성능을 모니터링할 수 있다. 실행계획을 통해 비효율적으로 수행되는 SQL문장의 개선항목을 도출할 수 있다. 실행계획의 정의 실행계획 : 사용자가 SQL을 실행하여 데이터를 추출하려고 할 때, 옵티마이저가 수립하는 작업절차SELECT A.ENAME, A.DEPTNO, B.DNAME FROM EMP A, DEPT B WHERE A.DEPTNO = B.DEPTNO; OPTIMIZER : SQL해석 > 실행계획 수립 > 실행 실행계획 확인 방법 1) EXPLAIN PLAN SQL에 대한 실행계획만을 확인할 수 있음 명령을 사용할 때 데이터를 처리하지 않음EXPLAIN PLAN S.. 2024. 3. 6. [JAVA] 암호 풀기(replace, parseInt) [설명] - 알파벳 대문자로 구성된 문자열 - 알파벳 한 문자마다 # 또는 *이 일곱 개로 구성 - #*****#를 7자리의 이진수로 변환(#은 이진수 1, *은 이진수의 0으로 변환) => 1000001 - 바뀐 이진수를 10진수로 변환 => 65 - 아스키 코드로 알파벳 변환 => A [입력 예시] 4 #****###**#####**#####**##** (문자의 개수*7만큼 특수문자가 입력됨) [출력 예시] COOL 풀이 import java.util.*; class Main { public String solution(int n, String s){ String answer=""; for(int i=0; i 2024. 1. 15. [JAVA] 문자열 압축하기 [입력] 첫 줄에 문자열이 주어진다. (문자열의 길이는 100이하) [출력] 첫 줄에 압축된 문자열을 출력 [입력 예시] AABCCCCCCCD [출력 예시] A2BC7D 풀이 import java.util.*; class Main { public String solution(String s){ String answer=""; s=s+" "; int cnt=1; for(int i=0; i1){ answer+=String.valueOf(cnt); } cnt=1; } } return answer; } public static void main(String[] args){ Main T = new Main(); Scanner sc = new Scanner(System.in); String str=sc.next().. 2024. 1. 15. [JAVA] 가장 짧은 문자거리 구하기 [입력] 첫 번째 줄에 문자열 s와 문자 t가 주어진다. (문자열과 문자는 소문자) 문자열의 길이는 100이하 [출력] 첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력 [입력 예시] teachermode e [출력 예시] 1 0 1 2 1 0 1 2 2 1 0 풀이 import java.util.*; class Main { public int[] solution(String s, char t){ int[] answer=new int[s.length()]; int p=1000; for(int i=0; i=0; i--){ if(s.charAt(i)==t) p=0; else{ p++; answer[i]=Math.min(answer[i], p); } } return answer;.. 2024. 1. 15. [SQLP] Redo 오라클은 데이터파일과 컨트롤 파일에 가해지는 모든 변경사항을 하나의 Redo 로그 엔트리로서 Redo 로그에 기록(데이터파일에 대한 변경은 캐시된 블록 버퍼를 통해 이루어짐) - Online Redo 로그 : Redo 로그 버퍼에 버퍼링된 로그 엔트리를 기록하는 파일이며, 최소 두 개 이상의 파일로 구성됨. 현재 사용 중인 Redo 로그 파일이 꽉 차면 다음 Redo 로그 파일로 로그 스위칭이 발생. 계속 Redo 로그를 써 나가다가 모든 Redo 로그 파일이 꽉 차면 다시 첫 번째 Redo 로그 파일로부터 재사용하는 라운드 로빈 방식 사용 - Offline Redo(Archived Redo) 로그 : Online Redo 로그가 재사용되기 전에 다른 위치로 백업해 둔 파일 Redo 로그의 3가지 목적 .. 2024. 1. 15. [SQLP] 버퍼 LOCK (1) 버퍼 LOCK - 두 개 이상의 프로세스가 동시에 버퍼 내용을 읽고 쓴다면 문제가 생길 수 있기 때문에, 캐시된 버퍼 블록을 읽거나 변경하려는 프로세스는 먼저 버퍼 헤더로부터 버퍼 LOCK을 획득해야 함 - 버퍼 LOCK을 획득했다면 래치를 곧바로 해제 - Share 모드 LOCK : 버퍼 내용을 읽기만 할 때 - Exclusive 모드 LOCK : 버퍼 내용을 변경하고자 할 때(한 시점에 하나의 프로세스만 얻을 수 있음) - 해시 체인 래치를 획득하고 목적한 버퍼를 찾았는데 다른 프로세스가 버퍼 LOCK을 Exclusive 모드로 점유하고 있다면, 버퍼 헤더에 있는 버퍼 LOCK 대기자 목록에 자신을 등록하고 일단 래치를 해제 - 대기자 목록에서 waiting → 버퍼 LOCK 해제됨 → 버퍼 .. 2024. 1. 15. [SQLP] DB 버퍼 캐시 DB 버퍼캐시 : 사용자가 입력한 데이터를 데이터파일에 저장하고 이를 다시 읽는 과정에서 거쳐가는 캐시 영역(SGA 구성요소) (1) 블록 단위 I/O : 오라클에서 I/O는 블록 단위로 이루어져 있음 - 블록 단위 처리(1) : 메모리 버퍼캐시 → 버퍼블록을 액세스할 경우 - 블록 단위 처리(2) : 데이터파일에 저장된 데이터 블록을 DB 버퍼 캐시로 적재할 경우 - 블록 단위 처리(3) : 캐시에서 변경된 블록을 다시 데이터파일에 저장할 경우 - DBWR 프로세스 : 버퍼 캐시로부터 변경된 블록(Dirty 버퍼 블록)을 주기적으로 데이터 파일에 기록하는 작업을 수행(성능향상을 위해 한 번에 여러 블록 처리) - 블록 단위로 읽는다는 의미 : 하나의 레코드에서 하나의 컬럼만을 읽고자 하더라도 레코드가 .. 2024. 1. 15. [SQLP] 오라클 기본아키텍처 오라클은 데이터베이스와 이를 액세스하는 프로세스 사이에 SGA(System Gloval Area 또는 Shared Global Area)라고 하는 메모리 캐시 영역을 두고 있다. ※ SGA는 서버 프로세스와 백그라운드 프로세스가 공통으로 액세스하는 데이터와 제어 구조를 담는다. 디스크를 경유한 입출력 : 물리적으로 액세스 암이 움직이면서 헤드를 통해 데이터를 읽고 씀 메모리 캐시를 통한 입출력 : 전기적 신호에 불과하기 때문에 디스크 I/O에 비교할 수 없이 빠름 많은 프로세스가 동시에 데이터를 액세스 → 사용자 데이터를 보호하는 Lock은 물론 공유 메모리 영역인 SGA상에 위치한 데이터 구조에 대한 액세스를 직렬화 하기 위한 LOCK 메커니즘(Latch, 래치)도 필요 오라클은 블록 단위로 읽고, 저.. 2024. 1. 14. [JAVA] 숫자만 추출하기 [입력] 첫 줄에 숫자가 섞인 문자열이 주어짐(단, 문자열의 길이는 100을 넘지 않음) [출력] 첫 줄에 자연수를 출력 [입력 예시] a0bc1D3e5fJhij [출력 예시] 135 풀이 import java.util.*; class Main { public int solution(String s){ //int answer=0; String answer=""; for(char x : s.toCharArray()){ //if(x>=48 && x 2024. 1. 12. 이전 1 2 3 4 5 6 다음 728x90 반응형