2015년 1월 28일 수요일

허삼관 매혈기

위화... 중국이 자랑하는 현존 최고의 자가...

그동안 미국, 유럽 그리고 가끔 일본작가의 책을 보았는데 중국작가의 글에는 서구의 글과 일본의 글과는 또다른 매력이 있다.

과장되지도 자극적이지도 않으면서 읽고 나면 잔잔한 감동이 온다.
영화 포스터를 보고 읽은 책.  내용은 아버지로서 책임,역할을 다하기 위해 어려울때마다 피를 팔아 생계를 책임지는...

그땐 정말 그랬을까 ? 책의 배경이 되는 중국의 당시 시대적 상황, 문화를 알았더라면 한층더 감격했을 것 같다...

노인과 바다 - 어니스트 헤밍웨이

2015년은 고전을 봐야겠다 첫책으로 노인과 바다.

언제부터인가 책도 감성과 말초신경을 자극하는 책들만 보다가 고전을 보니... 처음엔 별 감흥이 없어졌다.

역시 고전은 감수성이 예민한 청소년기에 보는 것이 옳게 느껴진다.  지금의 시대적인 상황, 개인적인 상황과 소설속 당시의 시대적 상황이 너무가 거리가 멀게 느껴진다.

방법은 여러번 보던가? 아님 이런 고전을 계속봐서 무디졌던 감수성을 되찾던가 ?

우선 읽어보자...

2015년 1월 18일 일요일

요나스 요나손 - 셈을 할줄아는 까막눈이 여자

요나스 요나손 - 셈을 할줄아는 까막눈이 여자

새해들어 두번째 소설책, 첫책을 너무 재미있게 본후에 봄.

작가의 상상력, Story전개하는 능력 모두 뛰어나다.
몇가지 머리아픈 일이 있고, 한살 더 나이를 먹으니 슬픈것 아픈것보다 Happy Ending으로 끝나는 행복한 결말이 좋다.

천재란 역시 태어나는 것일까 ? 우선은 머리가 좋아야겠다.
그리고 성격 또한 유전일까 ? 아무리 어렵고 힘든 일이 있다해도 낙천적으로 꾸준히 끝까지 해내어 결국은 모두가 좋은 결말이 이르도록 하는 것.

여러가지로 복잡할때 편하게 즐겁게 미소지으며 읽을볼 수 있는 좋은 책...

2015년 1월 11일 일요일

MySQL 튜닝 참고 문서

* MySQL 튜닝 참고 문서

1. http://egloos.zum.com/mcchae/v/11063919

2. http://egloos.zum.com/tiger5net/v/5672418


2015 두번째 책 - 창문넘어 도망친 100세 노인

"강추- 창문넘어 도망친 100세 노인"
최근 읽은 책중에서 가장 유쾌하고 재미있고 작가의 상상력이 풍부하면서도 긴 여운을 주는 책.

알란 칼손... 아주 어린나이 부모를 여의고, 잠시 폭탁 제조 기술을 배워, 집을 통째로 날려먹고, 정신병원에 감금되어 거세를 당하고... 원자폭탄 개발에 결정적인 아이디어를 제시...
중국, 소련, 북한, 미국, 프랑스, 인도네시아 등 정상과 가까이 지내며 세계사의 중요한 순간마다 결정적인 역할하여 세계사를 바꾼 노인.

세계를 둘러보기엔 100세가 너무 짧은 그. 100세 생일날 아침 또한번의 유쾌한 도전과 사고를 저지르나 모두 즐거운 Happy Ending으로 끝이 나는 신나는 글.

아직은 사망소식이 없으니 더 큰 사고를 칠지도...

2015년 1월 7일 수요일

11g 통계정보 생성 중요 기능

11g에서는  파티션 적용 테이블에서 Incremental NDV 생성기능.
    파티션 적용테이블에서 거래내역이나 이력데이터를 보관할경우 대부분이 일자로 Range 파티션을 하게된다.

Global 통계정보를 생성하려면 10g 까지는 2단계의 과정을 거쳐야 했다.

첫번째로는 파티션 레벨의 통계정보를 생성 하기위해 각파티션을 scan 하는작업수행.

