Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Lange ladezeit - Großes Projekt

Frage Entwicklung PHP

Mitglied: Lordnox87

Lordnox87 (Level 1) - Jetzt verbinden

28.07.2008, aktualisiert 22:29 Uhr, 4070 Aufrufe, 14 Kommentare

Hallo,


ich habe ein großes Problem mit meinem Projekt. Es ist eine Art Shop á la Ebay.

Nun zu meinem Problem. Es kommt oft vor das die Seite sehr lange bzw. garnicht läd.

Hardware:
AMD 3200+ (2 GHz)
2 GB RAM
200 GB Festplatte


Bei dem CMS Handelt es sich um eine eigentwicklung. Die Datenbank umfasst rund 200 MB. Wobei die Angebote knapp 100 MB ausmachen. Es sind durchschnittlich ca. 30-40 User online. Die CPU ist fast immer zu 100% ausgelastet laut meines Hosters. Das Hauptproblem liege in der DB so die aussage des Hosters.

05e9d5053499d937329a0ec9c0112703-langsam - Klicke auf das Bild, um es zu vergrößern

Was ich mir jedoch schonmal gedacht habe ist folgendes.... Alle Bilder liegen in /images/ Angebots-ID / Bildname.jpg

Jetzt muss das System also knapp 240.000 Ordner durchgehen um den Richtigen Ordner zu finden, kann das etwas mit der langen Ladezeit zu tun haben?


Ich habe mir bereits die slowqueries.log zukommen lassen und diese Probleme behoben. Gibt es sonst eine Möglichkeit herrauszufinden wie es zu den langen Ladezeiten kommt? Ich muss dazu sagen das es manchmal auch bei Seiten ohne/mit nur wenigen SQL-Abfragen zu dieser langen Ladezeit kommt.


Ich weiss das ich gerade auf eure Glasskugeln setzte, aber ich kann/darf leider nicht so viele Infos hier veröffentlichen.

Danke und Gruß
Mitglied: kaiand1
28.07.2008 um 20:19 Uhr
Mach eine Zeitmessung rein wielange der reine PHP Code brauch zum abarbeiten, die Datenbank braucht führ ihre bearbeitung.... und dann wo die hohe Zeit ist die Scripte genauer analysieren und schon hast du dein Problem gefunden!
Bitte warten ..
Mitglied: Dani
28.07.2008 um 20:41 Uhr
G' Abend,
das Problem kann von verschiedenen Faktoren abhängen:

  • Anbindung des Servers ans Internet
  • Deine Internetverbindung bzw. Konten deines ISP ist bei 100% und droppt Pakete (gibt es...)
  • (teils) schlechte Programmierung - Keine Klassen, unstruktiert programmiert, falsches DB-Design
  • MySQL / Apache - IIS falsch konfiguriert

So spontan kann man als den Fehler nicht festmachen. Vllt. kannst du erstmal was zu den oberen Punkten sagen....

Was mich interessieren würde ist dieser Gedanke. Kannst du uns erklären, warum du das so gemacht hast?
01.
Jetzt muss das System also knapp 240.000 Ordner durchgehen um den Richtigen Ordner zu finden, kann das etwas mit der langen Ladezeit zu tun haben?

Gruss,
Dani
Bitte warten ..
Mitglied: Lordnox87
28.07.2008 um 20:46 Uhr
So danke erstmal hab es gerade mal gemacht und hat sich auch wirklich gelohnt, sehr aufschlussreich!

Also ich weiss jetzt ziemlich sicher das das alles mit der Angebotstabelle in der Datenbank zu tun hat.

"Zeige Datensätze 0 - 29 (241.412 insgesamt, die Abfrage dauerte 33.1256 sek)"

Ich poste einfach mal die Datenbank Struktur bestimmt hat jemand ne Idee wie ich es besser und somit Performanter umbauen könnte...



