2024/11 6

사전지식 - 두 번째

가상 메모리 접근 모드메모리에 대한 접근 권한은 보통 3 가지로 분류read ,write ,execute타 프로세스 메모리에 대해서도 권한이 잇다면 접근가능debugger가 그러하다VirtualProtect 라는 함수가 가상메모리 접근모드를 조절하는 함수이다.int main(){ const char* pszHello = "Hello World!\n"; std::cout (pszHello); //pszNewHello[4] = '\0'; DWORD dwOldProtect = 0; ::VirtualProtect( (LPVOID)pszHello, 8, PAGE_READWRITE, &dwOldProtect); pszNewHello[4] = '\0'; std::co..

사전 지식 - 첫 번째

함수 포인터C언어에서 함수의 이름은 실행코드가 저장되는 메모리의 주소디버거로 대상 메모리 내용 확인 가능디스어셈블 기능을 이용해서 명령 단위 실행으로 역추적 가능함수 포인터는 대상 플랫폼에 따라 32bit 혹은 64bit로 달라질 수 있다.Callback 구조 적용에 적합하다.소위 API라는것들은 모두 함수로 구현되며 일반 함수 포인터와 동일한 개념이 적용된다.calling convetion__cdecl (호출자가 스택정리)__stdcall (피호출자가 스택정리)__fastcall (매개변수에 레지스터 사용)64bit에서는 요게 기본이다.int(__cdecl * pfTest)(int, int) = testFunc 처럼 함수포인터에서 써줘야한다.함수 프롤로그 와 에필로그함수 내부에서 사용된 자동변수는 스택..

24) DBMS 활용 (배치 처리 주의사항)

대용량 작업개발자 생각최대한 굵고 짧게동시에 많은 스레드로 빠르게 처리 완료중요한 쿼리들이 실행되지 못할 수 도 있다.DBA 생각가능한 가볍게 ( 가능한 짧게 )소수의 쓰레드로 최소의 DBMS자원 소모 dbms서버는 공유자원특정 서비스에서 과도한 자원 점유시, 다른 서비스의 처리 지연 유발때로는 다른 서비스의 쿼리실패 & 장애 유발DBMS 서버의 처리 용량은 다양하다. 이에 맞는 동시성 제어가 필요하다. Long TransactionIdle Transactionauto_commit = OFF 상태 또는 명시적 트랜잭션 (Begin Transaction) 사용시에Begin 이후 또는 쿼리 실행 이후 대기 상태로 남은 트랜잭션 (Commit , Rollback 실행 전)Active long transacti..

23) 테이블 파티셔닝

테이블 파티셔닝하나의 테이블을 물리적으로 여러 테이블로 분할해서 데이터를 저장하는 기법사용자는 기존처럼 하나의 테이블로 인식해서 사용 가능하다.테이블의 특정 컬럼이나 계산식을 기준으로 해서 날짜 / 숫자 범위나 리스트, 해시 형태 등으로 분할이 가능하다. 테이블 파티셔닝이 필요한 이유삭제 가능한 이력 데이터들을 효율적으로 관리할 수 있다.e.g) 로그성 데이터들이 저장되는 테이블에 파티셔닝이 적용된다.보관기간에 따라 일정기간 지난 데이터들을 제거하는 경우, 데이터 삭제가 아닌 파티션 드랍으로 처리명령문 하나로 손쉽게 처리가능하다.사용된 디스크 공간을 온전히 반환가능하다.자원 사용 효율 증가 및 쿼리 성능 향상e.g) 계시판과 같이 최근에 저장된 데이터들을 위주로 조회하는 경우날짜 범위로 파티셔닝 하여 각..

21) Join Update & Join Delete

Use Case다른 테이블의 컬럼 값을 참조해서 Update / Delete 하고 싶은 경우한 번에 여러 테이블에 대해 Update / Delete 하고 싶은 경우 Join Update첫번째 쿼리특정 회사의 상품 수수료율이 변경되었을 때 그 회사의 제품들의 가격을 update하는 쿼리다른 테이블의 컬럼 값ㅇ르 참조해서 실제 작업 대상 테이블의 데이터를 업데이트하는 경우두번째 쿼리product, order table에 상품명을 저장하려고 한다.join후에 한번의 쿼리로 상품명을 update 하였다.SET 절에 update 대상 컬럼들을 명시한다.쿼리에서 참조하고 있는 테이블들 중 "전체" 또는 "일부"에 대해 컬럼 값 업데이트가 가능하다Left Join등 다른 유형의 join들도 사용이 가능하다.쿠폰 만료..

20) Dead Lock

Deadlock원인tx1 이 pk=2 레코드에 exclusive lock (x-lock)획득tx-2,3 이 중복된 레코드에 대해서 s-lock 이 필요해서 대기tx1 commit하면 tx2,3 shared lock 동시획득tx2,3 pk=2레코드에 대해서 동시에 x-lock 획득 대기의문 사항왜 shared lock을 먼저걸고 , exclusive lock을 걸어야 하는가?insert시에 pk는 unique해야함으로 해당 record에대해서 s lock을 걸고 확인을 먼저하게 된다.어떻게 이미 삭제된 레코드에 대해서 lock을 걸수 있는가?해당 레코드들을 영구적으로 삭제하지 않고 일정시간 동안 삭제표시만 상태로 유지한다. (Deletion-mark [Tomb stone])쿼리에서만 해당 레코드가 보이지 ..