데드락 발생 패턴 잠금의 종류 배타적 잠금 Exclusive-Lock, Write Lock, X-Lock 해당 트랜잭션이 특정 레코드나 간격을 변경하기 위해 획득해야 하는 잠금 내가 쓰기를 하는 동안 남들이 쓰지 못하게 하는 것! 공유 잠금 Shared-Lock, Read-Lock, S-Lock 레코드나 간격을 읽을 때 다른 트랜잭션이 변경하지 못하게 하는 용도의 잠금 내가 읽는 동안 남들이 내가 읽고 있는 데이터를 변경하거나 삭제하지 못하게 막는 장치 프라이머리 키나 유니크 키가 존재하는 테이블에서 INSERT를 수행할 때 공유 잠금을 걸어야하는 이유?
lock-free 정의 멀티스레드 환경에서 동시에 호출해도 정확한 결과를 만들어주는 알고리즘
여러개의 스레드에서 동시에 작업이 호출되었을 경우 정해진 시간마다
적어도 한개의 작업이 호출되는 알고리즘.
흔히 사용하는 Mutex 를 사용하면 하나도 실행이 안될 수 있다.
하지만, lock-free는 적어도 1개는 무조건 실행이 되고 있어야 한다.
(작업이 몇 천만번이라면, 생각보다 큰 차이를 만들게 된다.)
호출이 다른 스레드와 충돌하였을 경우 적어도 하나의 승자가 있어서, 승자는 delay 없이 완료된다.
Non-Blocking 알고리즘 다른 스레드가 어떤 상태에 있건 상관없이 호출 완료.
선택도 모든 인덱스 키값 가운데 유니크한 값의 수를 의미함
전체 인덱스 키값은 100개인데, 그중에서 유니크한 값의 수는 10개라면 기수성은 10
인덱스 키값에 중복이 많다면 선택도가 낮다는 뜻임
선택도가 높다면, 검색 대상이 줄어들기 때문에 그만큼 빠르게 질의(Query) 가 가능하다.
선택도가 좋지 않아도, 정렬이나 그룹핑과 같은 작업을 위해 인덱스가 필요 할 수도 있다. 인덱스가 검색만을 위해서 사용되는 것은 아니다.
옵티마이저에 의해서, 선택도가 낮은 경우 (검색 결과가 테이블의 30% 이상 리턴 하는 경우)
hello universe
IBM 에서 그려놓은 2x2 매트릭스 Blocking / NonBlocking 호출되는 함수가 바로 리턴되는가, 안되는가 차이
blocking 은 말 그대로, 어떤 작업 (read, write) 을 하는 도중에는 다른 프로세스나 스레드가 작업을 할 수 없는 상태 (작업이 끝날때까지 리턴되지 않음)
NonBlocking 은 컨텍스트 스위칭 (context-switch) 를 통해서 프로세스나, 스레드가 각자 필요한 read, write 같은 시스템 콜을 번갈아 가며 사용가능 함. 잦은 시스템 콜, 컨텍스트 스위칭 때문에 비효율 적이다. (작업이 덜 끝나도, 바로 리턴됨)