Frage

Dies hängt in Php (5.2.6-Win32 + Oracle10g) ist es ein Fehler, oder ich mache etwas grundlegend falsch?

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";
...

Hinweis: Ich weiß nicht, ob dies ein Fehler ist oder nicht, ich bin zu raten, es ist. Doch wie kann ich nicht einen Fehlerbericht für diesen nach kurzer Suche finden. Ich könnte etwas falsch zu machen, so dass ich dachte, ich zum ersten Mal hier fragen würde, und für die Nachwelt, falls jemand anderes hat ein ähnliches Problem.

War es hilfreich?

Lösung

Gibt es noch andere Aktivitäten gehen in der Datenbank zur gleichen Zeit auf? Wenn ja, würde ich Deadlocks vermuten. Einige uncommitted DML-Transaktion (en) könnten einige Zeilen der MY_TABLE werden verriegelt wird.

Wenn Sie keine Rollback-Funktion benötigen, sollten TRUNCATE anstelle von DELETE.

Andere Tipps

Eine DELETE ohne WHERE wird (wahrscheinlich) einen vollständigen Scan der Tabelle. Das bedeutet, dass es für jeden Block nach der ‚Hochwassermarke‘, heißt es -, dass jeder Block ist, die jemals von der Tabelle verwendet wurde. Also, wenn der Tisch ist, zu einer Zeit, sehr groß, dann kann es eine sehr lange Zeit dauern, nur eine Handvoll von Aufzeichnungen zu löschen. [Weil es ‚wissen‘ nicht, dass es nur vier Datensätze, bis es diesen Raum alles liest.]

Ein truncate tut dies nicht. Es bewegt sich einfach die Hochwassermarke der Tabelle, so dass alle Blöcke, die sich schnell in Gebrauch waren ungenutzt werden.

ziemlich unwahrscheinlich, dass es hängt seit PDO im Gebrauch ziemlich viel zu sein scheint, obwohl, wie viel mit Oracle, ich weiß es nicht.

Ein delete from my_table kann einige Zeit dauern, je nachdem, wie viele Datensätze gibt. Wie lange hat warten Sie vor der Entscheidung, es war gehangen und wie viele Datensätze wurden in der Tabelle?

Wenn es eine Transaktion auf dem gleichen Tisch läuft, könnte es Ihre DELETE blockieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top