AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL Select mit LOW_PRIORITY
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL Select mit LOW_PRIORITY

Ein Thema von Memo · begonnen am 4. Feb 2009 · letzter Beitrag vom 6. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#1

MySQL Select mit LOW_PRIORITY

  Alt 4. Feb 2009, 19:39
Datenbank: MySQL • Version: 5.1.x • Zugriff über: MyDAC
Guten Abend,

ich suche einer Möglichkeit bestimmten Abfragen eine geringere Priorität zu geben.

Hintergund: Eine kleine Select-Abfrage die für sich alleine wenige Millisekunden dauert, hat sich im Multiuserbetrieb als Bremse herausgestellt. Wird die Abfrage ausgeführt und andere Rechner sind lesend/schreibend auf der selben DB unterwegs, steht alles bis diese eine Abfrage ausgeführt ist.

Für Insert, Update und Delete gibt es LOW_PRIORITY und HIGH_PRIORITY, aber für Select nur HIGH_PRIORITY.

Kennt jemand einen Weg, ein Select in der Warteschlange des Servers nach hinten zu befördern?

Danke für Ideen.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: MySQL Select mit LOW_PRIORITY

  Alt 4. Feb 2009, 21:03
Hallo,

das wird nicht geben. Wenn dann musst du alle INSERT- und UPDATE-Statements mit LOW_PRIORITY oder sogar DELAYED starten, damit die SELECT-Statements eher drankommen.

Allerdings kann auch die Storage Engine schon weiterhelfen. MyISAM sperrt bei Schreiboperationen immer die ganze Tabelle, waehrend InnoDB nur die betroffenen Zeilen sperrt. So ist nicht alles blockiert, wenn mal ein INSERT laenger dauert. Was da allerdings noch anfaellt sind Index-Updates, welche natuerlich zeitaufwaendig sind. Da solltest du mal ueberpruefen, welche Kardinalitaet die Indizes haben.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: MySQL Select mit LOW_PRIORITY

  Alt 4. Feb 2009, 22:16
Zitat von alcaeus:
das wird nicht geben. Wenn dann musst du alle INSERT- und UPDATE-Statements mit LOW_PRIORITY oder sogar DELAYED starten, damit die SELECT-Statements eher drankommen.
Würde ich ja, nur bräuchte ich es genau anders herum.

Zitat:
Allerdings kann auch die Storage Engine schon weiterhelfen. MyISAM sperrt bei Schreiboperationen immer die ganze Tabelle
InnoDB hat andere Geschwingigkeits- und Speichernachteile. Die Nachteile dieser Konstellation überwiegen leider.

Zitat:
Was da allerdings noch anfaellt sind Index-Updates, welche natuerlich zeitaufwaendig sind. Da solltest du mal ueberpruefen, welche Kardinalitaet die Indizes haben.
Wie gesagt, das fragliche Select-Statement ist sehr schnell, wird natürlich durch viele lesende Zugriffe angemessen verlangsamt, nur blockiert es seinerseids alle anderen Zugriffe(lesend/schreibend).
Die Indizes sind (imho) so ausgereizt, damit die Select's performant ablaufen. Laut Explain gibt es nichts zu verbessern.
Aber eines stimmt, die hauptsächlich beteiligte Tabelle hat mehrer Millionen Einträge. Verkleinern hilft natürlich massiv, nur ist es keine Lösung.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: MySQL Select mit LOW_PRIORITY

  Alt 4. Feb 2009, 22:31
Wieviel RAM-Speicher genehmigt sich den MySQL (und wieviel ist den vorhanden). Je nach Installation und Konfiguration ist MySQL sehr konvervativ und verschenkt sehr viel Performance aufgrund der Konfiguration.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: MySQL Select mit LOW_PRIORITY

  Alt 4. Feb 2009, 22:36
Kann ich aus dem Hut nicht sagen. Ich schaue morgen mal nach der Konfiguration.
  Mit Zitat antworten Zitat
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: MySQL Select mit LOW_PRIORITY

  Alt 5. Feb 2009, 11:55
Ich habe mal einige Versuche angestellt:

Engine: myisam

