Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Geschwindigkeit von Views verbessern (https://www.delphipraxis.net/143171-geschwindigkeit-von-views-verbessern.html)

Errraddicator 11. Nov 2009 08:53

Datenbank: PostgreSQL • Version: 8.4.1 • Zugriff über: PHP / pgAdmin direkt

Geschwindigkeit von Views verbessern
 
Hiho!

Ich habe eine Datenbank welche unter anderem folgende Tabellen ethält:
o Mandantenstamm
o Zugriffsteuerung (Benutzer -> Mandant)
o Datentabelle

...

Nun habe ich eine View für die Datentabelle erstellt, welche nur noch die Daten anzeigt,
welche mich (also "current_user") auch betreffen (passend zu der Tabelle Zugriffssteuerung)
und das Ganze funktioniert an sich auch einwandfrei.

Das Problem dabei ist aber, dass die Datentabelle div. Millionen Datensätze beinhaltet.
Dadurch dauert das Öffnen der View bestimmt 1 Minute, was natürlich absolut untauglich ist.

Sinngemäßes SELECT Kommando, welches hinter der View liegt:
SQL-Code:
SELECT d.* FROM datentabelle d, zugrifftabelle z WHERE d.mandant = z.mandant
...

Wie gesagt: logisch ist das vollkommen richtig so.
Nur von der Geschwindigkeit her absolut inakzeptablel.

Hat einer von Euch ne Idee, wie man so eine Lösung schneller regeln kann, als über so eine WHERE-Abfrage?


Danke im Voraus

Patrick

ULIK 11. Nov 2009 08:59

Re: Geschwindigkeit von Views verbessern
 
Hast Du die Spalte Mandant in der Datentabelle indiziert? Wenn nicht, mach's mal.

Uli

Bernhard Geyer 11. Nov 2009 09:02

Re: Geschwindigkeit von Views verbessern
 
Indizes vorhanden?
Hat der Server genügend Speicher zur verfügung das diese Indizes auch komplett im Speicher gehalten werden können?

Errraddicator 11. Nov 2009 09:10

Re: Geschwindigkeit von Views verbessern
 
Indizes sind 2 Stück vorhanden.

1x auf die Mandanten-Spalte alleine
und 1x noch etwas genauer (mit Zeitraum und Co.)

...

Das mit dem Speicher ist aber nen guter Tipp, da hat mich auch ein Kollege gerade drauf gebracht!

Weil das ist eine neu aufgesetzte Datenbank und da hab ich noch nix an den Einstellungen von Postgres selbst gedreht.
Vielleicht bringt das was, wenn ich da mal die Speicherbereiche vergößer.

Ich probier es mal aus.

dataspider 11. Nov 2009 09:17

Re: Geschwindigkeit von Views verbessern
 
Hi,

ich tippe eher auf das Statement. Die Indexe werden ja scheinbar nicht benutzt.
Möglicherweise hilft ja schon eine Umstellung von dem where auf ein left join.

Frank

mkinzler 11. Nov 2009 09:20

Re: Geschwindigkeit von Views verbessern
 
Brauchst du zudem alle Felder?

Errraddicator 11. Nov 2009 09:32

Re: Geschwindigkeit von Views verbessern
 
Wenn ich die Abfrage via pgAdmin analysieren lasse scheint er den Index in der Tat nicht zu nutzen.

Das macht er nur, wenn ich die Mandantennummer direkt eintrage.
Sobald ich diese aber aus der anderen Tabelle mit einbeziehe scheint er den zu übergehen.

Hm... Ich probier mal rum, wie ich das umgehen kann.

...

Felder brauche ich übrigens alle, denn diese View weiß nicht wofür sie gebraucht wird.

Die ist nur dafür da, dass ich selbst als DB-Benutzer nur das sehen kann, was mich auch zu interessieren hat, völlig unabhängig davon, welches Programm es nacher wie nutzen wird.

Ich möchte so gesehen die Sicherheitslogik / Datentrennung schon auf Datenbankebene haben und nicht erst auf Applikationsebene.

Bernhard Geyer 11. Nov 2009 09:33

Re: Geschwindigkeit von Views verbessern
 
Ach ja, nochwas: Mio. Datensätze? Schon mal ausgerechnet wieviel MB hier über Netz geschaufelt werden müssen (Clientseitiger Curse vorrausgesetzt) oder wieviel Speicher der Server für den serverseitigen Curser reservieren muss?

Errraddicator 11. Nov 2009 09:44

Re: Geschwindigkeit von Views verbessern
 
Zitat:

Zitat von Bernhard Geyer
Ach ja, nochwas: Mio. Datensätze? Schon mal ausgerechnet wieviel MB hier über Netz geschaufelt werden müssen (Clientseitiger Curse vorrausgesetzt) oder wieviel Speicher der Server für den serverseitigen Curser reservieren muss?

Also Clientseitig mache ich ja hier auch noch mal eine Filterung durch die Applikation selbst.
Die kompletten Daten werden also niemals gebraucht.

Das geht hierbei wirklich um eine reine Datensicherheits / -Berechtigungsgeschichte.
Wir wollen nicht, dass es ÜBERHAUPT irgendeinem Datenbankbenutzer möglich ist SELECT Abfragen direkt auf die Tabellen zu starten.
Dies soll immer nur über Views geschehen, die per se nur das anzeigen, was den Benutzer zu interessieren hat.

Abfragen auf die Tabellen selbst darf nur der Admin und der ist so eingestellt,
dass sich dieser nur von Managementsystemen verbinden darf und nicht von den eigentlichen Produktivsystemen.
(Später auch noch nicht mal mehr vom Localhost).

...

Von daher muss ich das Grundprinzip schon so lassen und da führt auch (meines Wissens nach) kein Weg dran vorbei.

Bei allen anderen Datentabellen funzt das auch einwandfrei, auch vom Tempo her.
Aber die haben auch nur ein paar Hundert bis evt. Zehntausend Datenzeilen und nicht wie diese eine div. Millionen.

mkinzler 11. Nov 2009 09:59

Re: Geschwindigkeit von Views verbessern
 
Benötigst du wirklich alle Rechte aller Benutzer?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.
Seite 1 von 4  1 23     Letzte »    

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