문제

이것은 PHP (5.2.6-WIN32 + ORACLE10G)에 매달려 있거나 버그입니까, 아니면 근본적으로 잘못된 일을하고 있습니까?

try {
    $conn = new PDO($DB,$USER,$PASSWORD);
    $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    //connected
    try {
        $conn->exec("DELETE FROM MY_TABLE");
        echo "done";
...

메모: 이것이 버그인지 아닌지 모르겠습니다. 그러나 빠른 검색 후에 버그 보고서를 찾을 수 없었습니다. 나는 뭔가 잘못하고 있을지도 모른다. 그래서 나는 먼저 여기서 물어볼 것이라고 생각했다.

도움이 되었습니까?

해결책

데이터베이스에서 동시에 다른 활동이 있습니까? 그렇다면 교착 상태를 의심 할 것입니다. 일부 커밋되지 않은 DML 트랜잭션은 일부 행을 잠그고있을 수 있습니다. MY_TABLE.

롤백 기능이 필요하지 않은 경우 사용을 고려하십시오 TRUNCATE 대신에 DELETE.

다른 팁

테이블의 전체 스캔을 어디에 두지 않고 삭제합니다. 즉, '하이 워터 마크'아래의 모든 블록을 읽습니다. 즉, 테이블에서 사용 된 모든 블록입니다. 따라서 테이블이 한 번에 매우 크면 소수의 레코드 만 삭제하는 데 시간이 오래 걸릴 수 있습니다. [모든 공간을 읽을 때까지 4 개의 레코드만이 '알지 못하기 때문에].

자손은 이것을하지 않습니다. 사용중인 블록이 빠르게 사용되지 않도록 단순히 테이블의 하이 워터 마크를 움직입니다.

PDO가 꽤 많이 사용되고있는 것처럼 보이기 때문에 매달려있을 가능성은 거의 없습니다.

delete from my_table 얼마나 많은 레코드가 있는지에 따라 시간이 걸릴 수 있습니다. 매달려 있다고 결정하기 전에 얼마나 기다렸고 테이블에 몇 개의 기록이 있었습니까?

동일한 테이블에서 트랜잭션이 실행중인 경우 삭제를 차단할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top