본문 바로가기

빅데이터과정

#48_140821_R_SUBQUERY # SUBQUERY >> JONES의 월급보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력 > emp[emp$sal>jonessal, c("ename","sal")] ename sal8 SCOTT 30009 KING 500013 FORD 300015 JACK 3200 >> 가장 최근에 입사한 사원의 이름과 입사일 출력 > emp[as.Date(emp$hiredate) == maxhire, c("ename","hiredate")] ename hiredate11 ADAMS 1987-05-23 >> KING에게 보고하는 사원들의 이름을 출력 > king emp[emp$mgr==king,"ename"][1] JONES BLAKE CLARK >> 관리자인 사원들의 이름을 출력 > emp[emp$empno %.. 더보기
#48_140821_R_COUNT # COUNT l count를 위한 환경설정 1. 홈페이지 접속http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2. windows x64 다운 3. library 설치install.packages("KoNLP")install.packages("wordcloud")install.packages("plyr")library(KoNLP)library(wordcloud)library(plyr) 4. R 프로그램 다시 시작 n 예제 활용 > emp count(emp$job) x freq1 ANALYST 22 CLERK 53 MANAGER 34 PRESIDENT 15 SALESMAN 4 useSejongDic()- .. 더보기
#48_140821_R_JOIN # JOIN l 오라클 조인문법 사용 l R에서 조인문법 구현- merge 함수 사용 n R에서 조인 사용 >> 이름과 월급, 부서위치와 부서번호를 출력 > merge(emp[ ,c("ename","sal","deptno")], dept[ ,c("deptno","loc") ],by="deptno" ) deptno ename sal loc1 10 KING 5000 NEW YORK2 10 MILLER 1300 NEW YORK3 10 CLARK 2450 NEW YORK4 20 SMITH 800 DALLAS5 20 JONES 2975 DALLAS6 20 FORD 3000 DALLAS7 20 ADAMS 1100 DALLAS……………………………….- 양쪽에 by에 쓴 deptno가 양쪽에 있어야한다 >> DALLA.. 더보기
#48_140821_R_GROUP 함수 # GROUP 함수 l 그룹함수 l 그룹함수 종류- max, min, sum, mean, length, range n 활용 예제 > car > 전국에서 교통사고가 가장 많이 발생하는 지역은 어디인가? > car[car$cnt==max(car$cnt),c("year","city","loc","cnt")] year city loc cnt256 2009 서울 강북구 박내과옆 먹자골목 66 >> 직업, 직업별 최대월급을 출력하시오 > aggregate(sal~job, emp, max) job sal1 ANALYST 30002 CLERK 32003 MANAGER 29754 PRESIDENT 50005 SALESMAN 1600 >> 부서번호, 부서번호별 토탈월금 출력 > aggregate(sal~deptno, em.. 더보기
#47_140819_R_함수 # 함수 l 함수의 종류 1. 문자- toupper, tolower, substr, length 2. 숫자- power 3. 날짜- difftime, Sys.Date() 4. 변환- as.numric(), as.character(), as.vector(), as.matrix(), as.data.frame(), as.factor(), as.logical(), as.Date() 5. 일반- ifelse 6. 원리- emp[행 , 열 ] : emp data frame에서 특정행과 열을 조회- data.frame( ) : data.frame(vector, vector, vector) l as.difftime- units = (days,mins,hours,weeks)- l ls()- 어떤 변수가 존재하는지 출력 .. 더보기
#47_140819_R_정렬 # 정렬 l data frame에서 data를 정렬하는 키워드- order l data정렬을 지원하는 패키지> install.packages("doBy")> library(doBy) l 변환함수1. as.numric()2. as.character()3. as.vector()4. as.matrix()5. as.data.frame()6. as.factor()7. as.logical()8. as.Date() n 활용 예제 >> 이름과 월급을 출력하는데 월급이 높은 사원부터 출력 > emp[order(sal,decreasing=T), c("ename","sal")] ename sal9 KING 500015 JACK 32008 SCOTT 300013 FORD 30004 JONES 29756 BLAKE 28507 .. 더보기
#47_140819_R_연산자 # 연산자 l 연산자의 종류 3가지 1. 산술 연산자- + , - , * , / : 덧셈, 뺼샘, 곱셈, 나눗셈- %% : 나눈 나머지값- %/% : 나누기(나머지값을 버림)> 5/2[1] 2.5> 5%%2[1] 1> 5%/%2[1] 2 2. 비교 연산자- > , = , = 1000 & emp$sal install.packages("data.table")- > library(data.table) l SQL 쿼리를 쓰기 위한 package 설치 > install.packages("sqldf") installing the dependencies ‘gsubfn’, ‘proto’, ‘RSQLite’, ‘RSQLite.extfuns’, ‘DBI’, ‘chron’ URL 'http://cran.nexr.c.. 더보기
#47_140819_R_R의 기본 # R의 기본 l R 이란?- 뉴질랜드 University of Auckland 대학의 Robert Gentleman 과 Ross Ihaka이며 1995년 개발함. R 은 데이터 분석을 위한 통계 및 그래픽스를 지원하는 자유 소프트웨어 환경이다. 그 뿌리는 벨 연구소에서 만들어진 통계 분석 언어 S에 근간을 두고있다.- http://cran.nexr.com/ 작업디렉토리 변경 > data 압출파일을 압축 푼 폴더 > emp empempno ename job mgr hiredate sal comm deptno1 7369 SMITH CLERK 7902 1980-12-17 800 NA 202 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 303 7521 WARD SALESMA.. 더보기
#46_140818_RAC_TAF # TAF(Transparent Application Failover) yudb_taf= (DESCRIPTION = (address_list= (load_balance=on) (failover=on) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.110)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.120)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = yudb) (failover_mode=(type=select)(method=basic) ) )) l TAF(Transparent Application Failover)- 내가 접속한 노드의 instance가 다운됐을 때.. 더보기
#46_140818_RAC_GLOBAL ENQUEUE WAITS # GLOBAL ENQUEUE WAITS l SQ enqueue에서 order와 noroder- SQ enqueue : sequence에서 cache로 설정된 다음 sequence 값을 할당 받을 때 사용하는 enqueue n RAC환경에서 sequence를 생성할 때 order, noorder 파라미터의 테스트 SQL#1> connect scott/tigerSQL#1> create sequence seq9 start with 1 increment by 1 maxvalue 100 cache 20 order;SQL#1> select seq9.nextval from dual;NEXTVAL---------- 1# 2번째 노드SQL#2> select seq9.nextval from dual;NEXTVAL----.. 더보기
#45_140814_RAC_GC EVENT # GC EVENT l 대기 이벤트들을 class로 묶어 놓은 리스트 확인방법 SQL#1> select distinct wait_class from v$event_name;WAIT_CLASS----------------------------------------------------------------ConcurrencySystem I/OUser I/OAdministrativeOtherConfigurationSchedulerCluster -> RAC 관련 대기이벤트들의 클리스ApplicationIdleNetworkCommit n buffer busy wait 대기 이벤트가 어느 클래스인지 확인 SQL#1> select name, wait_class from v$event_namewhere name='b.. 더보기
#45_140814_RAC_CACHE FUSION # CACHE FUSION l RAC 환경에서 데이터 전송- GRD(Shared pool에 존재) : 내가 찾고자 하는 데이터 버퍼가 어느 노드에 있고 어느 스토리지에 있는지 위치정보와 락정보가 들어있는 공간 n Cache fusion 테스트를 위한 환경구성SQL#1> create table rac_test( id number ); 2SQL#1> insert into rac_test values(1);SQL#1> commit;SQL#1> select dbms_rowid.rowid_relative_fno(rowid) as fno, dbms_rowid.rowid_block_number(rowid) as blkno from rac_test; 2 3- rac_test 테이블의 file 번호와 block 번호 알.. 더보기
#44_140813_RAC_TUNING # RAC TUNING l RAC튜닝 환경구성 1. vmware로 시스템 접속- oracle/oracle- startx 2. owi.zip 파일을 $ORACLE_HOME 폴더에 압축을 푼다 3. install 수행16:32:57 SQL#1> @installElapsed: 00:00:00.00 SID SERIAL# SPID---------- ---------- ------------ 153 32 10768Elapsed: 00:00:00.00Input data file name(for default tablespace ex. c:\owi\owi01.dbf): +datase mode on?[ON/OFFVerbo]: on 4. 다른 instance 설치# rac1 putty 에서$ scp owi.zip rac2.. 더보기
#44_140813_RAC_DATAFILE 복구 # DATAFILE 복구 l Storage 3가지 1. ASM(Automatic storage management)- 공유 스토리지 2. Cluster file system- 공유 스토리지 3. Raw divice- 각 노드의 file system n Archive log file 확인하는 쿼리- SQL> select name from v$archived_log; l RAC 환경에서 복구 순서- archive file이 공유 storage에 있다면 하나의 instance만 올려서 수행가능하다- 그러나 만약 archive file이 raw device면 각각의 노드의 file system에 저장되는데 이 때는 하나의 노드에 모든 archive file을 모아서 수행해야 한다 1. 모든 instance sh.. 더보기
#43_140812_RAC_전자지갑 # 전자지갑 l RAC 환경에서 전자지갑- 테이블의 특정 data를 못보게 할 때 사용 n 전자지갑 테스트 >> cd /u01/app/oracle/product/10.2.0/db_1/network/admin( cd $ORACLE_HOME/network/admin) 으로 이동해서 sqlnet.ora 파일에 아래의 내용을 추가한다 $ vi sqlnet.ora NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)cd $ORACLE_HOME/network/admin NAMES.DIRECTORY_PATH= (TNSNAMES)ENCRYPTION_WALLET_LOCATION= (SOURCE=(METHOD=FILE)(METHOD_DATA= (DIRECTORY=/u01/app/oracle/pro.. 더보기
#43_140812_RAC_PARAMETER # PARAMETER l RAC 환경에서 parameter file 관리1. parameter file : 인스턴스의 구조정보2. RAC 환경에서는 파라미터 파일이 공유 디스크에 있고 양쪽 인스턴스에서 같은 파라미터 파일을 공유해서 사용한다 n Spfile parameter 값 확인 SQL> SELECT sid, NAME, VALUE FROM v$spparameterWHERE NAME = 'db_file_multiblock_read_count'; - SID가 * 이기 때문에 모든 인스턴스가 16 값을 가지는 것을 의미한다- SID 3가지: * - 모든 인스턴스: yudb1 - 1번 인스턴스: yudb2 :-2번 인스턴스 >> db_file_multiblock_read_count 파라미터를 64로 변경 S.. 더보기
#43_140812_RAC_INSTANCE STOP START # INSTANCE STOP START l RAC Instance를 stop, start 하는 방법 1. SQL#1> shutdown immediate- 1번만 내려간다- 다른 instance에 영향을 주지 않는다 2. shutdown transactional- 인스턴스에 DML 작업을 하고 있는 Session의 commit 혹은 rollback 수행한 이후에 종료한다 3. srvcl 명령어- 동시에 인스턴스를 내렸다가 올리는 명령어- $ srvctl start instance -d yudb -i yudb1,yudb2- $ srvctl stop instance -d yudb -i yudb1,yudb2- $ srvctl start database -d yudb -o open: open 부분에 nomount.. 더보기
#43_140812_RAC_UNDO TABLESPACE # UNDO TABLESPACE l Undo tablespace- rollbackk을 지원하는 역할을 한다- flashback query, flashback table 을 지원하는 undo data를 저장한다 n Undo tablespace 확인- undo tablespace가 각각의 인스턴스에 분리되어 있는지 확인 # 1번 Session SQL#1> show parameter undo_tablespace NAME TYPE VALUE------------------------------------ ----------- ---------------------------undo_tablespace string UNDOTBS1 # 2번 Session SQL#2> show parameter undo_tables.. 더보기
#43_140812_RAC_REDO LOG FILE # REDO LOG FILE 1. 노드간 select를 하는 경우의 데이터 흐름- Scott이 노드1번에 접속하고 아래와 같은 쿼리를 보냈다면 버퍼캐시에 데이터가 있으면 가져다 쓰고 아니면 디스크에서 캐시로 전달해서 쓴다select ename,sal from emp where ename=’KING’- 이 상황에서 2번 노드에서 아래와 같이 쿼리를 날린다면 1번 노드에서KING의 데이터를 조회했기 때문에 1번 노드에서 데이터를 가져온다. 이것은 양쪽 노드간에 interconnect가 되어있기 때문이다.select ename, sal, from emp where ename=’KING’ 2. 노드간 update 하는 경우의 데이터 흐름- 만약에 아래와 같이 node1에서 업데이트를 한 상태에서 아직 commi.. 더보기
#43_140812_계층적질의문 # 계층적질의문 계층적질의문(SYS_CONNECT_BY_PATH) # 순방향SELECT ename, SYS_CONNECT_BY_PATH(ENAME||'('||sal||')','/') employeeFROM EMPSTART WITH ename='KING'CONNECT BY PRIOR EMPNO = MGR SELECT ename, LEVEL, LPAD(' ', 2*LEVEL)||SYS_CONNECT_BY_PATH(ENAME,'/') PATH FROM EMP START WITH ename='KING'CONNECT BY PRIOR EMPNO = MGR; # 역방향SELECT ename, LEVEL, SYS_CONNECT_BY_PATH(ENAME||'('||sal||')','/') employeeFROM EMPS.. 더보기
#42_140811_OWI_REDO LOG BUFFER # REDO LOG BUFFER l Redo log buffer에 관한 대기 이벤트 - log buffer space- log file sync l Redol buffer 내용을 Redo logfile에 기록하는 시점 - 매 3초마다 - log buffer의 1/3 또는 1MB 가 저장될 때 - user process가 commit또는 rollback으로 transaction을 종료할 때 (log force as commit) - DBWR process에 의해 신호를 받을 때(Write ahead logging) l Redo log 관련한 튜닝방법 처리 1. log buffer의 사이즈를 늘린다 2. commit을 너무 적게 사용 하도록 프로그래밍한다 3. storage를 빠른 스토리지로 구성한다 l L.. 더보기
#44_140811_OWI_LOCK # LOCK l 오라클의 Lock 발생에 대한 정리 표 - RS : Row shared- RX : Row exlusive- X : exclusive- 예를 들를 RX mode인 insert, update, delete 같은 명령어를 한 세션에서 수행하면 exclusive인 alter나 drop를 같은 세션인 다른 terminal에서는 수행할 수 없다 n Lock Mode 테스트 # scott 계정SQL> update emp set sal = 8000 where ename='KING'; # 다른 terminal 창의 scott 계정 SQL> drop table emp; ERROR at line 1:ORA-00054: resource busy and acquire with NOWAIT specified or.. 더보기
#44_140811_RAC_환경구성 # RAC 환경구성 l Application Cluster의 약자)- 진짜 응용 프로그램의 집단 l RAC 사용해야 하는 이유 1. 가용성 : 내가 접속한 인스턴스가 다운이 돼도 지속적인 서비스를 지원받을 수 있는 것2. 확장성 : 하나의 storage에 여러 개의 server를 계속해서 확장가능 하게 하는 것 l Shared Storage- Raw Device : 가장 보편적으로 사용- Clustered File System : 적용 사례가 늘어나고 있음- ASM(Automatic Storage Management) : 오라클이 자동으로 OS의 storage를 관리 n RAC 환경구성 1. rac1 폴더에서 rac1.vmx 파일을 텍스트 파일로 open- 경로명에서 D:\ 를 C:\ 로 변경 2. ra.. 더보기
#41_140808_OWI_I/O EVENT # I/O EVENT l Direct path I/O 가 발생하는 경우 1. 정렬작업 2. prallel 힌트를 쓴 쿼리문 3. parallel 힌트를 쓴 dml 문 4. insert /*+ append *? into 테이블명 5. SQL*Loader 사용시- $sqlldr scott/tiger control=control01.ctl direct = y l Buffer cache를 통과하는 Conventional path I/O 일때 발생하는 이벤트 1. db file sequential read- index를 넓게 읽으면서 테이블을 엑세스 할 때 발생- 해결 방법 - index를 넓게 읽지 않도록 해야 한다: SQL 튜닝: 인덱스 재구성 2. db file scattered read- full tabl.. 더보기
#41_140808_OWI_DB BUFFER CACHE # DB BUFFER CACHE 1. DB buffer cache의 용도- database의 data file에서 읽은 데이터를 메모리에 올려놓으면 다음번에 빠르게 데이터를 검색할 수 있게 하기 위한 용도 2. DB buffer cache의 성능 저하로 발생하는 대기 이벤트 1) buffer busy wait- 하나의 buffer 안의 특정 data를 읽거나 수정하려면 buffer lock을 획득해야 하는데 이 락을 누가 쓰고있다면 waiting 하는데 이떄 발생하는 대기 이벤트이다- 특정 버퍼안의 데이터에 대해 update가 집중되는 경우 buffer busy wait이 발생한다- busy buffer wait를 해결하는 방법: 테이블의 pctfree를 늘림(pct free와 HWM과의 차이점은 pct.. 더보기
#40_140807_OWI_ROW CACHE LOCK # ROW CACHE LOCK l Row cache lock- sequence의 캐쉬속성을 nocache로 했을 때 발생하는 대기 이벤트 l Row cache lock 테스트 n Awr reportSQL> connect owi/owiSQL> alter sequence seq_sq_enqueue nocache;SQL> exec dbms_workload_repository.create_snapshot;SQL> @execEvent name to simulate: sq_enqueueSession count [10]: 10Expired by time(1) or looping count(2) [1]: 1Execution internval(sec or count) [30]: 120Enable_trace (1=TRUE.. 더보기
#40_140807_OWI_ENQUEUE # ENQUEUE l LOCK 1. Latch : 메모리를 보호하기 위한 락2. enqueue : 디스크를 보호하기 위한 락3. Enqueue의 종류- TX enqueue : update 하려다 wating 할때 발생하는 현상- SQ enqueue : 동일한 sequence를 서로 사용할 때 wating 하는 현상- HW enqueue : 동일한 테이블에 서로 동시에 insert하려 할 때 wating 하는 현상- US enqueue : Undo segment를 서로 사용하려 할 때 발생하는 waiting 현상 l LOCK 테스트 - 2개의 터미널 창으로 동시에 scott 계정으로 접속한다- 양쪽 동시에 update 문으로 scott의 월급을 접근하면 한쪽은 Lock이 걸린다 # SQLGATE # ORA.. 더보기
#40_140807_OWI_UPDATABLE JOIN VIEW # UPDATABLE JOIN VIEW l updatable join view - 아래의 update 문장은 90만건 이상을 가진 테이블을 update 하는문장인데 이런 경우에 메인쿼리를 읽고 서브쿼리를 읽어들이기 때문에 date_id의 rn이 맞는 row를 하나하나 찾아서 90만* 90만 = 1800만 건의 update를 수행한다- 이럴 경우 updatable join view가 필요하다- 이 조인방법은 다른 조인방법에 비해서 속도가 빠르다 update sales200 s set date_id = ( select date_idfrom time2 t where t.rn = s.rn ); l updatable join 예 - 위 쿼리를 보면 emp_loc 컬럼은 비어있는 컬럼이고 dept_loc는 각각의 .. 더보기
#40_140807_OWI_LATCH # LATCH l Lock 1. Latch : 메모리를 보호하기 위한 락- 대기 이벤트가 latchf를 잡을 떄 많은 CPU가 사용되기 때문에 느려진다- Latch는 잡아서 사용하기가 어렵다- Latch는 내가 확보해놓은 공간을 다른 것들이 쓰지 못하게 한다 2. enqueue : 디스크를 보호하기 위한 락 l Latch 테스트 16:35:30 SQL> @execEvent name to simulate: cache_buffers_chains_latchSession count [10]: 30Expired by time(1) or looping count(2) [1]: 1Execution internval(sec or count) [30]: 60Enable_trace (1=TRUE, 0=FALSE) [0]:.. 더보기
#40_140807_OWI_WAIT EVENT # WAIT EVENT l SQL 튜닝을 해도 전반적으로 오라클 DB의 성능이 저하되는 문제가 발생 한다면 OWI 활용한 서버튜닝을 해야한다 1. OWI(Oracle Wait Interface) : 오라클에서 발생하는 성능상의 문제들에 대해서 오라클 개발자들이 원인에 대한 현상을 정의했는데 그 현상의 이름이 대기 이벤트이다- 예) Oracle wait event 목록 확인SQL> select name from v$event_name; 2. 총 대기시간(Response time) = 서비스 시간(Cpu time) + 대기시간(wait time) Wait event 테스트 1. Orange ~> tool ~> session monitor 2. Orange- update 문이 왜 오래 걸리는지 이유를 알려주고.. 더보기