23. august 2007 - 18:22Der er
5 kommentarer og 1 løsning
Count af mysql_queries
Hej,
Jeg har en hjemmeside med omkring faste 200 brugere. Den kører fint, bortset fra at databasen går ned i ny og næ. I starten beskyldte jeg min udbyder for dårlig service, men jeg fandt ud af, at mine database connection er urimeligt høje. Især når jeg bruger joins.
Jeg har optimeret og optimeret med explain, og nu skulle samtlige queries have en key og en "rækkesøgning" på under 50.
Men den er stadig gal :(
Jeg har en index-fil, hvori jeg inkluderer alle undersider.
Er det muligt at lave en slags count, så for hver side der bliver loadet, bliver der talt hvor mange queries der blive kørt. Måske har jeg en while-fejl eller noget andet et eller andet sted...
Anyways. Bare kom med en masse foreslag. Det jeg primært søger, er altså en måde, hvorpå jeg kan undersøge, hvilke sider der er mest belastende for siden, og på den måde komme problemet til livs. Det skal siges at min udbyder opbevarer data på clustrer på en sådan måde, at der ikke findes log-filer for den enkelte bruger. Ret surt.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Hvis du har skrevet en overskuelig og dokumenteret kode, kan du jo se dér, hvad der til enhver tid måtte ske :) Det lyder ikke godt, at du skulle have problemer med en MySQL-DB ved kun 200 faste brugere - og slet ikke at det skulle skyldes et ekstra højt antal forbindelser
Enig med Ole - du er den nærmeste til at løse problemet. Og det du kan, er at kigge på forespørgsler i databasen, der er ens på mange sider over lang tid. Den slags kan (og bør) man cache, så det ikke koster hver gang. Nogle laver sql-kald for dynamisk at lave CSS-kode, der kun ændrer sig en gang om måneden, når der lige ændres en farve eller et billde.
Kig også på "komplicerede" forespørgsler, der hentes mange gange, men reelt kun opdateres få gange - det kan være: vis nyeste indlæg i alle forum. Man kan sikkert skrue en SQL sammen til at finde de nyeste indlæg, men man kunne også bare have en tabel, der har en indgang for hvert forum, og hver gang der kommer et nyt indlæg, opdateres tabellen for det forum. Aflæsningen er blevet billigere.
Jeg har barberet SQL-aætninger væk i et projekt ved at logge hver eneste SQL-sætning i en tabel (undtagen dem der laver logningen), og så studere dem efterfølgende.
Det kunne være dejligt hvis I ville skrive en artikel om netop dette emne.
Erik -> "Man kan sikkert skrue en SQL sammen til at finde de nyeste indlæg, men man kunne også bare have en tabel, der har en indgang for hvert forum, og hver gang der kommer et nyt indlæg, opdateres tabellen for det forum."
Vil du ikke uddybe det lidt nærmere? Jeg kan læse at det er skide smart, men forstår det ikke hvordan det skal gøres :)
Ved godt det ikke er mit spm, håber ikke det generer nogen...
Tak for hjælpen Erik og Ole. Synes dog ikke rigtig I svarer på mit spørgsmål. Og det er lidt tendensen når man stiller et spørgsmål som dette. Jeg er godt klar over, at min hjemmeside ikke indeholder perfekt kode - langt fra. Jeg har været igennem hele optimeringsprocessen og jeg kommer ikke videre. Jeg er klar over, at jeg er den der er problemet nærmest, og derfor burde have lettest ved at løse det, men jeg er ikke i stand til det. Derfor ønsker jeg at vide om man kan lave en query-count, så jeg kan få et overblik over, hvor det værste ligger, så jeg enten kan få ordnet det, eller lukket de afdelinger af sitet.
Hvis du kører det derhjemme, kan du se hvad tal mysql samler sammen til dig i sin statistik. Specielt hvis du ved hvor du skal kigge.
htx98i17: det er der nok andre der har gjort - læs om database normalisering, og ikke mindst hemmelighed: de-normalisering. Sådan på godt jysk handler normalisering om at undgå redundans - så det starter man med. Redundans er li'som bigami: mere end en. Altså når de samme data står to steder.
Når vi så har fået data ned og de kun står eet sted, så kigger vi efter flaskehalse, og regner på om det kan betale sig at putte nogle data 2 steder: prisen er en dyrere opdatering, gevinsten er en billigere læsning. Det hedder de-normalisering.
Ok - det var så Pixie-udgaven. Gå på et godt database kursus en aften om ugen i 2 år. Så hjælper det.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.