2011-02-12 5 views

답변

6

쿼리는 항상 여러 세션 (클라이언트 연결)간에 병렬로 처리됩니다. 단일 연결에 대한 모든 쿼리는 한 번에 하나씩 실행됩니다. 사용 가능한 서버 자원에 따라 여러 연결 간의 병렬 처리 수준을 구성 할 수 있습니다.

일반적으로 일부 작업은 개별 쿼리 세션 (트랜잭션)간에 보호됩니다. 이것들은 InnoDB 백엔드가 지원하지만, MyISAM 테이블은 지원하지 않습니다 (하지만 원자 연산이라고하는 개념을 지원합니다). 서로 다른 수준의 격리가있어서 서로간에 보호되는 작업 (즉, 한 병렬 트랜잭션의 작업이 다른 트랜잭션에 미치는 영향)과 성능에 미치는 영향이 다릅니다.

트랜잭션에 대한 자세한 내용은 generalMySQL의 구현을 참조하십시오.

+0

단일 쿼리는 단일 스레드입니다. –

0

일반적으로 모든 쿼리는 병렬로 실행됩니다.

하지만 ... 여기에는 몇 가지 예외가 있습니다. 트랜잭션 격리 수준에 따라 행을 업데이트하는 동안 잠글 수 있습니다. 여기에 대한 자세한 내용은 여기를 참조하십시오. http://dev.mysql.com/doc/refman/5.1/en/dynindex-isolevel.html

5

각 연결은 한 번에 최대 하나의 쿼리를 실행할 수 있으며 단일 스레드에서 수행합니다. 서버는 쿼리 당 하나의 스레드를 엽니 다.

일반적으로 쿼리가 서로 차단되지 않기를 바랍니다. 그러나 엔진과 쿼리에 따라 다를 수 있습니다. 매뉴얼에 자세하게 설명되어있는 MySQL에는 많은 잠금 기능이 있습니다.

그러나 서로 차단하지 않으면 자원을 소비하여 서로 느려질 수 있습니다. IO 작업은 이러한 속도 저하의 특별한 원인입니다. 데이터가 메모리에 저장되지 않으면 병렬 하위 쿼리의 수를 IO 하위 시스템이 처리 할 수있는 범위로 제한해야합니다. 그렇지 않으면 상황이 심각해질 수 있습니다. 측정이 핵심입니다.

일반적으로 500 개의 쿼리가 동시에 실행 중이고 잠금을 기다리지 않으면 하드웨어에서 최상의 가치를 얻지 못할 수도 있습니다 (500 개의 코어가 있습니까? IO를 기다리는 스레드 수는 얼마나됩니까?)

관련 문제