2017-10-25 1 views
2

PHP PDO 또는 MySQL에 자동으로 중단되고 2 초 이상 실행될 때 빈 결과 집합을 반환하는 기능이 있습니까?MySQL 쿼리가 X 초 이상 걸리면 PHP PDO가 실행을 중단 하시겠습니까?

일부 검색과 도움이되는 것이 없습니다. 저는 이것이 아마 사용자 경험에 좋을 것이라고 생각합니다. 특히 중요하지 않은 사소한 통계 데이터를 생각해보십시오.

PHP에서이 방법을 시도했지만 아직 반환되지 않은 경우 PDO:execute()의 실행 시간을 모니터링하는 방법을 모르겠습니다.

아이디어가 있으십니까?

+0

['PDO :: ATTR_TIMEOUT'] (https://stackoverflow.com/questions/21403082/setting-a-connect-timeout-with-pdo)를 사용해 보셨나요? 설명서가 쿼리에 적용되는지 여부는 지정하지 않지만 시도해 볼 수는 있습니다. – Phil

+0

시도해 볼 수도 있습니다 ~ https://stackoverflow.com/questions/415905/how-to-set-a-maximum-execution -time-for-a-mysql-query – Phil

답변

3

는이 같은이 내 설정 PDO :: ATTR_TIMEOUT을 수행 할 수 있습니다

$db = new PDO(
    "mysql:host=$host;dbname=$dbname", 
    $username, 
    $password, 
    array(
     PDO::ATTR_TIMEOUT => 10 
    ) 
); 

이 10 초 후에 타임 아웃이 발생할 수 있습니다.

+0

테스트 해 보셨습니까? 쿼리 나 연결에만 적용되는 경우 설명서 (또는 똑같은 대답이있는 링크 된 질문)에서 명확하지 않습니다. – Phil

+0

@Phil이 코드를이 코드에 사용했습니다. 그렇습니다. 테스트를 거쳤습니다. 질문자의 데이터베이스에 액세스 할 수 없으며 특정 구현에 대해 테스트 할 방법이 없습니다. –

+0

장기 실행 쿼리 제한 시간을 확인하기 위해 테스트를 수행 했습니까? – Phil

1

MySQL에는 MAX_EXECUTION_TIME이라는 전역 변수가 있습니다.

SET GLOBAL MAX_EXECUTION_TIME = 1200; 

아니면 유닛 (here 수동) 초 PDO 라이브러리의 ATTR_TIMEOUT 옵션을 사용할 수 있습니다 : 당신은 설정할 수 있습니다.

PDO :: ATTR_TIMEOUT : 제한 시간 (초)을 지정합니다. 모든 드라이버가이 옵션을 지원하는 것은 아니며 그 의미가 드라이버마다 다를 수 있습니다. 예를 들어 sqlite는 쓰기 가능한 잠금을 포기하기 전에이 시간 값까지 기다리지 만 다른 드라이버는이 값을 연결 또는 읽기 시간 초과 간격으로 해석 할 수 있습니다. int가 필요합니다.

+0

그러나 이것은 또한 완료하는 데 시간이 걸리는 중요한 쿼리에 영향을 미칩니 까? 다시 원래 값으로 되돌리려면 어떻게해야합니까? –

+1

예. 또는'SET SESSION MAX_EXECUTION_TIME = 1200; '을 사용하여 세션을 사용할 타임 아웃을 지정할 수있다. – Raptor

관련 문제