전체 글 265

Parallel Distribution 이 잘 안되는 경우에 이렇게 하기... CASE 별로 내부 힌트 확인~

상황: 테이블 크기 A >> B A = B(+) GROUP BY A B가 훨씬 작기 때문에 broadcast 해야 효율적인데 outer join 관계라 driving(outer) table이 될수 없는데... 결론부터 말하면, 1. LEADING 이나 USE_HASH 등의 테이블 지정 순서는 원래 규칙대로 한다. (outer join 이라 driving 이 될 수 없는 규칙 그대로) 2. PQ_DISTRIBUTE 에도 1번 규칙대로 inner table을 B로 하되, inner 쪽 규칙을 broadcast 로 한다. 3. swap_join_inputs 를 B로 지정하여, driving(outer) table 순서만 바꿔준다. CASE 1) OK /*+ leading(A) use_hash(B) full(..

DB 2011.12.08

Oracle Parallel SQL Tuning 정리

1. 관련 파라미터 확인 (특히 Max DOP(degree of parallelism)) For a single instance, DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT For an Oracle RAC configuration, DOP = PARALLEL_THREADS_PER_CPU x CPU_COUNT x INSTANCE_COUNT Oracle RAC 환경의 경우, Oracle RAC services를 사용해서 특별히 node 개수를 한정하지 않는한 위의 공식이 적용된다고 한다. * 자동 여부 PARALLEL_DEGREE_POLICY : manual, auto, limited 확인 PARALLEL_MIN_TIME_THRESHOLD : plan 상 예측시간 이상시 p..

DB 2011.12.08

Multithread 환경에서의 JDBC 사용

thread 를 이용해 여러개의 connection을 생성해 DB에서 읽어온 데이터를 가지고 작업할 일이 있었으나, jdbc 가 thread-safe 하지 않아서 인지 자꾸 오류가 나는 것이었다. (분명 다른 connection인데 같은 statement, resultset 를 생성하여, 더이상 읽어온 값이 없다는 오류를 뱉는 둥...) 최대한의 동시성을 유지하면서 무결성이 깨지지 않는 동기화 수준을 정리할 필요성을 느낌... [Connection] - DriverManager 수준 synchronized(DriverManager.class) { conn = (Connection)DriverManager.getConnection(jdbcUrl, dbProp); } [Statement, PreparedSt..

Programming/Java 2011.11.02

View Close Event (pre-closing)

[Pre-closing] View 닫기 전에 체크... implements ISaveablePart2 해준후, interface 메소드 구현하도록 추가한 후, public boolean isDirty() public boolean isSaveOnCloseNeeded() 위 두개는 true 를 리턴하도록 수정하고, public int promptToSaveOnClose() 를 재정의 해주면 된다. http://e-rcp.blogspot.com/2007/09/prevent-that-rcp-editor-is-closed.html [Post-closing] View 활성화 및 닫은 후 체크 IPartListener

wordpress 설치...

업무용 블로그가 필요해, 급하게 APM + wordpress 설치 후, 테스트 해보던 중 한글명 파일 업로드시 자꾸 오류가 났다. 소스를 따라가다 보니 sanitize_filename 이란 함수에서 특수문자들을 별도의 규칙으로 정리하고 있었다. 해당 함수에서 return 하는 2줄 앞에서 아래처럼 $filename 을 바꿔주면 정상 동작한다. 물론 기존 한글 파일명은 보존되지 않는다. 업로드시 별도로 메타 데이터(파일 제목이란 이름으로)를 보관하므로, 크게 상관은 없을 듯하다. $filename = preg_replace("/([가-힣]+)/ise", 'base64_encode(₩'$filename₩')', $filename); 출처: http://sirini.net/blog/?p=932

사용기 2011.10.26

dc_sequences

RAC 환경에서 sequence 관련 장애가 있어 분석중에 찾은 내용 (don't forget!) sequence cache의 크기를 늘리고, ORDER 보다 NOORDER 로 하는 것이 경합을 줄일 수 있다. (NOCACHE 금지) Generally, sequences can be cached with cache values as high as 200 in RAC. This is much higher than for a regular Oracle instance. If there is insufficient caching, contention can result and will show up as an increase in service times. If there are performance prob..

DB 2011.10.26

VIEW@DBLINK 와 조인할 때 JOIN 순서 조절은?

JOIN 자체를 외부 DB에서 수행하려면, /*+ DRIVING_SITE(EXT_TABLE) */ 을 사용한다. -> 보통 외부 DB의 TABLE이 큰 경우, 작은 내부 DB DATA 를 그쪽으로 보낸후 JOIN 이후의 결과를 받는 방식 LEADING 등의 힌트가 안 먹을때는? 그냥 테이블, 뷰 순서 바꾸고 ORDERED 힌트 적용하면 먹힘 -> Query Transformation 등으로 인해 Query Block 이 바뀔수 있어 명시적으로 이름을 지정하는 LEADING 힌트가 안먹을 때가 있는 것 같다. 10053 Trace 확인하면 정확한 BLOCK 명이 나오려나?

DB 2011.10.03