본문 바로가기

전체 글

(15)
오라클 2PC Pending Transaction 모니터링 및 제거 도구 분산 트랜잭션을 사용하다 보면 2PC Pending의 발생은 골치 아픈 문제이다. 2PC Pending은 2 Phase Commit에서 첫단계인 Prepare 단계는 이루어졌으나 두번째 단계인 commit이나 rollback을 받지 못해 In-Doubt 상태에 있는 트랜잭션이다. 데이터 베이스는 트랜잭션 매니저가 아니기 때문에 스스로 commit이나 rollback을 판단할 수 없어 트랜잭션 매니저인 WAS가 판단해 줄 때까지 계속 2PC Pending 상태에 있게 된다. 2PC Pending이 문제가 되는 것은 데이터베이스 입장에 해당 레코드의 현재 값을 알 수 없기 때문에 해당 건을 엑세스하는 Select, Insert, Update하는 SQL들 모두가 "ORA-01591: lock held by i..
SAX Parser를 사용하여 XPath와 유사하게 액세스하는 성능개선 모듈 XPath를 사용하여 액세스하는 XML을 파싱하여 값을 추출하는 프로그램이 있었는데 9MB를 파싱하는데 속도가 너무 느려 대체용으로 개발한 소스로 9MB를 파싱하여 모든 값을 추출하는데 2초정도 소요됩니다. 액세스는 XPath와 유사하게 접근하지만 빠른 접근을 위해 사용법은 조금 다르다. XMLSSearcher searcher = new XMLSSearcher(); searcher.parse("C:\\temp\\test.xml"); System.out.println("List Size:" + searcher.getSize("/Configuration[1]/Loggers[1]/Logger")); System.out.println("Element:" + searcher.getValue("/Configurat..
WAS 인스턴스 캐시 WAS 내 모든 스레드가 공유하여 사용하는 인스턴스 캐시 소스로 기능은 아주 단순하여 설정된 시간(경과시간)기준으로만 데이터 생명주기가 관리됩니다. 본디 복잡한 구조의 캐시를 싫어하는지라 이런 간단한 캐시를 좋아합니다. 이 캐시도 실제 천억 이상의 프로젝트에서 적용되어 돌고 있는 코드입니다. InstanceTimeCache.put(key, data, TimeCacheData.PERIOD); Object object = InstanceTimeCache.get(key); InstanceTimeCache.clear(); InstanceTimeCache.clear(key); 어럽게 생각하지 않으면 캐시는 아무것도 아닙니다. 그냥 HashMap 하나가 좋은 캐시가 되기도 합니다. InstanceTimeCache...
작은 소품들 많은 Jar 파일들에서 원하는 클래스가 있는 Jar를 찾아주는 자바 프로그램 소스 사용법: java -cp . FindJar [FindPath] [ClassName] 제니퍼 Xlog 데이터를 기반으로 쿼리별 수행빈도를 확인할 수 있도록 Param 기준으로 실행횟수, 수행시간, 패치시간 등을 통계내어 주는 프로그램 (오픈 소스 APM인 스카우터는 해당 기능을 내장하고 있음) 사용법: java -cp . JenniferSQLChecker [JenniferXLogFile] IBM에서 kill -3으로 남김 스택 덤프파일(javacoreYYYYMMDD_xxxxxx)들을 SDPA에서 분석할 수 있도록 스택만 추출하여 하나의 로그 파일로 만들어 주는 프로그램 사용법: java -cp . IBMStackConvert..
오픈소스 APM]스카우터(Scouter) 상용 APM를 능가하는 모니터링 기능을 제공하는 오픈소스 APM을 소개합니다. 다운로드 URL: https://github.com/scouter-project/scouter [스카우터 예제 화면 동영상] https://www.youtube.com/v/iuArTzsD7Ws?version=3&hl=ko_KR
오라클 테이블 정보 조회 SQL 다음은 SQL 튜닝 시에 테이블과 인덱스의 구성 정보를 확인하는데 유용한 SQL입니다. 1. 테이블 정보 SELECT T.OWNER AS "Owner", T.TABLE_NAME AS "Table Name", ( SELECT MAX(COMMENTS) FROM SYS.ALL_TAB_COMMENTS C WHERE C.OWNER = T.OWNER AND C.TABLE_TYPE='TABLE' AND C.TABLE_NAME =T.TABLE_NAME ) AS "Comments", T.TEMPORARY AS "Temp", T.PARTITIONED AS "Partitioned", CASE WHEN T.PARTITIONED = 'YES' THEN P.PARTITIONING_TYPE || '(' || ( SELECT COL..
오라클 모니터링 유용한 SQL 라클에서 성능개선 대상 식별을 위해 모니터링할 때 사용하면 유요한 SQL입니다. 1. V$SQLAREA에서 Top SQL 식별 SELECT ROUND(BUFFER_GETS/EXECUTIONS) AS BUFFER_GETS_PER_EXEC, -- 1회 실행당 읽은 블록 수 ROUND(ELAPSED_TIME/(EXECUTIONS*1000000),2) AS "ELAPSED_TIME_PER_EXEC(Sec)", -- 1회 실행당 처리시간(초단위) ROUND((ROWS_PROCESSED/EXECUTIONS)) AS ROWS_PER_EXEC, -- 1회 실행당 처리된 건수 A.* FROM (SELECT DECODE(EXECUTIONS,NULL,1,0,1,EXECUTIONS) AS EXECUTIONS, -- 누적 실행..
채번로직 캐시적용 채번 테이블 이용시 성능개선을 위해 사용할 수 있는 캐시로직입니다. 채번 테이블에서 1씩 증가시키는 것이 아니라 100, 1000씩 증가시키고 내부에 값을 가지고 있으면 1씩 증가된 값을 넘겨줍니다. 이렇게 되면 연속된 값을 가질 수 없고 재기동시 값이 중간에 비게 됩니다. ---------------------------------------------------------------------------------------------------------- /********************************************************************** Cached Sequence Value Object 채번ID별 캐시된 채번번호 정보를 저장하는 객체 *********..