성능베이스라인을 만들기 위해 최모군이 SSIS를 이용해서 자동화를 시키고 있는 중입니다. 해당 SSIS를 이용하여 자동화시키는 강좌는 SQLLEADER.COM에 가면 잘 정리되어 있습니다. 많은 시행착오를 거쳐 SSIS는 거의 완성단계에 왔고, 이제 어떤 성능카운터를 넣을지만 결정하면 되는 이 시점에서 SQL Server 성능 진단을 위해서는 어떤 성능 카운터를 수집을 해야 하는지에 대해서 정리를 해볼까 합니다.Processor\%Processor Time : % Processor Time이 성능카운터는 프로세서가 비유휴 스레드를 실행하는데 소비하는 시간의 백분율입니다. 이것은 프로세서가 각 샘플 간격 동안 유휴 스레드를 실행하는데 소비한 시간을 측정하여 간격 기간에서 그 값을 뺀 것입니다. 각 프로세서..
서버 개발시에 DBMS의 지원을 받지 않는 것은 불가능에 가깝습니다. 특히나 트랜잭션을 C/C++ 레벨에서 구현하기란 보통 어려운게 아닙니다. DBMS에서는 시스템 단에서 지원해주기 때문에 손쉽게 트랜잭션을 사용 할 수 있죠. 데이터를 저장하고 불러 오는 것 역시 파일 시스템보다 DBMS가 훨씬 더 효율이 좋죠. 물론 그것도 잘 만들고, 잘 사용하고, 잘 관리했을때 이야기지만 말이죠. 다음은 게임 서버에서 DBMS를 이용할 때의 유의 사항입니다. 1. 반드시 측정하라. 쿼리 프로파일러 등을 통해서 DB 부하를 측정하라. 원하는 목표치를 수립하고, 그 목표치에 달성 할 수 있게끔 노력하라. 목표치가 너무 높거나 낮을 수도 있지만, 목표치가 없이 무작정 빠르게보다 동기부여도 되고, 성취감도 생기기 때문에 반..
1 . 데이터의 결합방법 1) 가로로 연결 : JOIN - 의미 있는 연결을 위해서는 로우(ROW)의 공통 요소를 이용하여 연결할 경우 사용 2) 세로로 연결 : UNION - 컬럼(Colum)의 공통된 형식을 어기면 연결 불가 2 . JOIN 가로(수평적)로 하나의 결과 집합과 다른 결과 집합을 연결하는 것 (집합 : 테이블, 뷰, 인라인뷰, 테이블변수....) 조인의 종류 ◎ INNER JOIN ◎ OUTER JOIN (LEFT , RIGHT 모두) ◎ FULL JOIN ◎ CROSS JOIN ◎ SELF JOIN 1) INNER JOIN 두 집합간의 하나나 그 이상의 공통 필드들에 기반해서 레코드들을 일치 INNER JOIN 은 배타적(exclusive) 결합 이다. 두 집합(테이블) 모두에서 일치..
1. Clustered Index만 존재했을 때 CI의 정렬 기준으로 실제 데이터를 정렬해 둡니다. 데이터를 찾을 때 CI를 타느냐, 테이블 스캔 하느냐의 차이만 존재합니다. 1-2. 구조 루트페이지와 리프페이지의 2중 구조 루트페이지에는 검색기준이 리프페이지에는 실제 데이터가 검색기준에 맞쳐 분류되어있음 쿼리시 루트 페이지에서 해당 검색기준을 통해 리프페이지(실제데이터)를 검색하여 결과처리 데이터 변경작업시 루트페이지에 맞쳐서 리프페이지를 다시 분류작업함 2. Non-Clustered Index만 존재했을 때 이 경우 NI의 키 값 대로 정렬된 데이터가 존재하고, 키 값에 대응하는 실제 데이터의 주소 (파일, 페이지, 행번호) 를 가집니다. NI에서의 키 값에 매칭되는 값을 찾은 후, 실제 데이터를 찾..
데이터를 찾는 과정이 필요한 모든 일 (Select, Update, delete, Insert 모두) 에 영향을 준다. 데이터를 빠르게 찾기 위해 필요하다. 인덱스 추가시 인덱스 관리 비용(처리하는 일, 인덱스 관리용 공간 필요) 인덱스는 항상 타는게 아니다. 인덱스를 탈 때 통계를 참고하는데, 이 통계가 최적 수행 방법을 산출하려면, 통계가 최신에 가까워야 좋다. 하지만, 통계 갱신에는 비용이 존재하므로, 적절한 수위를 유지하는 것이 좋다. 인덱스가 걸려 있는 경우에는 정렬이 필요하다. 1Page가 꽉 찬 상태에서, 데이터가 중간 삽입 될 경우, 들어갈 데이터를 포함해 데이터를 반으로 쪼개서 두개의 페이지에 넣는다. 이 것을 페이지 분할이라 부른다. 페이지 분할이 자주 일어날꺼라 생각되면 인덱스 생성시..
1. 인덱스 컬럼의 변형 select * from table where LOWER(name) ='word'; select * from table where idx - 1 = 5; 이 처럼 인덱스에 변형을 가하게 되면, DBMS가 인덱스를 이용하지 않는다. 2. NOT 또는 IN 연산자 사용 NOT일 경우 무조건 인덱스를 안타는 것이 아니다. NOT일 경우에도 인덱스를 타긴 타지만, 일반적으로, NOT에 사용된 값이 아닌 데이터의 비율이 높은 경우가 많기 때문에 인덱스를 타지 않는 경우가 많다. 마찬가지로 IN일 경우에도, IN에 포함된 데이터들의 비율이 매우 높다면 FULL SCAN을 하는 것이 낫다고 DBMS가 판단하면 인덱스를 타지 않는다. 3. 와일드 카드 LIKE문장에서 범위를 전체를 지정시 se..
CString strQuery; CString strOut; ///////////////////////////////////////////////////////////////////////////////////////////// // Command : CTable // Accessor : CAccessor // Rowset : CRowset // 예제목적 : CTable 클래스를 이용해서 한 테이블의 모든 데이터를 읽어오는 방법. class CUserInfoTable { public: int m_nID; char m_szName[20]; char m_szTel[20]; BEGIN_COLUMN_MAP(CUserInfoTable) COLUMN_ENTRY(1, m_nID) COLUMN_ENTRY(2, m_sz..
- Total
- Today
- Yesterday
- 임백준
- 루비
- 멀티스레드
- 디자인 패턴
- CppSQLite
- SDL
- TraceRoute
- Ruby on Rails
- c언어
- ruby
- EasyExec
- 바로가기 프로그램
- 디버깅
- 게임데브포에버
- svn
- 조엘 온 소프트웨어
- ftp
- RoR
- Rails
- NDC2013
- EzShortcut
- MS-SQL
- 리버스 엔지니어링
- 게임개발포에버
- 루비 온 레일즈
- perfmon
- TDD
- 좋은 프로그래머
- SQLite Spy
- 엘키
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |