2011년 1월 20일 목요일
이클립스 debug 속도 느려졌음..;;
45초 이상 걸린다나뭐라나~ 그래서 서버 설정에서 start 시간을 200으로 주니 말짱하게 시작하는거였다.. 우왕~ 괜히 고생했네..
근데 하다보니 너무.. 너무.. 느린 것이야~
이게 대체 원인이 뭐다냐~
debug 의 break point를 remove all 해주니 원래 속도를 찾았다.
debug mode 사랑한다~ㅎㅎ
2011년 1월 2일 일요일
eclipse.ini
startup과 launcher.library 항목은 더 최신버전이 나왔을경우 이클립스 싸이트가서 받아오자.
vm항목 path는 변경되었다면 그것에 맞게 고쳐주자.(java JDK설치경로) 이거 안하면 자바 머신 fail 창이 뜬다.
그리고 아래 설정 명령어가 틀리면 에러가 뜨므로 주의하자.
===현재 내 eclipse.ini 설정===
-startup
plugins\org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.1.1.R36x_v20100810
-vm
F:\java\bin\javaw.exe
-product
org.eclipse.epp.package.jee.product
--launcher.XXMaxPermSize
1024M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx512m
=== 각 설정들에 대한 설명 ===
-Dosgi.requiredJavaVersion=1.6 : jdk 버젼에 맞게 적어주자
-Xms256m : 초기 시작시 메모리 크기(jvm Heap Space)
-Xmx512m : 최대 사용 메모리 크기
-XX:PermSize=64m : 클래스정보 저장 메모리 크기
-XX:MaxPermSize=128m : 클래스정보 저장 최대 메모리 크기(기본값이 8M 라고 함)
* PermGen 영역 설정
jvm 의 메모리 영역 중 PermGen 영역이 존재함
이 영역은 gc에 의해 소거되지 않는 데이터들이 저장되며
순수 class의 정보들(instance가 아닌)이 저장된다.
* 속도 향상 ini
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xvirify:none : 클래스 유효성 검사 생략
-XX:+UseParallelGC : 병렬 gc 사용
-XX:-UseConcMarkSweepGc : 병행 mark-sweep GC 를 수행하여 gui응답을 빠르게 함
-XX:+AggressiveOpts : 컴파일러의 소수점 최적화 기능 작동
-XX:PermSize=128M : Permanent Generation 크기
-XX:NewSize=128M : New Generation 크기
-XX:MaxNewSize=128M : New Generation 최대 크기
-Xms512M : 최소 Heap Memory Size
-Xmx512M : 최대 Heap Memory Size
=> 최대값과 최소값을 같게 해주면 오르락 내리락 하는 경우가 적어 빨리진다고 함
* 추천 Heap Size
1기가 : 256
2~3기가 : 512
4기가 : 1024
* JVM메모리 공간
1. Permanent : class와 method 정보
2. New/Young : 새로 생성되는 instance
3. Old : 만든지 오래된 instance
* 참고 url
http://wiki.eclipse.org/Eclipse.ini
http://aploit.egloos.com/5014643
http://pragmaticstory.com/481
http://blog.naver.com/sungback/90097516641
2011년 1월 1일 토요일
스칼라 서브쿼리, 서브쿼리, 인라인뷰
서브쿼리 : 쿼리안에 또 다른 쿼리를 말 합니다.
스칼라서브쿼리 ; SELECT 절에 오는 서브쿼리를 말합니다.
인라인 뷰 : 토탈적으로 서브쿼리라고 불리지만 From 절 뒤에 오는 쿼리를
인라인 뷰라고 말 합니다. 즉 가상의 테이블을 만드는 쿼리라고 보심됩니다.
서브쿼리 : WHERE 절 뒤에 오는 쿼리를 말합니다.
관계형 모델은 서로 서로 관계(JOIN)가 이루어 져서 만들어야 합니다.
3개의 테이블을 한테이블로 만들어야 겠죠?
FROM절에 3개를 나열하고 3개의 테이블을 PK(기본키)로 조건을 걸어주어
중복의 데이터가 나오지 않게 만듭니다.
기본적으로 A테이블 * B테이블 * C 테이블 = 새로운 테이블
만들어 지며, 그 로우의 수는 엄청나게 많아 집니다.
그래서 WHERE 절에 A와 B가 같은 것, B와 C가 같은 것들을 간추려
냅니다.. 그걸 하는 것이 WHERE 절입니다.
마지막으로 이렇게 만들어진 테이블에서 무엇을 조회 할것인가에 대해
SELECT 를 실행하여야 합니다.
하지만 한번의 쿼리로 뽑을려면 사원이름을 뽑는것이 힘들어 집니다.
=========사원 이름 없이 뽑는 쿼리 =================
SELECT MAX(A.부서명) AS 부서이름,B.부서코드,MAX(C.월급) AS 최대임금
FROM JOB_EMP A, JOB_MEMBER B, JOB_SAL C
WHERE A.부서코드=B.부서코드 AND B.직급코드=C.직급코드
GROUP BY B.부서코드
자자.. 그럼 인라인 뷰를 이용하여 사원 이름 까지 뽑는걸 해 보겠습니다.
==========인라인뷰와 RANK()을 이용한 쿼리 ===========
SELECT INV.부서이름,INV.부서코드,INV.사원이름,INV.최대임금
FROM (SELECT A.부서명 AS 부서이름,B.부서코드,B.사원이름,C.월급 AS 최대임금
,RANK() OVER(PARTITION BY 부서코드 ORDER BY 월급 DESC) AS 월급순위
FROM JOB_EMP A,JOB_MEMBER B,JOB_SAL C
WHERE A.부서코드=B.부서코드 AND B.직급코드=C.직급코드
ORDER BY B.부서코드
) INV
WHERE INV.월급순위=1