CREATE TABLE `offers` (
`offer_id` int(10) NOT NULL auto_increment,
`customer_id` int(10) NOT NULL default '0',
`user_id` int(10) NOT NULL default '0',
`lang_id` tinyint(2) NOT NULL default '0',
`offer_status` tinyint(1) NOT NULL default '1',
`category_id` int(10) NOT NULL default '0',
`category_id_2` int(10) NOT NULL default '0',
`offer_time` int(10) NOT NULL default '0',
`offer_endtime` int(10) default NULL,
`offer_title` varchar(120) collate latin1_general_ci NOT NULL default '',
`offer_text` text collate latin1_general_ci,
`offer_price` int(10) default NULL,
`offer_pieces` int(10) default '0',
`offer_upe` int(10) default NULL,
`offer_uvp` int(10) default NULL,
`offer_articlenumber` varchar(30) collate latin1_general_ci default NULL,
`offer_minimum_purchase` int(10) default '0',
`offer_shippingtime` varchar(10) collate latin1_general_ci default NULL,
`offer_articlequality` tinyint(2) default '10',
`offer_price_per` tinyint(2) default NULL,
`offer_packing` tinyint(2) default '0',
`offer_shippingcosts` int(10) default '0',
`offer_hits` int(10) NOT NULL default '0',
`offer_watchers` mediumint(5) NOT NULL default '0',
PRIMARY KEY (`offer_id`),
KEY `category_id_2` (`category_id_2`),
KEY `category_id` (`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci PACK_KEYS=0;
Bitte warten ..
Mitglied: Lordnox87
28.07.2008 um 20:48 Uhr
Ich wollte damit eigentlich genau bewirken das das ganze Schneller von statten geht! Wie währe es denn besser. Alle Bilder in einen Ordner und alle Thumbnails in einen anderen?

Danke und Gruß
Bitte warten ..
Mitglied: kaiand1
28.07.2008 um 21:08 Uhr
Nun jedes Angebot hat ja seine eigende ID daher ein Ordner für die Bilder mit id-bild id-bild2 ect zb speichern...
Bitte warten ..
Mitglied: Lordnox87
28.07.2008 um 21:14 Uhr
Ist das denn sicher schneller ? Hast du damit schon erfahrungen gemacht? Soll kein Angriff sein, bin nur ein wenig am verzweifeln.


Danke und Gruß
Bitte warten ..
Mitglied: Dani
28.07.2008 um 21:19 Uhr
Hi,
naja, wie wärs, wenn du zum Artikel einfach eine Tabelle anlegst, wo ALLE Bilder mit der BeitragsID verknüpft werden. Somit ist es eine REINE SQL Geschichte und somit wesentlich schneller. Das wirst du auf jeden Fall merken.

Ein weitere Punkt wäre, nur die HTML Tags in PHP oder ASP schreiben, wirklich nötig sind. D.h. alles was statisch ist nicht Parsen lassen. Das wirst du merken, wenn viele User (> 40) deine Seite besuchen.

NIE SO MACHEN:
01.
<? 
02.
echo '<html>'; 
03.
echo '<head>'; 
04.
.... 
05.
 
06.
?>
Sondern so:
01.
<html> 
02.
<head> 
03.
<? include_once ("");?> 
04.
....
Gruss,
Dani
Bitte warten ..
Mitglied: Dani
28.07.2008 um 21:25 Uhr
Das ist legendlich die Strutkur einer Tabelle, nicht die Datenbankstruktur.
33 Sekunden für 290.000 Einträge ist ganz gut. Also das sieht schon mal gut aus...

Was ich mich frage, warum hat z.B. "uvp", "price", etc... 10 Stellen? Ist das wirklich nötig? Denn bei deiner Datenbankstrutkur und Anzahl der Datensätze rechnet sich das später bei einem Dump oder Berechungen.
==> Felder immer nur so groß dimensonieren, wie nötig!


Gruss,
Dani
Bitte warten ..
Mitglied: Lordnox87
28.07.2008 um 21:37 Uhr
Hi,

danke, das mit der Tabelle für die Bilder ist bereits so umgesetzt, also die Datenbank ist eigentlich komplett normaliesiert. Auch sind sinvolle Index'es gesetzt.

Ich benutzte Smarty als Templatesystem, wollte mir dannach einmal Zend anschauen!

Danke und Gruß
Bitte warten ..
Mitglied: Dani
28.07.2008 um 21:54 Uhr
Ok...dann würde mich mal die Auslastung nun interessieren bzw. die Dauer der Seitenaufrufe. Denn es müsste auf jeden Fall zügiger gehen....Ansonsten vergrößere den Cache von MySQL von 16MB auf 128MB. Und erzeuge von den Abfragen, die sehr oft ausgeführt werden, temporäre Dateien. Mit fällt bloß grad das Stichwort nemme ein. Ist eine Neuerung von MySQLv4 zu v5.


Gruss,
Dani
Bitte warten ..
Mitglied: Lordnox87
28.07.2008 um 22:02 Uhr
Stimmt, ist nur die Tabellenstruktur für die eine Tabelle.

Nein es braucht keine 10 stellen, stimmt werde das Umbauen, danke!
Bitte warten ..
Mitglied: Lordnox87
28.07.2008 um 22:06 Uhr
Leider habe ich dort keinen einfluss auf die MySQL Config, das liegt alles beim Hoster. Und ich muss dazu sagen das ich mich noch nicht wirklich mit der Administration von MySQL server auseinander gesetzt habe!

Du machst mir den eindruck, als könntest du das wissen

Was sind der "Query Cache Hitrate" und der "Key buffer". Stimmt es das ein "Key buffer" umso besser ist desto höher die % Angabe? Ich muss ehrlich sagen habe ich gelesen, aber kann es mir nicht/nur schlecht vorstellen.

Danke und Gruß
Bitte warten ..
Mitglied: Dani
28.07.2008 um 22:26 Uhr
Abend,
zu "Key buffer" kann ich dir nix selbst sagen, aber hierstehen ein paar Tipps dazu.

Die Hitrate ist die Anzeige im HealthMonitor (zu deutsch "status) unter MySQL. Dieser Wert ist abhängig von den Variablen "query_cache_limit" & "query_cache_size". Diese musst du anpassen. Der 1. Wert gibt an, wie viel Platz eine Abfrage benutzen darf. Die Andere den Gesamtspeicherplatz.
Um so mehr die Hitrate unter Status ausschlägt, um so mehr werden die Daten aus dem Cache gezogen und somit sieht der Besucher das Ergebnis in einm Bruchteil der normal Berechnung.

P.S. Sry, ist bei schon ein Weilchen her, dass ich mit solchen DB-Systeme gearbeitet habe.

Leider habe ich dort keinen einfluss auf die MySQL Config, das liegt alles beim Hoster
Dann soll er das auf deinen Wunsch anpassen. Ansonsten einfach zu einem anderen Hoster wechseln. Ich würde da einen guten kennen.


Gruss,
Dani
Bitte warten ..
Mitglied: Dani
28.07.2008 um 22:29 Uhr
Bitte alle Tabellen prüfen und Indizes, ggf nochmal neu generien.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Microsoft
Extrem lange Bootzeit einiger Server (10)

Frage von Shnuuu zum Thema Microsoft ...

Microsoft Office
Rechnungen in Word - zu lange Formel (2)

Frage von traller zum Thema Microsoft Office ...

Datenbanken
SUM oder AVG in SQL Abfrage dauert viel zu lange warum? (5)

Frage von samet22 zum Thema Datenbanken ...

Virtualisierung
Projekt: Zugriff auf VM über Browser (11)

Frage von oemer.aydin zum Thema Virtualisierung ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...