Inventory
-
[MySQL] 실행계획 & select_type@ 17. 1 ~ 18/DB 2018. 7. 1. 21:11
Mysql에서는 EXPLAIN으로 실행계획을 확인할 수 있다.실행계획을 이해할 수 있어야만 실행 계획의 불합리한 부분을 찾아내고 더욱 최적화된 방법으로 실행 계획을 수립하도록 유도할 수 있다. Mysql서버에서 쿼리가 실행되는 과정은 크게 3가지로 본다1. 사용자로부터 요청된 SQL문장을 잘게 쪼개서 Mysql서버가 이해할 수 있는 수준으로 분리첫번째 단계를 SQL파싱이라고 하며 Mysql서버의 SQL파서라는 모듈로 처리한다.SQL문장이 문법적으로 잘못됐다면 이단계에서 걸러진다.SQL파스트리가 만들어진다. 2. SOL의 파싱 정보(파스트리)를 확인하면서 어떤 테이블로부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택대표적으로 아래 4가지를 수행한다.불필요한 조건의 제거 및 복잡한 연산의 단순화여러 테이..
-
스레드 풀 스레드 관리@ 17. 1 ~ 18/C# 멀티스레드 2018. 6. 30. 16:15
CLR 스레드 풀이 스레드 풀에서 스레드를 언제 생성하고 파괴하는지 어떻게 결정하고어떻게 개발자가 이런 프로세스에 영향을 미칠 수 있는지 보자 * 스레드 인젝션과 은퇴 알고리즘 세부사항윈도우 스레드 풀과 동일하게 CLR 풀은 일부 정교한 휴리스틱을 사용해 스레드의 관리를 추상화한다.그러나 채용된 구체적인 휴리스틱은 다르다. 대부분의 사람들은 구체적인 알고리즘을 몰라도 된다.하지만 내부 세부구현 내용을 이해하는것이 프로그램의 성능과 확장성을 이해하는데 도움이 된다.실질적으로 CLR 스레드 풀은 두가지 세트의 스레드를 관리한다하나는 일반적인 작업 아이템을 처리하고(QueueUserWorkItem, 콜백 등..) 다른하나는 모든 I/O완성을 다룬다.특성이 달라도 두 가지의 스레드 관리는 거의 동일하다. 주요 ..
-
[MySQL] 조인 관련 주의사항 (3)@ 17. 1 ~ 18/DB 2018. 6. 28. 23:08
MySQL 조인 처리에서 특별히 주의해야할 부분은 1. 실행 결과의 정렬순서2. INNER JOIN과 OUTER JOIN의 선택2가지 정도이다. 조인 실행 결과의 정렬 순서일반적으로 조인으로 쿼리가 실행되는 경우, 드라이빙 테이블로부터 레코드를 읽는 순서가 전체 쿼리의 결과 순서에 그대로 적용되는 것이 일반적이는 네스티드-루프 조인 방식의 특징이기도 하다.SELECT de.dept_no, e.emp_no, e.first_nameFROM dept_emp de, employees eWHERE e.emp_no=de.emp_noAND de.dept_no='d005';실행 계획은 아래와 같다 id select_type table type key key_len ref rows Extra 1 SIMPLE de ref..
-
[MySQL] 조인 (2)@ 17. 1 ~ 18/DB 2018. 6. 28. 22:44
카테시안 조인카테시안 조인은 FULL JOIN 또는 CROSS JOIN이라고도 한다. 일반적으로는 조인을 수행하기 위해 하나의 테이블에서 다른 테이블로 찾아가는 연결 조건이 필요하다.하지만 카테시안 조인은 조인 조건 자체가 없이 2개 테이블의 모든 레코드 조합을 결과로 가져오는 방식이다. 조인이 되는 테이블의 레코드 건수가 1 ~ 2건 정도로 많지 않을때라면 문제가 되지는 않는다. 하지만 레코드 건수가 많아지면 조인의 결과 건수가기하급수적으로 늘어나므로 Mysql서버 자체를 응답 불능 상태로 만들어버릴 수도 있다. 조인의 양쪽 테이블이 모두 레코드 1건인 쿼리를 제외하면 애플리케이션에서 사용되는 카테시안 조인은 의도하지 않았던 경우가 대부분이다. Mysql에서 CROSS JOIN은 INNER JOIN과 ..
-
-
읽기 / 쓰기 락@ 17. 1 ~ 18/C# 멀티스레드 2018. 6. 27. 23:01
읽기 / 쓰기 락일반적으로 여러 읽기는 쓰기보다 빠르다.병렬적으로 발생하는 이런 읽기를 허용하는 것은 엄청나게 코드의 확장성을 개선한다.(읽기 쓰기 모두 락을 걸면 읽기도 쓰기도 모두 느려진다) RWL은 다음과 같은 기본적 사항을 요구한다.1. 스레드가 락을 획득할때 읽기인지 쓰기인지 명시해야한다.2. 최대 하나의 쓰기가 일정 시간에 락을 소유할 수 있다.(배제모드)3. 쓰기가 있는 한 어떤 읽기도 락을 소유할 수 없다.4. 어떤 수의 읽기도 주어진 시간에 락을 소유할 수 있다.(공유모드) 예를 들어 32개의 CPU를 완벽히 장착한 서버를 갖고 있다고 하고 각 CPU는 항상 동시적으로 하나의 요청을 수행한다는 것을 가정한다.높은 성능으로 장착된 서버에서 주어진 시간에 수행할 수 있는 것보다 더 많은 일을..
-
[MySQL] 테이블 조인 (1)@ 17. 1 ~ 18/DB 2018. 6. 26. 21:38
Mysql 조인 방식은 네스트드 루프로 알려진 중첩된 루프와 같은 형태이다. 조인의 종류INNER JOIN과 OUTER JOIN으로 구별된다.OUTER JOIN은 다시 LEFT OUTER JOIN(LEFT JOIN)과 RIGHT OUTER JOIN(RIGHT JOIN), FULL OUTER JOIN으로 구분할 수 있다.그리고 NATURAL JOIN과 CROSS JOIN(FULL JOIN, CARTESIAN JOIN)으로도 구분할 수 있다. 조인의 처리에서 어느 테이블을 먼저 읽을지를 결정하는 것은 상당히 중요하다.작업량 자체가 달라지기 때문이다. INNER JOIN은 어느 테이블을 먼저 읽어도 달라지지 않으므로 옵티마이저가 조인의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있다.OUTER JOI..
-
스레드 로컬 저장소@ 17. 1 ~ 18/C# 멀티스레드 2018. 6. 21. 00:49
스레드 로컬 저장소 TLS (Thread local Storage)를 이용하면 스레드마다 고유한 메모리 영역에 정보를 저장할 수 있다이 정보는 스레드별로 따로 관리되며 한 스레드내에서는 마치 전역 변수처럼 사용할 수 있다. 예를들어 C++과 C#에서 정적변수는 프로세스 내의 모든 스레드에서 접근 가능한 메모리 영역에 저장된다.모든 스레드가 공유해 사용하는 정적 변수나 전역 변수는 동기화 없이 사용하면 문제가 생길 수 있다. 스레드마다 데이터를 따로 관리해 동기화 없이 처리하려는 경우나 프로그램 특성상 스레드마다 필요한 정보를 따로 관리해야하는 경우도 흔히 볼 수 있다.바로 이때 TLS를 사용한다. TLS를 사용하면 시스템 내에서 논리적으로는 동일한 변수를 스레드마다 별도의 메모리 공간에 저장할 수 있다.