database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 1116 게시물 읽기
No. 1116
고수님들의 의견을 듣고싶습니다.
작성자
궁금이
작성일
2003-12-26 11:19
조회수
4,062

현재 진행중인 업무가 설비로부터 직접 수많은 DATA를 그것도 아주 빠른 시간(0.5ms)내에 수집하여 DB에 보관하고 이를 검색하여

분석하는 기능입니다.

그렇다보니 검색은 커녕 저장하기 조차 힘든 상황에서 시스템 성능을 고려하는 것이 최우선 과제가 되버렸습니다.

사용중인 시스템은 서버라고는 하나, 겨우 XEON DUAL CPU에 1GB 의 RAM를 사용하는 정도입니다.

어찌됐건간에, 본론으로 들어가자면,

TABLE구성을 가급적 간단하게 구성하였습니다. (분석 형태가 다양하지 않다는 것과 특히, 속도문제 때문에....)

예를 들면, 1회 수집시 1개  ROW에는 몇개의 주요 COLUMN외에 DATA부는 전부 1개의 COLUMN으로 구성하였습니다.

문제는 이겁니다. 1개의 COLUMN으로 구성된 DATA부는 DB 구축에 있어서 정형화를 꾀하지 못했다는 비난을 맞아야 하겠지만,

일단 불가항력으로 봐주시고......,

검색조건에 맞는 저장 DATA를 SELECT하고자 하는데, 

1) 일단 SELECT후 프로그래밍에 의해 DATA부를 각각의 성격대로 분리하여 비교하는 방법

2) VIEW TABLE을 생성(DATA부 분리)하여 검색조건의 값을 저장한후 SELECT의 조건절에 의해 한번에 처리되도록 하는 방법,

위 두가지 방법중 속도가 어느 편이 더 나을지 모르겠습니다.

참고로 시스템에 주는 성능 측면(CPU사용율, 메모리 사용율)을 고려해보면, 2)의 경우는 서버에서 실행되기 땜에 서버 부담율이 크다는

것이고, 1)의 경우는 대부분의 JOB이 클라이언트에서 실행되기 땜에 서버 부담율은 줄여준다는 차이가 있는 걸로 보이네요.

고수님들에 의견을 듣고 싶습니다.

 

이 글에 대한 댓글이 총 1건 있습니다.

제가 고수는 아니지만 한말씀 드리자면,
DBMS의 성능을 좌우하는 요소는 뭐니뭐니 해도
1. DBMS CALL : DBMS 호출
2. DISK IO : 디스크에서 읽기 혹은 쓰기
입니다.

CPU나, 메모리는 성능에 영향을 주는 요소임에는 틀림없지만 DBMS의 성능을 좌지우지 할 만큼 큰 요소는 아닙니다.
다시 말해 CPU를 100개 꽂는것 보다 DBMS CALL이나 DISK IO를 줄여나가는 것이 더 큰 효과를 볼수 있다는 얘깁니다.
님께서 제시하신 방법모두 일장 일단이 있다고 여겨집니다.
전자의 경우 대부분의 처리를 클라이언트에서 행하기 때문에 로직으로 처리할수밖에 없습니다.
어플리케이션 로직이 복잡해지고 또 이 어플리케이션에서 반복적으로 DBMS CALL이 발생한다면 좋은 방법이라 볼수만은 없겠죠.
그리고 후자의 안은( 참고로 VIEW TABLE이라는 표현보다는 VIEW QUERY라고 하는것은 옳은 표현입니다.)
VIEW는 물리적으로 데이터가 저장되는 것이 아니라 옵티마이저의 데이터 처리 경로를 미리 지정하여 컴파일된 상태로 남아 있는 형태라고 보시면 됩니다.
뷰를 만든다고 해서 데이터가 디스크에서 별도로 저장 및 관리되는 형태가 아니라는 말입니다.
뷰의 활용방안은 1) 사용자 편의성 고려 2)보안유지 3)옵티마이저 엑세스 경로지정(실행계획의 지정)등이 있는데
그중에서도 님의 경우는 세번째 사항에 초점을 맞춰야하지 않나 판단됩니다.

DBMS는 복잡한 로직위주의 어플리케이션 수준의 데이터 처리 방법을 SQL이라는 비절차형 언어로 간결하게 풀어주며
사용자(프로그래머)는 데이터처리방법에 대하여는 무관하게 가져올 데이터의 치역과 정의역만 기술함으로서 원하는 데이터를 얻게 해줍니다.
이러한 DBMS의 장점과 우수성을 십분발휘하게끔 하는 것이 좋은 방법이라 여겨집니다.
효율적으로 데이터를 엑세스하게 SQL을 작성해주고, 그에 앞서 퍼포먼스를 고려한 데이터 베이스 디자인만이 유일한 해결책인것 같습니다.

님의 경우와 같이 설비에서 빠른 속도로 데이터가 증가하는 경우라면 인덱스를 어떻게 잡아주는가
예를 들어 인덱스 정렬방식을 Ascending으로 할것인가 아니면 Descending으로 하는가, 클러스터된 인덱스인가 그렇지 않은가
데이터 검색조건의 유형에 따라 결합인덱스를 어떻게 구성하는가 등에 따라 성능차이는 커집니다.
그리고 순차적으로 데이터가 쌓이는지 아니면 중간에 삽입이 빈번하여 인덱스의 발란스가 자주 깨어지는가 등등.
해당 데이터의 특성 및 여러가지 요소를 종합적으로 판단해야 좋은 성능을 보장받을수 있습니다.
단순히 뷰를 쓸건지 클라이언트에서 모두 처리할것인지만 갖고는 좋은 답을 낼수가 없을것 같습니다.

여러가지 방법을 고려해보시고 판단내리시기 바랍니다.

김봉수님이 2004-01-06 14:10에 작성한 댓글입니다.
이 댓글은 2004-01-06 14:31에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1120데이터 가져오기해서 박은 데이터문제..
이상정
2003-12-26
3709
1119MS-SQL에서 MINUS 구현할수 있는 방법 [1]
angra
2003-12-26
5717
1117테이블의 서브테이블을 만들수가 있나여? [1]
괴물
2003-12-26
3238
1116고수님들의 의견을 듣고싶습니다. [1]
궁금이
2003-12-26
4062
1115mssql에서 openquery로 mysql 연결...
이상혁
2003-12-23
4649
1113ntext타입의 텍스트 데이타가 모두 select되게 하고 싶은데요.. [1]
송미영
2003-12-23
3759
1112데이터 파일 축소 좀 도와주세여..
부탁해염..
2003-12-23
3785
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다