![]() |
|
||||||||
경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지 |
|
전 스토어드 프로시져까지는 안 쓰지만(스토어 프로시져 저주합니다 ㅋㅋㅋ), 디비는 엄청 신경써서 만듭니다. 실제로 코딩할 때도 서브쿼리 및 조인을 이용해서 최적의 결과를 불러오기 위해서 노력하죠.
가끔 쿼리 한 문장이 화면에 꽉 차는 경우도 있지요. 친구 프로그래머 녀석이 보고 엽기 쿼리라고 했던;;;;; 부하를 줄이는 가장 간단한 팁을 소개하자면, 게시판을 예로 들어서 설명드리겠습니다. 게시판은 최근 게시물이 가장 위에 올라오는 구조기 때문에 시간의 역순값을 구해야 합니다. 보통 시간은 timestamp를 많이 저장하실텐데요. 이 때 timestamp 값으로 order by desc를 써서 소트하시는 분들이 많을 겁니다. 하지만 order by 쿼리는 데이터베이스 풀스캔을 가져오기 때문에 엄청난 부하를 주는 아주 나쁜 방법입니다. 이 때 쓸 수 있는 것이 not 연산자죠. 데이터베이스에 저장하기 전에 not 한번해서 비트를 역전시켜줍니다. 그러면 시간이 지날수록 값이 작아지기 때문에 order by 안 써도 WHERE 문에 timestamp를 걸어주면 timestamp로 알아서 역순 소트되어 나옵니다. 즉, 쿼리에서 order by를 생략해도 알아서 소트되어 나오는 것이죠. 대부분의 경우에는 이것만 제대로 적용해도 엄청난 데이터베이스 부하를 없앨 수 있죠. 이 외에도 디비 튜닝을 위한 각종 방법은 익혀두면 뼈가되고 살이되는 것 같습니다. 저도 7년전에 SQL 무지 열심히 공부했는데, 지금은 귀찮아서 ㅡ.ㅡㅋㅋㅋ 묻어가며 잠깐 여쭙고 싶은 것이 있는데요....^^
3 tier 환경에서 디비그리드사용은 어떻게 생각하십니까? 만약 불가피하게 사용을 해야하는 상황이 발생해서 어쩔수 없다면요... 아니면 그냐 서버어플쪽에 쿼리 날리고 리턴되는 데이터 셋을 클아이언트 쪽 스트링그리드에 뿌려주시나요? 디비그리드에 만약 결과값 데이터 셋을 뿌려야하는 상황이라면 풀스캔에 의한 부하를 막기위해서 packetrecords 에 적절값을 넣어줌으로 필요한 만큼의 팩킷 형식으로 조금씩 자료를 가져오잖습니까? 그때 서버어플리케이션쪽에서 저는 두가지 형식으로 개발을 합니다. 한가지는 그냥 쿼리 콤포 떡 하니 얹어놓고 직접 쿼리문 날린것으로 데이터셋을 리턴받기도 하고 다른 한가지 방법은 쿼리를 올려놓고 데이터셋을 리턴하는 쿼리문은 스토 프로시져를 먼저 만들어놓고 그 다음 데이터 셋을 받아오는 식으로 짜기도 합니다. 궁금한 점은 위에 제시한 두가지 상황에서는 과연 스토프로시져 의 사용이 정말 체감할수있는 퍼포먼스를 가져다 줄수 있을까 해서요... 별차이 없다면 스토프로시져는 정말 쓰고 싶지 않아요...^^ DB성능을 select 문 관점에서만 생각하실지 모르겠지만...
저는 임베디드 파이어버드와 dbExpress 콤포넌트를 이용해 간단한 레코드를 Insert 하는데 걸리는 시간이 PC사양에 따라 2ms ~ 5ms 걸리더군요 중간중간 OS의 상태에 따라서 100ms 이상 걸리는 경우도 있습니다. 이정도 시간이면.. 1초당 200개의 레코드정도 밖에 저장할 수 없다는 결론인데.. 현재 개발 하는 프로그램에서는 보통 1초당 10~60개 정도의 레코드가 추가되기 때문에 큰 문제는 없지만.. 이것이 1년내내 24시간 저장되어야 하는 문제라 성능을 떠나서 안정성에 문제가 없는지 걱정입니다. 다른 프로그램과 함께 동작해야 하기 때문에 성능도 좀더 개선할수 있는 방법이 있으면하죠 그리고 계속 이렇게 저장하다보면 레코드 개수가 100~200만개 넘는것은 시간문제인데.. 전체 레코드에서 단순 select LIKE 문으로 검색을 하기가 겁나네요.. ㅋㅋ 뭔가 다른 방법을 생각해보고 있습니다. 관련 글 리스트
|
Copyright © 1999-2015, borlandforum.com. All right reserved. |
하나,둘,셋에 자료가 안나오면 불안하거든요
그렇다고 튜닝을 할정도로 기술이 좋지는 않고
SI 에서 뛰다보니 깊이가 없다는 점도 있고요
제경우엔 50%정도 신경쓰는거 같습니다
예전에 DB2 쓴적있는데 그것도 파일버젼인가 그랬습니다
미들웨어 하나쓰고 유지보수했는데 개발하신 분이 아마도 시간이 없으셔서
신경을 안썼는지 무진장 고생했습니다
ORACLE,MSSQL,DB2,PARADOX,FIERBIRD 다 용도에 따라 일장일단이 있더군요
이전 프로젝트때 FIERBIRD 로 로컬 프로그램 개발했는데
볼포에서 아주많은 도움을 받았습니다
새삼 감사드립니다.