두번째로는 Global 통계정보를 생성하기위해 전체 파티션을 scan 하는 작업수행.
정말 비효율적이지 않는가? 같은 파티션을 두번씩 읽은 셈이다.

10g 에서는 아래처럼 granularity를 옵션으로 사용하거나 아니면 수동으로 2번 돌려야 했다. 아래예제 에서는
estimate_percent 를 10% 로 한정 하였다.

exec dbms_stats.gather_table_stats('CUST', 'CUSTOMERX', estimate_percent =>10, granularity =>'GLOBAL and PARTITION');

위의 방법대로 하면 전체 파티션을 내부적으로 2번씩 scan 해야 하므로 성능면에서 최악이다.
경험 많은 DBA 는 새로이 추가된 파티션의 통계정보만 생성하고 Global 통계정보를 생성함으로 전체 파티션에 대하여 2번씩 scan 하는 비효율을 제거한다. 아래처럼 새로 추가된 파티션을 명시하면 된다.

exec dbms_stats.gather_table_stats('CUST', 'CUSTOMERX', 'PART10', estimate_percent =>10, granularity =>'PARTITION');
exec dbms_stats.gather_table_stats('CUST', 'CUSTOMERX', estimate_percent =>10, granularity =>'GLOBAL');
  하지만 2번째의 방법으로도 Global 통계정보의 생성을 위한 전체 파티션 scan은 막을수 있는 방법이 없었다
.
이러한 성능 이슈 때문에 11g 에서는 2단계의 과정이 없어지고 과정이 하나로 줄었다. 쉽게 말하면 각파티션 통계정보를 생성해놓고 Global 통계정보 생성시 파티션의 통계정보를 sum 하여 이용한다는 것이다. 또한 특정파티션을 지정하지 않아도 아래와 같이 gather_table_stats 을 수행하기전에 set_table_prefs를 수행하게 되면 바뀌거나 새로이 insert 된 파티션만 scan 을 하게된다.
11g :

exec dbms_stats.set_table_prefs('CUST', 'CUSTOMERX', 'INCREMENTAL', 'TRUE');
exec dbms_stats.gather_table_stats(‘CUST', 'CUSTOMERX', granularity =>'GLOBAL and PARTITION');

 11g 에서는 estimate_percent를 10%  로 한정 하지 않았기 때문에 성능 어떨지 궁금하지 않은가?

아래의 테스트 결과를 보자.

DataBase Ver                       Elapsed Time (s)
-------------------------------    ----------------
Oracle Database 11g Incremental                1.25
Oracle Database 10g Release 2 10%              2152     --> 전체를 2번 scan 한 경우
Oracle Database 10g Release 2 10% Manual       1058     --> 추가된 파티션만 명시한 경우

10g 에서 추가된 파티션만 명시한 경우에 비하여 무려 800 배 정도 빨라졌다. 대단하지 않은가?

이것은 3가지의 효과가 서로 상호작용한 효과이다.
1.Global 통계정보 생성시 2단계의 작업(각 파티션의 작업 + Global 작업) 이 1단계로 축소되고
2.Imcremental NDV 작업이 가능 해졌다는것
3.미리 언급한 hash-based algorithm 의 효과

2015년 1월 6일 화요일

2015년 첫책 - ZERO to ONE

Startup 기업을 포함한 모든 기업이 반드시 답해봐야할 일곱가지 질문 !!

1. 기술
  점진적 개선이 아닌 획기적인 기술을 만들어 낼수 있는가 ?

2. 시기
  이 사업을 시작하기에 지금이 적기인가 ?

3. 독점
  작은 시장에서 큰 점유율을 가지고 시작하는가 ?

4. 사람
  제대로 된 사람을 갖고 있는가 ?

5. 유통
  제품을 단지 만들기만 하는 것이 아니라 전할 방법을 가지고 있는가 ?

6. 존속성
  시장에서의 현재 위치를 향후 10년, 20년간 방어할 수 있는가 ?

7. 숨겨진 비밀
  다른 사람들은 보지 못하는 독특한 기회를 포착했는가 ?