DB Tuning Referat

Hallo Leute :wave:

ich mache gerade meinen Techniker und soll im Fach Datenbanken ein Referat über Datenbank-Tuning halten, dort habe ich Indizes usw. bereits aufgeführt und mir fehlen quasi nur noch die wichtigsten postgresql Befehle…

mein Dozent hatte mir bereits folgende Seite gegeben:

ich habe mir pgAdmin auf dem Rechner gemacht und folgende DB eingefügt:

ich soll folgende Befehle nutzen:

  • Anlegen eines Index
  • explain
  • analyse

habt ihr ne Ahnung wie ich das am besten in einem Referat umsetzen kann?

Problem an der Sache ist, dass ich in DB echt grottig bin, aber eine gute Note aufgrund der nicht sooo guten Klausur bräuchte, ihr seid meine letzte Hoffnung…

mit freundlichen Grüßen

Du solltest Dich zuerst einmal damit beschäftigen, was folgende Befehle machen, und was der Unterschied ist:

  • EXPLAIN
  • ANALYSE
  • EXPLAIN ANALYSE

Um das besser zu verstehen, solltest Du Dich mit dem Kostenmodell beschäftigen.

Hint: es gibt dazu auch massig im Internet zu finden, von Blogposts bis youtube-Videos von Vorträgen.

Wenn Du das verstanden hast: in einem Referat kommt es sicherlich gut, daß das zu zeigen, also wie z.B. durch das Anlegen eines Index der Plan sich ändert, wie der Plan sich ändert, wenn die Tabelle größer wird, wie unterschiedliche Indexe (z.B. mehrere einspaltige Indexe im Vergleich zu einem Multicolumn-Index) etc.

Man bekomt da schnell einen Tag gefüllt …

1 „Gefällt mir“

Wenn Du schon ein Upgrade des SQL Skriptes auf Postgres geschafft hast, ist das doch schon mal ein guter Anfang :wink:

Die Vorlesung scheint mit MySQL gehalten zu werden (ich könnte jetzt böse sein, und behaupten, dass die Vorlesung dann wohl keinen großen Wert auf die Vermittlung von modernem oder sogar korrektem SQL legt - aber das wäre zu primitiv).

Die Möglichkeiten des Tuning und der Execution Plan bei MySQL sind - sagen wir mal freundlich - “einfach gehalten”.

Postgres stellt da schon deutlich mehr Werkzeuge zur Verfügung und auch der Exection Plan ist um Welten detaillierter und aufschlussreicher als der von MySQL. Sicherheitshalber solltest Du Deinen Betreuer fragen, ob die Präsentation der Ergebnisse auf Basis von Postgres auch OK ist, bevor Du da viel Zeit rein steckst und am Ende eine “Themaverfehlung” ablieferst.

Zum Referat selber:

Die Veränderung bzw. Verbesserung der Performance eines Statements durch das Anlegen von Indizes ist sicherlich ein Aspekt so eines Referates.

Darzustellen, wie man erkennt warum ein Statement langsam ist, gehört auch dazu. Die Analyse des Execution Plan/Ausführungsplans ist dabei der wichtigste Schritt.
“Use The Index Luke” gibt viele wertvolle Tipps worauf man da achten sollte und wie man so einen Plan liest.

Zum Tuning gehört auch, dass man verschiedene Varianten eines Statements ausprobiert. Z.B. statt einer NOT IN Bedingung eine NOT EXISTS verwendet. Auch hier kann der Execution Plan zeigen, welche der beiden effizienter ist.

Ein weiterer Punkt beim Tuning von Statements ist die Verwendung von Bedingungen die einen Index verwenden können.

Klassisches Beispiel sind Bereichsabfragen auf Zeitstempel (Timestamp) die die Zeit ignorieren sollen, aber auch Bedingungen auf numerische Werte, welche die Nachkommastellen ignorieren sollen.

Das entsprechende Kapitel bei “Use The Index Luke” ist https://use-the-index-luke.com/de/sql/where/verstuemmelung

pgAdmin ist dafür bekannt, bei Anzeigen größerer Ergebnisse sehr langsam zu sein. Ausührungszeiten solltest Du also immer mit explain (analyze) select ... messen um sicher zu gehen, dass die Messung nicht durch die Anzeige von pgAdmin verfälscht wird.

1 „Gefällt mir“

Genau das ist es ja, es sind so viele Sachen im Netz und es wird sehr viel Fachsprache verwendet und dann teilweise in einem schlechten oder zu schnellen englisch, was das ganze nicht wirklich einfacher macht.

Aber danke, ich werde mal YouTube durchforsten…

es gibt auch slides, und wenn etwas nicht klar ist, dann frage, wir helfen.

Andreas

1 „Gefällt mir“

Alleine das Umschreiben und implementieren der Datenbank in pgAdmin hat mich schon sehr viele Nerven gekostet… ;D

Du kannst ruhig böse sein, selbst unser Dozent kennt sich anscheinend nicht mal wirklich gut mit dem Thema aus…

Einfach ist gut!!! :smiley:

Also die Basis ist definitiv ausreichend, will halt nur paar leichte verständliche Befehle zeigen, die man einfach umsetzen kann.

Das auf jeden Fall. :+1:

Gut, dann werde ich die Seite auch nochmal in Ruhe durchforsten, die ist ja zum Glück auch auf Deutsch verfügbar :+1:

In Verbindung mit EXPLAIN, ANALYS & EXPLAIN ANALYSE oder wie?

Das gucke ich mir auch gleich mal an. :slight_smile:

Haben die denn nicht die selben Zeiten? Und ich frag mich auch schon die ganze Zeit, wann eine Abfrage denn groß und komplex genug ist für eine Anschauung, denn einmal gefragt ist doch die alte Anfarge im Cache oder nicht?

Grüße
Igna

Es gibt Caches für Abfragen und für Ergebnisse.
Gecachte Abfragen brauchen nicht mehr analysiert zu werden, Daten im Chache nicht mehr von der Platte gelesen werden.
Du kannst Dir einfach folgendes vorstellen. Eine große Ergebnis-Datenmenge muss zum Client übertragen werden (auch wenn er auf dem gleichen System ist.) Das kostest Zeit und kann unterschiedlich gut umgesetzt sein.

Große Abfragen müssen nicht unbedingt auf großen Datenmengen erfolgen, es können auch sehr viele Tabellen beteiligt sein, Rekursion, …
Große Abfragen können Millionen von Datensätzen durchsieben, aber nur eine einzige Zahl zurückliefern.

1 „Gefällt mir“

So Leute, habe letzten Freitag das Referat gehalten und mit euren Tipps eine 1 bekommen, danke dafür und für eure schnelle und nette Hilfe! :smiley:

2 „Gefällt mir“