System: Intel 4 Kern 2,67 GHz mit 2GB Ram
Prozessorauslastung bis auf 100% (ein Kern genutzt)
Speicher gerade mal 30%
key_buffer-size=129M

jetz mal key_buffer-size=1G
gleiches Ergebnis

Im Kofler(MySQL-Buch) steht auch nur, dass Tuning ein ganzes Buch füllen würde und reisst das Thema dann nur kurz an.

Welche Schraube könnte man noch anziehen?
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#7

Re: MySQL Select mit LOW_PRIORITY

  Alt 5. Feb 2009, 12:16
Zitat von Memo:
System: Intel 4 Kern 2,67 GHz mit 2GB Ram
Prozessorauslastung bis auf 100% (ein Kern genutzt)
also wenn nur ein Prozzesorkern benutzt wird dann hast du wahrscheinlich nur einen Arbeiterthread eingestellt. Leider kann ich dir gerade nicht genau sagen wie die Option heißt aber du solltest bei 4 Porzzesor kernen 8 Arbeiterthreads haben um den Prozzesor optimal ausnutzen zu können.
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: MySQL Select mit LOW_PRIORITY

  Alt 5. Feb 2009, 18:05
Zitat von gsh:
also wenn nur ein Prozzesorkern benutzt wird dann hast du wahrscheinlich nur einen Arbeiterthread eingestellt. .
Eine solche Einstellung kenne ich nicht. In der Referenz und mit Google lässt sich auch nichts passendes finden.
Meinst Du eventuell Cluster-Server?
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#9

Re: MySQL Select mit LOW_PRIORITY

  Alt 5. Feb 2009, 19:45
Theoretisch sollte MySQL im threaded-mode arbeiten, und somit mehrere Kerne benutzen. Mit was fuer einer DB-Groesse haben wir es hier zu tun?

Zitat von Memo:
InnoDB hat andere Geschwingigkeits- und Speichernachteile. Die Nachteile dieser Konstellation überwiegen leider.
Das kann ich so nicht stehn lassen. Es kommt ganz drauf an wie du InnoDB konfigurierst. Das Ding kann teilweise viel performanter laufen als MyISAM - natuerlich abhaengig von der Datenbank. Eventuell waers mal geschickt wenn du ein paar Infos ueber die Tabelle posten koenntest (Aufbau, Index-Kardinalitaeten, Anzahl Datensaetze), dann koennte man eher was machen. Ohne Blick auf die Datenbank laesst sich da nichtmal ein Hauch von Optimierung betreiben.

Um es kurz zu sagen: ein LOW_PRIORITY bei SELECT gibt es nicht - du musst wenn schon die INSERTs und UPDATEs mit LOW_PRIORITY ausfuehren, wenn die Abfrage schneller laufen soll. Andere Alternative waere die Ergebnisse zu cachen, aber wenn da wiederum einige INSERT- und UPDATE-Statements laufen dann bringts das nicht unbedingt.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Memo
Memo

Registriert seit: 19. Aug 2003
509 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: MySQL Select mit LOW_PRIORITY

  Alt 5. Feb 2009, 22:23
Zitat von alcaeus:
Theoretisch sollte MySQL im threaded-mode arbeiten, und somit mehrere Kerne benutzen. Mit was fuer einer DB-Groesse haben wir es hier zu tun?
Im Gigabyte-Bereich, mit mehreren Millionen(3 stellig) Tupeln.

Zitat von Memo:
Das kann ich so nicht stehn lassen. Es kommt ganz drauf an wie du InnoDB konfigurierst.
Mal ein simples Beispiel:

Tabelle InnoDB ; ca. 2.000.000 Datensätze; 220000 KB
select ID,Feld1 from tabelle where Feld1 like '%1234567%' ca. 1 Minute

Explain
select_type = simple
type=all
possible_keys=NULL
Key=Null
ref=Null
Rows=2125855
Extra=Using Where


Gleiche Konstellation. Einzige Änderung, Engine=MyIsam
< 2 Sekunden
Explain gleich.

Wie sollte man InnoDB konfigurieren damit es den Wert einer MyIsam erreicht?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz