PythonQ 240-8XX Manual de usuario Pagina 494

  • Descarga
  • Añadir a mis manuales
  • Imprimir
  • Pagina
    / 768
  • Tabla de contenidos
  • MARCADORES
  • Valorado. / 5. Basado en revisión del cliente
Vista de pagina 493
Kapitel 7: MySQL-Sprachreferenz 473
Wenn Sie viele Operationen auf einer großen Zahl von Tabellen laufen lassen wollen, ist
es viel schneller, die Tabellen zu sperren, die Sie benutzen werden. Der Nachteil besteht
nat¨urlich darin, dass kein anderer Thread eine READ-gesperrte Tabelle aktualisieren und
kein anderer Thread eine WRITE-gesperrte Tabelle lesen kann.
Der Grund, dass einiges mit LOCK TABLES schneller geht, liegt darin, dass MySQL den
Schl¨ussel-Cache f¨ur die gesperrten Tabellen nicht auf Platte zur¨uckschreibt (flush), bis
UNLOCK TABLES aufgerufen wird (normalerweise wird der Schl¨ussel-Cache nach jedem
SQL-Statement auf Platte zur¨uckgeschrieben). Das erh¨oht die Geschwindigkeit bei den
Operationen INSERT / UPDATE / DELETE bei MyISAM-Tabellen.
Wenn Sie einen Tabellen-Handler in MySQL benutzen, der keine Transaktionen un-
terst¨utzt, m¨ussen Sie LOCK TABLES benutzen, wenn Sie sicherstellen wollen, dass kann
anderer Thread zwischen einem SELECT und einem UPDATE dazwischen kommen kann.
Das unten stehende Beispiel erfordert LOCK TABLES, um sicher ausgef¨uhrt zu werden:
mysql> LOCK TABLES trans READ, kunde WRITE;
mysql> select sum(wert) from trans where kunde_id=irgendeine_id;
mysql> update kunde set gesamt_wert=summe_aus_vorherigem_statement
where kunde_id=irgendeine_id;
mysql> UNLOCK TABLES;
Ohne LOCK TABLES besteht die oglichkeit, dass ein anderer Thread eine neue Zeile
in die trans-Tabelle einf¨ugt, zwischen der Ausf¨uhrung des SELECT- und des UPDATE-
Statements.
Wenn Sie inkrementelle Updates (UPDATE kunde SET wert=wert+neuer_wert) oder
die LAST_INSERT_ID()-Funktion benutzen, onnen Sie LOCK TABLES in vielen allen
vermeiden.
Einige Problemf¨alle onnen Sie auch osen, indem Sie die Sperrfunktionen auf Benutzerebene
GET_LOCK() und RELEASE_LOCK() benutzen. Diese Sperren werden in einer Hash-Tabelle
im Server gespeichert und sind mit pThread_mutex_lock() und pThread_mutex_unlock()
f¨ur die Erzielung oherer Geschwindigkeit implementiert. Siehe Abschnitt 7.3.5.2 [Miscel-
laneous functions], Seite 429.
Siehe Abschnitt 6.3.1 [Internal lo cking], Seite 345 wegen weiterer Informationen ¨uber Sper-
rmethoden.
Sie onnen alle Tabellen in allen Datenbanken mit Lesesperren sperren, und zwar mit dem
FLUSH TABLES WITH READ LOCK-Befehl. Siehe Abschnitt 5.5.3 [FLUSH], Seite 241. Das ist
eine sehr bequeme oglichkeit, Datensicherungen zu erhalten, wenn Sie ein Dateisystem
wie Veritas haben, dass Schnappsch¨usse im Zeitverlauf aufnehmen kann.
HINWEIS: LOCK TABLES ist nicht transaktionssicher und schickt automatisch jegliche ak-
tiven Transaktionen ab (Commit), bevor es versucht, die Tabellen zu sperren.
7.7.3 SET TRANSACTION-Syntax
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
[READ UNCOMMITTED |READ COMMITTED | REPEATABLE READ | SERIALIZABLE]
Setzt die Transaktionsisolationsebene f¨ur die globale, gesamte Sitzung oder f¨ur die achste
Transaktion.
Vista de pagina 493
1 2 ... 489 490 491 492 493 494 495 496 497 498 499 ... 767 768

Comentarios a estos manuales

Sin comentarios