Antworten:
Im Allgemeinen ist das Problem im Grunde offensichtlich. Dies passiert, wenn mysql keine Zeit hat, Abfragen schnell zu verarbeiten und Tabellen sperrt, in diesen Momenten gibt es einen DEADLOCK-Fehler oder etwas Ähnliches wie has been away . Und einige der Daten (wie der Statusübergangsverlauf) werden möglicherweise einfach nicht in die Datenbank eingefügt. Es wird auf zwei Arten gelöst: 1) Erhöhen der Leistung des Servers 2) Aktivieren des abgesicherten MYSQL-Modus, der Ihnen einen Fehler auf dem Bildschirm anzeigt, wenn eine der benötigten Tabellen im Moment gesperrt ist, ich habe Punkt 2 für Sie eingefügt
02.10.2020, 17:16
Originalkommentar zur Version verfügbar: ru
Server (RAM, Prozessor)? 2. Habe ich einige komplexe Geschäftsprozesse (Subtasks in die erforderlichen Status übertragen und den Status an den Socket für Subtasks senden), die der Server nicht zu Ende bringen kann? 3. Warum reichte die Leistung nicht aus, um die Ware abzuschreiben, aber genug, um sie in den Fertigstellungsstatus zu überführen, obwohl dies das Letzte ist, was das System tun sollte? 4. Warum ist bei einem Prozess mit 3 Teilprozessen ein Problem aufgetreten, bei einem Prozess mit 14 Teilprozessen jedoch nicht?
02.10.2020, 18:56
Originalkommentar zur Version verfügbar: ru
1. Ich mache keine kostenlosen Analysen Ihres Servers, um diese Frage zu beantworten. 2. Nein, ich glaube nicht. 3. Die Tabelle könnte durch einen anderen Prozess gesperrt sein (im Hintergrund, zum Beispiel mit cron). egal wie viele Unterprozesse
05.10.2020, 09:15
Originalkommentar zur Version verfügbar: ru
Wenn ja, dann ist das für mich ganz ähnlich wie bei einem Bug gibt es Sperrverfahren im Systemsatz oder der gesamten Tabelle, dann müssen andere Verfahren erst klären, ob der Satz oder die Tabelle vor der Aktualisierung gesperrt ist, und danach ihre Arbeit verrichten (unter gleichzeitiger Sperrung des Satzes oder der Tabelle) Und jetzt kommt es heraus, so dass es ein Stück Code gibt, etwas muss darin aktualisiert werden, die Prozedur wurde von der Datenbank abgelehnt, und dann, na gut, ich gehe weiter, übertrage es auf den Status abgeschlossen, ich nicht kümmere dich darum, dass die Datenbank abgelehnt hat, meine Aufgabe ist es, zum Status "Abgeschlossen" zu gehen. Soweit ich mich erinnere, hast du das Sperrprinzip nirgendwo angewendet, du hast so etwas wie den Code "Wer der Letzte und Hausschuhe" geschrieben. Oder habe ich nicht richtig gedacht und dich nicht richtig verstanden (es ist nur so, dass ich jetzt einen Fehler habe, der Status der Geschichte ist einer, in Wirklichkeit ist es anders und wer ihn beheben wird, ist mir nicht klar)?
05.10.2020, 10:54
Originalkommentar zur Version verfügbar: ru
Igor, ich bin auch nicht bereit zu studieren, ich brauche es im Moment nicht, ich brauche das System, um stabil zu arbeiten, während Dinge auftauchen, die Angst machen und sich jeder angemessenen Logik widersetzen (die Basis lebt weiter ihr eigenes Leben, der Manager, der auf den Knopf drückt, kommt im anderen zum Vorschein). Obwohl mir nicht klar ist, was das Problem ist, sagten Sie anfangs, dass der Server, jetzt die Tabellensperre (für mich sind dies nicht zusammenhängende Dinge, global) Können Sie mir konkret sagen, dass Sie bei dieser Aufgabe ein Problem mit der Tabellensperre haben, um dieses problem zu lösen brauchst du .. .. oder dass du einen schlechten server hast, nicht genug ram (ich werde den server testen und versuchen diesen fehler wieder zu bekommen und dann schreibe ich den hoster an damit ich testweise erhöhen kann die Parameter, die nicht ausreichen, wie das letzte Mal, als Sie sagten, dass Sie RAM hinzufügen müssen)?
05.10.2020, 11:14
Originalkommentar zur Version verfügbar: ru
Verbinden Sie, was ich geschrieben habe, und beantworten Sie Ihre Frage: Jede Transaktion in der Datenbank sperrt die Tabelle, und die Sperrzeit hängt von der Leistung des Servers ab, je leistungsfähiger er ist, desto schneller führt er die Operation aus und entsperrt die Tabelle und die Chance um zu LOCK zu gelangen, wird weniger sein. Das ist klarer?
05.10.2020, 11:32
Originalkommentar zur Version verfügbar: ru
Verstehen Sie, wie Sie möchten - ich werde mich nicht wie ein Kind mit Ihnen anlegen, und auch andere habe ich Ihnen im 1. Kommentar geschrieben, was getan wurde, um das Problem zu lösen, und was passieren wird, der Rest ist rein deine Neugier, die meine Zeit in Anspruch nimmt
05.10.2020, 23:58
Originalkommentar zur Version verfügbar: ru