Zum Inhalt springen

Dekan

Mitglieder
  • Gesamte Inhalte

    10
  • Benutzer seit

  • Letzter Besuch

  1. Dekan

    Suche im Array

    Weil es länger dauert. Selbst das was ich programmiert habe ist dreimal so schnell als auf dem Datenbankserver:)
  2. Dekan

    Suche im Array

    Duplikaten gibt es nicht, weil sie nicht in der Datenbank vorhanden sind. Für das Resultat ist die Zuordnung sehr wichtig, weil sie das Ergebnis ist!
  3. Dekan

    Suche im Array

    Vielen Dank für deine Antwort einfach binär zu suchen ergibt immer noch 1.Mio * log(1.Mio) ~ 19,93 Mio Vergleiche, was leider zu viel ist. Aber ich werde es mit meinem Algo vergleichen, vlt. bringt das doch was.
  4. Der Server(die Software) ist mit vollem Speicher konfigueiert(da ist ein Hacken gesetzt) - kann das das Problem sein? Und jetzt glaube ich zu wissen woran es liegt. Vor zwei Monaten haben wir die Speicherauslastung gemessen. Das war jedoch auf dem alten DBServer, bei einer komplizierten Abfrage hat die Speichernutzung fast gar nicht geändert (maximal +/-30 MB), während beide CPU-Kerne mit 70% liefen. SQLStatement besteht aus 3 UNION und es wird in einer VIEW(Sicht) gesucht, die aus 18 UNION ALL besteht(die Tabellen da haben ca.20 Spalten und von 100 bis 2.000.000 Zeilen, je nach Tabelle - VARCHAR, Integer, Real, Float). Und wenn es in der größten Tabelle gesucht wird, dann dauern die drei Abfragen ziemlich lang. hier ist der php Code: //query to get the result of a test analysis: function queryTestAnalyis($values, $upstream, $downstream, $Restriction) { //don't change order of the attributes $return = "SELECT A_name, B_name, position, strand, ISNULL(C_position, A_position) AS A_position, convert(varchar(50), score) as score, wert2, A_strand, lnp FROM VIEW_all_bla_bla_blup WHERE $upstream <= ISNULL(C_position, A_position) AND ISNULL(C_position, A_position) <= $downstream"; $ARestriction = getARestrictionForTestAnalysis($values, "A_name"); if ($ARestriction != "") { $return .= " AND ($ARestriction)"; } if ($BRestriction != "") { $return .= " AND ($BRestriction)"; } $return .= " UNION SELECT prev_A_name, B_name, position, strand, prev_A_position, convert(varchar(50), score) as score, wert2, prev_A_strand, lnp FROM VIEW_all_bla_bla_blup WHERE $upstream <= prev_A_position AND prev_A_position <= $downstream"; $ARestriction = getARestrictionForTestAnalysis($values, "prev_A_name"); if ($ARestriction != "") { $return .= " AND ($ARestriction)"; } if ($BRestriction != "") { $return .= " AND ($BRestriction)"; } $return .= " UNION SELECT next_A_name, B_name, position, strand, next_A_position, convert(varchar(50), score) as score, wert2, next_A_strand, lnp FROM VIEW_all_bla_bla_blup WHERE $upstream <= next_A_position AND next_A_position <= $downstream"; $ARestriction = getARestrictionForTestAnalysis($values, "next_A_name"); if ($ARestriction != "") { $return .= " AND ($ARestriction)"; } if ($BRestriction != "") { $return .= " AND ($BRestriction)"; } $return .= " ORDER BY A_name, B_name ASC"; return $return; } [/PHP] Was uns noch aufgefallen ist: Die Funktion [PHP]getARestrictionForTestAnalysis($values, "A_name"); macht aus Values ein String mit OR-Verknüpfung - val1 OR val2 OR val3 usw. Solange die # von ORs <=64 - dauert die Suche maximal 10 Sekunden, ab 65 sofort 67 Sekunden, bei 100 ca. 92 Sekunden, bei 128 sinkt wieder auf 44, 197 - schon 18 Sek. Woran könnte es liegen? - deswegen dachten wir auch, dass es an dem Arbeitsspeicher liegt.
  5. Wie könnte ich das testen? Da sind keine "Statisticstools" installiert (mein Chef wollte sie nicht haben). Gibt es andere Möglichkeiten? Der hat 4 GB Arbeitsspeicher. Nein das wissen wir leider nicht. Wir haben RAID-5 - 3 Maxtor Festplatten(10.000 rpm) Wir haben nur eine CPU XEON E5600(welche genau weiß ich nicht mehr) und die hat 4 Kerne mit Hyperthreading(also 8 logische) - das sollte reichen - oder? Kann DBMS mehrere CPU-Kerne (logische) für eine Abfrage benutzen? Auf Mainboard ist noch ein Socket frei. Das muss ich dann checken. Vielen Dank
  6. Doch , ich nehme gerne alle Tipps an. Es ist bloß so dass ich mit meinem Vorgesetzten, der kein Informatiker ist, seit langer Zeit einen "Streit" habe. Und er ist der Meinung, dass der Zukauf vom Speicher keine Vorteile bei solch "kleiner" Datenbank bringt. Er hat mit der DB fast gar nichts zu tun. Ich und meine Kollegen führen verschiedene Analysen aus und wir merken, wenn gleichzeitig drei oder mehr langen Abfragen machen, wird es langsamer, obwohl die einzelne Abfrage ziemlich schnell ist ~0.01-0.3 Sekunden je nach Abfrage. Für drei gleichzeitige Abfragen würde es 1-1.5 Sekunden pro Abfrage dauern, deswegen waren wir der Meinung, dass es an dem Arbeitsspeicher liegt. Es wäre natürlich super, wenn du mir andere Tipps geben könnte.
  7. Die Indizes sind schon soweit wie möglich gesetzt(was ja 95% der Tuningmaßnahmen ausmacht) und das hat die Perfomance an manchen Stellen um Faktor 100(!) verbessert, die Tabellen wurden auch den Abfragen angepasst. Also fast alles was zu machen gewesen wäre, wurde gemacht!!! Es geht mehr darum wie man den notwendigen ARBEITSSPEICHER berechnet. Gibt es ein Tool daß die Schwachstellen zeigen kann in SQL Server 2008?
  8. vielen Dank für deine Antwort, OS für Web - Windows Server 2008 64 Bit, DBMS - SQL Server 2008 R2, Analyse Windows Server 2003 64 Bit (wird jedoch im nächsten Jahr umgestellt) Und die Grenzen sind mir auch bekannt (in diesem Fall ist der Speicher jedoch durch Hardware begrenzt - 192 GB). - Sorry ich habe es wahrscheinlich unglücklich formuliert. Meine Frage war aber wie viel Speicher wäre dann Optimal? Ob es was bringt wenn ich statt 4 GB dort 16 GB einbaue und wie ich überhaupt den benötigten Süeicher berechnen kann.
  9. Hallo, wie groß soll der Speicher für eine Datenbank sein. Zur Datenbank: - ca. 70 GB (Integer, Real, Varchar, Float, Text - keine Images o.ä) - Anzahl Tabellen - ca. 100 (von ziemlich kleinen ~100Kb bis ziemlich großen ~ 500MB oder sogar 1GB) - es wird zur Analysen(1) und für Web(2) benutzt (dafür sind 2 Fujitsu TX300S da mit je 4GB Speicher) - geschrieben wird dort kaum, nur wenn neue Tabelle hinzugefügt wird und nicht über Webinterface. Dafür sind extra Rechner da. Ich habe das Gefühl, dass manchmal der Speicher nicht reicht, wenn auf die großen Tabellen gleichzeitig mehr als 3 Abfragen kommen (die sind manchmal kompliziert). Wie kann ich am besten die Größe des Speichers bestimmen
  10. Hallo zusammen, bin hier neu im Forum. Ich suche nach einer schnellstmöglichen Lösung des folgenden Problem. es sind zwei Arrays (eigentlich Hash-Maps)gegeben, aufsteigend sortiert, beide haben über 1. Mio Interger-Werte. Es soll das zweite Array auf Übereinstimmung geprüft werden und zwar so: z.B der erste Wert im ersten Array ist 53500, es wird im zweiten Array nach diesem Wert(Key) und nach den Werten die "daneben" liegen gesucht. Daneben kann auch ziemlich weit sein. Also bei 53500 sollen Werte des zweiten Array gefunden werden, die im Bereich vom 20000 bis 20050 (beispeilsweise, kann auch 0 bis 50 oder 70 bis 90 oder 758350 bis 758355 sein, maximale Diffirenz ist jedoch 50) relativ zu 53500 liegen => (53500-20050) bis (53500-20000) UND (53500+20000) bis (53500+20050): (33450 bis 33500) UND (73500 bis 73550). Bis jetzt habe ich das Problem folgendermaßen gelöst. Das erste Array wird komplett durchgegangen (z.B eine for-Schleife). Danach mithilfe zwei anderen inneren for-Schleifen werden die Werte in einem Array gespeichert, die im zweiten Array zu suchen wären (Also in diesem Bespiel => (33450 bis 33500) UND (73500 bis 73550) - insgesamt 100 Werte maximal). Im zweiten Array(oder besser gesagt Hash-Map) wird nach diesen Schlüsseln gesucht, und wenn sie gefunden werden, werden zum Key gehörenden Values in einem result-Array gespeichert. Somit sind 1.000.000 (1.Array) x 100(maximale # von Werten) = 100.000.000 Durchläufe mindestens notwendig, selbst wenn das zweite Array nicht durchsucht wird. (Dafür sind 32 Sekunden auf einem Xeon CPU) Das Ganze dauert 110 Sekunden bei maximalen Einstellungen (also wenn Streuung 100 ist). Kennt jemand einen Algorithmus, der das schnelle erledigen könnte? Vielen Dank im Voraus

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...