phpbar.de logo

Mailinglisten-Archive

Re: Gleichzeitiger Zugriff auf Mysql im WIN-Netz makes trouble
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Gleichzeitiger Zugriff auf Mysql im WIN-Netz makes trouble



Hi,

Joerg Krause:
> 1. Ansatz:
> Schreibvorgänge niedriger priorisieren:
> set SQL_LOW_PRIORITY_UPDATES=1
> oder
> INSERT LOW_PRIORITY
> Dann haben die SELECTs immer Vorrang, was zumindest etwas
> das Gleichzeitigkeitsproblem löst.

Hilft in diesem Fall aber überhaupt nichts.

> 2. Ansatz
> Tabelle LOCKen (aus Handbuch):

> 3. Ansatz
> Lasse die gleichzeitige Eintragung zu und räume die DB
> ab und zu auf. Ich mache solche Garbage Collection mit einem
> Skript, das etwa alle 50 Aufrufe mal anspringt (per random).
> 
Das funktioniert aber nicht immer. Beispielsweise wenn was geupdatet
werden muß.

4. Ansatz: Darauf warten, dass MySQL endlich Stored Procedures kriegt.
Das passiert bestimmt noch dieses Jahr...

5. Ansatz: Eigenes Lock einführen.

mysql> select GET_LOCK('CUST_$some_id',99)
       wenn == 0: DEADLOCK melden, beenden
>       mysql> select sum(value) from trans where customer_id= some_id;
>       mysql> update customer set total_value=sum_from_previous_statement
>                  where customer_id=some_id;
mysql> select RELEASE_LOCK('CUST_$some_id')

$some_id ist dabei natürlich die ID des zu schützenden customer-Records.


In Perl (mit meinem persönlichen Datenbank-Interfacecode) sieht das dann
so aus:

DoLocked {
	my $sum = DoFn("select sum(value) from trans where customer_id=$id");
	Do("update customer set total_value=$sum where customer_id=$id");
} "CUST_$id";


"DoLocked" ist dabei dieser Code:

sub DoLocked (&$;$) {
    my($job,$lock,$timeout) = _(at)__;
	$timeout ||= 99;
    my($res,_(at)_res);

    $lock = Quote($lock);
    DoFn("select GET_LOCK('$lock',$timeout)")
    	or die("Deadlock '$lock'";

	if(wantarray) { _(at)_res = &$job; } else { $res = &$job; }

	DoFn("select RELEASE_LOCK('$lock')");

	wantarray ? _(at)_res : $res;
}
                                         

Simpler geht es nicht.
                                         
-- 
Matthias Urlichs  |  noris network GmbH   |   smurf_(at)_noris.de  |  ICQ: 20193661
The quote was selected randomly. Really.    |      http://www.noris.de/~smurf/
-- 
Bill Watterson, cartoonist: "Sometimes I think the surest
sign that intelligent life exists elsewhere in the universe
is that none of it has tried to contact us."

---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive