Aantal queries per pagina belastend voor de server?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Albert de Wit

Albert de Wit

21/08/2012 00:36:59
Quote Anchor link
Hallo,

Ik heb even snel een vraagje. Stel ik heb een site waar je je CV kunt maken. Op die site moet ergens een totaaloverzicht staan van het CV dat je dan hebt samengesteld. Ik moet dan ongeveer 5 queries uitvoeren (personalia,cursussen,opleidingen,werkervaring,etc...).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$query = mysql_query("SELECT * FROM Opleidingen WHERE idGebruiker='".$_SESSION['idGebruiker']."'");


Als er nou 5 of 10 rijen staan, heeft dat merkbaar invloed op de server? Stel je hebt zo'n 100 mensen online die daarmee bezig zijn? Dus:

5 * 5 * 100 = 2500 queries

5 * 10 * 100 = 5000 queries

Heeft dat veel invloed op zo'n server?
 
PHP hulp

PHP hulp

22/12/2024 16:08:40
 
Donny Wie weet

Donny Wie weet

21/08/2012 01:32:56
Quote Anchor link
Als ik het goed hebt maakt dat niet heel veel uit. Ligt ook aan je hostprovider...

Corrigeer me even als ik ernaast zit :)
 
Erwin H

Erwin H

21/08/2012 09:09:00
Quote Anchor link
Uiteraard heeft het invloed. 2 queries zijn meer belastend voor de server dan 1. Of 2 ook al een probleem is voor de server is een ander verhaal. Wanneer het 'te veel' wordt ligt natuurlijk aan veel meer zaken. In elk geval is het altijd een goed idee om te proberen het aantal queries zo laag mogelijk te houden. Aangezien er altijd een punt is waarop de load te hoog wordt voor de server. Hoe minder queries per pagina aanroep, hoe langer het duurt voor je het punt bereikt waarop de server om valt.
 
Write Down

Write Down

21/08/2012 10:46:30
Quote Anchor link
Je berekening klopt toch niet? Wat je doet is dus 5 queries x 5 rijen x aantal bezoekers = queries. Als je over 'eenheden' kan spreken zie je toch dat dit niet juist is.

5 queries x 5 rijen x 100 bezoekers = 500 queries.

Het aantal rijen kan je niet zomaar in je berekening opnemen. Overigens is het zo dat het aantal rijen een kleinere invloed zal hebben dan het aantal queries.

Wat ik echter vermoed is dat je die 5 queries toch kan verminderen. Ik ga er vanuit dat die queries min of meer allemaal hetzelfde gebruiken. Dan zou je JOINS kunnen gaan gebruiken. Een iets grotere query zal wellicht iets meer uitvoeringsduur vragen, maar zal minder tijd vragen dan 5 aparte queries.

Toevoeging op 21/08/2012 10:47:48:

Tot slot nog kleine toevoeging. Aks je een beetje of wat degelijke host hebt, 5000 queries lukt wel nog aardig hoor. Doe is voor 'de fun' een loopje met 5000 queries. Gaat relatief snel als je hosting in orde is :-)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

21/08/2012 11:28:10
Quote Anchor link
Elke querie die je uitvoert bevat een stukje overhead, nl. communicatie tussen client(PHP) en server(database). Dus ja je moet het aantal queries beperken tot het minimum.
 
Kris Peeters

Kris Peeters

21/08/2012 12:02:11
Quote Anchor link
Kijk eens naar de pagina waarop we ons nu bevinden (phphulp). Hoeveen query's zouden er nodig zijn om dit uit te voeren, denk je?

Ik zie: het aantal PM's; Alle actieve leden; laatste tutorials, laatste reacties forum; laatste reacties scripts/tutorials, ... en uiteraard de content van dit topic.

Allemaal aparte query's. En ik heb ze zeker niet allemaal opgenoemd.

Ik bedoel maar ... ik denk dat het meestal wel meevalt. mySQL is ontworpen om dit soort dingen aan te kunnen.
 
Write Down

Write Down

21/08/2012 12:13:13
Quote Anchor link
Klopt, een database kan serieus wat slikken. Heeft Kris 100% gelijk in.

Alleen even kanttekening. Het is niet omdat je 'queries' als het ware kan zien dat ze ook effectief allemaal zijn uitgevoerd. Al vermoed ik in het geval van phphulp dat ze allemaal uitgevoerd worden. Grotere sites gaan vaak echter werken met caching.

Bijvoorbeeld het aantal online leden zou je om de 5min kunnen ophalen en cachen. Wat dus relatief veel queries bespaart als je veel bezoekers hebt. Hetzelfde zou je met nog een aantal queries kunnen doen. Bijvoorbeeld actieve topics. Het is geen ramp als dat 5 minuten zou achterlopen. Hetzelfde met PM's, recente reacties, ... Wat ook altijd kan is cachen totdat je weet dat er een wijziging is. (zou bijvoorbeeld prima kunnen bij laatste scripts)

Maar... in dit geval spreek je echt al over relatief grote websites. (en dat is phphulp naar mijn mening nog niet)
 
Chris PHP

Chris PHP

21/08/2012 12:51:56
Quote Anchor link
Er is ook nog eens een groot verschil tussen een 'thuis' server of een bedrijfs server. Dit kan niet met elkaar vergeleken wordt als het komt op prestaties.

Een thuis server draait alles op 1 machine, of dit nu een pc of server is, is niet relevant. Daar draai je op zijn minst: Apache HTTP Server, MySQL Server en in sommige situaties een Mail server.

Dit betekend dat er uiteraard veel harder gewerkt moet worden door de hardware, aangezien hier overal de zelfde processor, geheugen, data bussen, etc gebruikt wordt.

In een bedrijfs server is dit een heel ander verhaal. Daar heeft Apache HTTP server minimaal 1 fysieke server, MySQL server heeft minimaal 1 fysieke server en de Mail server heeft minimaal 1 fysieke server. Dat betekend dat de load van de hardware al verdeeld is over 3 fysieke servers wat jij thuis op 1 pc of server doet.

Tevens met de virtualisatie technieken van tegenwoordig zoals VMware heb je misschien wel 1 virtuele server van elk, die verspreid zijn over 6 fysieke servers per virtuele server. Dat is letterlijk een fysieke server bijprikken en koppelen in VMware, dit werkt zonder problemen en downtime in een 100% up and running situatie.

Maar de gedachtegang is altijd goed zo, let op je queries waar het minder kan ook zeker doen. Het is niet alleen rekenkracht, maar ook slijtage, stroom, hitte (airco kosten) en onderhoudskosten die gereduceerd worden door efficient om te gaan met PHP, MySQL en andere server side applicaties.

Voor de gemiddelde kleine man schilt dit niet zo veel, maar voor grote bedrijven waarvoor ik ook werk schilt dit al snel honderdduizenden euro's per jaar! Door puur efficient te werken, en optimaal gebruik te maken van de nieuwe technieken en slim programmeren.
 
Erwin H

Erwin H

21/08/2012 12:57:58
Quote Anchor link
Alle antwoorden zijn helemaal waar, maar waat het om blijft gaan is het uiteindelijke totaal aantal queries dat gedraaid wordt. Elke server heeft zijn limiet, zelfs de zwaarste. Elke query telt, zelfs de kleinste. Doe je er 1 of 10 per pagina, dat maakt niets uit als je de zwaarste server hebt en 1 page visit per dag. Heb je een kleine server en 5000 page visits per dag is het al andere koek.

Ergo, probeer het aantal queries te beperken daar waar kan. Het helpt altijd.
 
Chris PHP

Chris PHP

21/08/2012 13:19:55
Quote Anchor link
Erwin H op 21/08/2012 12:57:58:
Alle antwoorden zijn helemaal waar


Whoohooo Alles is goed!! De leeraar heeft gesproken!! ;) haha :D
 
Albert de Wit

Albert de Wit

21/08/2012 13:41:46
Quote Anchor link
Ok, stel je bezoeker heeft 1 personalia (duh) maar 4 opleidingen gedaan.

Personalia:

Naam,
Adres,
Etc...

Opleiding:
Niveau,
Schoolnaam,
Diploma

Kan dat allemaal in 1 query? Zoja, is dat sneller dan in 2 verschillende queries te doen?

Bijvoorbeeld
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

$query
= mysql_query("SELECT Naam, Adres, Etc FROM Personalia WHERE idGebruiker='".$_SESSION['idGebruiker']."' LIMIT 1");
while ($row = mysql_fetch_assoc($query)){
  echo "Naam:".$row['Naam']."<br>
        Adres:"
.$row['Adres']."<br>
        Etc:"
.$row['Etc'];
}


$query = mysql_query("SELECT Niveau, Schoolnaam, Diploma FROM Opleiding WHERE idGebruiker='".$_SESSION['idGebruiker']."'");
while ($row = mysql_fetch_assoc($query)){
  echo "Niveau: ".$row['Niveau']."<br>
        Schoolnaam: "
.$row['Schoolnaam']."<br>
        Diploma: "
.$row['Diploma']."<br><br>";
}


?>


Kunnen de queries hierboven samengevoegd worden tot 1?
 
Chris PHP

Chris PHP

21/08/2012 13:43:36
Quote Anchor link
Dan kun je toch oplossen met JOIN's.
 
John D

John D

21/08/2012 13:48:09
Quote Anchor link
Meten is weten is ook van toepassing in ICT, doe een benchmark test. Belast de server met weinig, meer en veel queries en ga meten. Het is duimzuigerij om te zeggen 1 of 2 of 3 queries per pagina is teveel..... Hoe efficient zijn de queries, zijn er full table scans bij of is alles op index en nog beter op unique index scan. Thuisserver, bedrijfsserver, virtuele servers allemaal leuk verhaal maar zegt niks. Je moet meten (onder andere explainen) en je queries optimaliseren dan ben je pas goed bezig.
 
Albert de Wit

Albert de Wit

21/08/2012 13:52:44
Quote Anchor link
Chris NVT op 21/08/2012 13:43:36:
Dan kun je toch oplossen met JOIN's.


Ik heb 1 rij nodig van personalia maar 4 rijen van opleidingen. en toen? kan dat ook met een JOIN?
 
Chris PHP

Chris PHP

21/08/2012 13:56:10
Quote Anchor link
Je maakt toch een JOIN met peronalia en opleidingen, dan haal je daar toch ook gewoon de zelfde velden op die je nu in 2 losse queries ophaald.

Toevoeging op 21/08/2012 14:01:21:

John D op 21/08/2012 13:48:09:
Thuisserver, bedrijfsserver, virtuele servers allemaal leuk verhaal maar zegt niks.


LOL, kinkt als weinig ervaring in de bedrijfs sector, voornamelijk grote bedrijven!

Jij test door weinig, meer en veel queries te draaien? Serieus ja? Jij wordt zeker op uurtarief ingehuurd?

Voor dit soort tests gebruik je netwerk/poort monitoring software en eventueel zelfs hardware. Dit doe je niet door onnodige queries te maken, maar door bestaande queries aan te passen wanneer je ziet dat er veel netwerk activiteiten zijn op dwe MySQL servers/poorten.

Voor de hobbiesten is er leuke netwerk monitoring software beschikbaar, gratis en/of open source. Voor bedrijven worden er proffesionele software en hardware gebruikt.
 
Albert de Wit

Albert de Wit

21/08/2012 14:02:25
Quote Anchor link
Ik volg het niet helemaal, mijn kennis met SQL is zeer beperkt. Ik probeer de 2 queries van hierboven in 1 te doen.

Met andere woorden

Personalia:

Rij 1: Albert, Adres, Etc..


Opleidingen:

Rij 1: Basisschool, Schoolnaam, Diploma behaald
Rij 2: HAVO, Schoolnaam, Diploma niet behaald
Rij 3: MAVO, Schoolnaam, Diploma behaald
Rij 4: MBO, Schoolnaam, Diploma nog niet behaald


Al die rijen wil ik in 1 query ophalen, kan dat met een JOIN?
 
Chris PHP

Chris PHP

21/08/2012 14:05:03
Quote Anchor link
Albert de Wit op 21/08/2012 14:02:25:
Ik volg het niet helemaal, mijn kennis met SQL is zeer beperkt. Ik probeer de 2 queries van hierboven in 1 te doen.

Met andere woorden

Personalia:

Rij 1: Albert, Adres, Etc..


Opleidingen:

Rij 1: Basisschool, Schoolnaam, Diploma behaald
Rij 2: HAVO, Schoolnaam, Diploma niet behaald
Rij 3: MAVO, Schoolnaam, Diploma behaald
Rij 4: MBO, Schoolnaam, Diploma nog niet behaald


Al die rijen wil ik in 1 query ophalen, kan dat met een JOIN?


Albert je maakt hier toch 2x een while loop? eerst voor je persoons gegevens (ondanks dit maar 1 persoon is zie gebruikers_id). Daar heb je geen while loop voor nodig, dus die kun je al weglaten.

Verdiep je eens in de verschillende JOIN's die er zijn, en hoe ze precies werken. Dit gaat stukken makkelijker dan het voordoen.

Hier een mooie link om te beginnen.
Gewijzigd op 21/08/2012 14:06:19 door Chris PHP
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

21/08/2012 14:11:33
Quote Anchor link
Albert,
Ja dat kan ook met een JOIN, dit houdt echter wel in dat je de personalia 4x krijgt.
Je geeft eigenlijk een verkeerd voorbeeld dit is het verschil tussen 1 of 2 queries.
Over het algemeen zou je kunnen stellen, als je in while lus van een result van een querie een andere querie aanroept, dit sowieso via een JOIN kan, en dan dus te veel queries uitvoert.
 
Write Down

Write Down

21/08/2012 14:16:08
Quote Anchor link
SQL Beginnershandleiding::Selecteren uit meerdere tabellen: JOINS

En John D, alsjeblieft... :|
Gewijzigd op 21/08/2012 14:16:34 door Write Down
 
Albert de Wit

Albert de Wit

21/08/2012 14:37:10
Quote Anchor link
Ger van Steenderen op 21/08/2012 14:11:33:
Albert,
Ja dat kan ook met een JOIN, dit houdt echter wel in dat je de personalia 4x krijgt.


En dat wil ik juist voorkomen.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

21/08/2012 15:09:03
Quote Anchor link
In het resultaat krijg je die 4x, dat wil niet zeggen op je pagina, dat heb je zelf in de hand.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.