Tjena hej!
Låt säga att jag har Sida A och Sida B.
Om jag läser in Sida B i en I-frame på Sida A och 3.000 besökare går in på Sida A samtidigt och läser in Sida B, skiljer det sig prestandamässigt om dessa 3.000 istället skulle gå direkt till Sida B.
Jag förstår att om Sida B rent prestandamässigt skulle kunna ta emot och serva alla dessa samtidiga besök, blir Sida A en flaskhals om den servern är underdimensionerad.
Anledningen till att jag frågar är för att under gårdagen hade vi en kund vars sajt slutade svara/blev otrolig trög när ~600 besökare var inne mer eller mindre samtidigt. Dom läser in Sida B i en I-frame på Sida A.
Det konstiga är att en annan kund som har sin sajt på samma server tog emot ~4.000 besök samtidigt för några månader sedan, utan några som helst problem. Dessa besökare kom direkt in på sidan, utan någon I-frame.
Servern är en VPS på Linode. Var kunden som läser in sajten i en I-frame har för webbhotell vet jag inte, men det är ett "vanligt" webbhotell någonstans.
En sidladdning av sida B kommer i allt väsentligt belasta servern som sida B lika mycket vare sig den laddas in separat eller i en iframe.
Sen om sida A är överlastad och det tar en sekund att ladda sida A, så kan det förstås bli en flaskhals eftersom besökarens webbläsare inte ens vet om att sida B ska laddas förrän den har sida A:s HTML-kod. Att ladda in sidan via en iframe känns allmänt som en sämre lösning eftersom det då finns två sidladdningar som av helt olika anledningar kan vara långsamma, istället för bara en.
Det finns som sagt många olika saker som kan vara långsamma. DNS-uppslag. Överbelastad server. Dumt skrivna SQL-frågor. Onödigt stora bilder som laddas. Jag rekommenderar att du använder t ex YSlow eller nätverksvyn i Chromes utevecklingsverktyg som ger en tidslinje över hur lång tid varje del av inladdningen tar. Detta kan ge en ren aha-upplevelse vad gäller att lista ut varför en sida är långsam.
Yes, tack! Det är jag som konfigurerat servern B själv och jag har inte blykoll på vad som är jättebra eller mindre bra. Dock har det inte varit probelm förut när en annan kund haft 6ggr så hög belastning som det var igår.
Jag tror att det helt eller delvis beror på just deras I-framelösning. Jag själv hade inga som helst problem med laddningstider igår, samtidigt som dom rapporterade att det var tvärkört, hade jag laddningstider på typ 0,0595 sek. och liknande. Därför tror jag att deras delade webbhotell som "hostar" I-framen ställer till det.
Ska testa lite mer. Tack sålänge!
Funderar på en sak angående det här... Det ligger i dagsläget 20 sajter på Server B. Är det för många, då specen är:
1 GB RAM
4 CPU (2x priority)
Det kan alltså vara så att ett par av sajterna har ett par tusen besökare var, mer eller mindre samtidigt.
Skulle det göra skillnad om man köpte till en Linode (t.ex. en med 512 i RAM) och körde som "ren" databasservern, endast för alla databaser.
Skulle man vinna något på det?
Har du testat att kolla hur mycket resurser som används på servern?
Tror kommandona är top och free -m
free -l säger:
total used free shared buffers cached
Mem: 1027516 988952 38564 0 630636 244112
Low: 718260 683132 35128
High: 309256 305820 3436
-/+ buffers/cache: 114204 913312
Swap: 524284 48 524236
Jag testade att starta om den nu, eftersom den varit uppe i 180 dagar i sträck, med en förhoppning att den ska släppa lite mer minne (eller något). Får se om det gör någon skillnad.
Jag har gjort lite fler tester och kollat speciellt på en del sql-frågor och hittat flera saker som inte är så bra. Bl.a. hur jag använt BETWEEN, jag har inte förstått tidigare att om man kör:
SELECT 1 FROM `foo` WHERE `bar` BETWEEN 1 AND 100
..Så sker detta i bakgrunden:
SELECT 1 FROM `foo` WHERE `bar`= 1
SELECT 1 FROM `foo` WHERE `bar`= 2
SELECT 1 FROM `foo` WHERE `bar`= 3
-- ...
SELECT 1 FROM `foo` WHERE `bar`= 99
SELECT 1 FROM `foo` WHERE `bar`= 100
D.v.s antalet frågor blir mångdubbelt i bakgrunden, vilket stjäl mycket minne, speciellt vid många samtidiga besök. Vad jag testat med nu är att istället för BETWEEN, så skapar jag en temporär tabell med 1 fält där jag matar in värden 1 - 100. Sen kör jag en INNER JOIN mot den tabellen istället för BETWEEN.
När jag testat lokalt tog det från början ~25sek vid "tyngre" frågor. Efter ändringen tog samma fråga ~0,055sek vilket jag blev sjukt förvånad över.
Så det blir dels att gå igenom en del kod och ändra enl. sättet ovan.
---
Vad rekommenderar ni som kan det här? Om man har en VPS med 1GB Ram och 40GB HDD. Hur många sajter kan/bör man köra på en sådan? Jag är fortf. inne på att köpa en till VPS och köra den som ren databasserver och sen ha webbservern på den nuvarande.
Jag tror att kombinationen av dom två kommer göra enorm skillnad för hur användarna upplever det.
Förslag?
Hur har du jobbat med index?
I mitt fall (exemplet ovan) så är det inte siffror, utan datum. Datumet som ska "BETWEEN" ska träffa är ett index i "sin" tabell.
Har inte satt mig in ordentligt i ditt fall, men generellt tycker jag att om en databasserver går långsamt, så är det sista man ska göra att uppgradera servern, optimering FTW :)
Fast inte det jag menar... Idag har jag ju ~20 sajter inkl. varsin databas för resp. sajt på 1st server. Det jag undrade över var hur mycket man ev. kan vinna på att köra två separata VPSer, en med webbserver där alla filer ligger, och en databasserver som enbart har MySQL installerat.
Om jag inte minns helt fel var det så Webforum hade på Griffel-tiden...
Det är alltid rekomenderat att ha webb/app server och databasserver på skiljda.
Men du måste veta hur det läggs upp på webhotellet så att burkarna ligger någorlunda nära varandra.
Hur snabbt nätverket är mellan burkarna och om det går att få tillgång till en annan VPS.
Det är kanske inte främst av prestandaskäl man vill göra uppdelningen utan främst av säkerhetsskäl.
Öka upp ramminnet så att sql servern kan ta till sig lite mer är ofta bra.
Och som tidigare sagt oftast läggs alldeles för mycket jobb i databasen istället för i applikationen. Eller bara dåliga frågor.
Ok, tack! Det som är bra med Linode är att man alltid får välja datacenter, så man väljer om man vill ha dom nära varann eller inte.
Vad behöver man ha för RAM på en databasserver då, som ska hålla 25-35 databaser? Jag tänker mig då att man spärrar databas-VPS så att den endast är nåbar lokalt (via LAN) från webbservern, så har man vunnit en hel del också.
Om du har hög last på sql servern så kan du ju dela upp databaserna så dom ligger på olika instanser.
Tja svårt att säga, men SQL Servern äter så mycket den kan, allt beror på din lösning.
Nu har jag köpt en ny Linode med:
1 GB RAM
4 CPU (2x priority)
Funderar på hur jag ska ställa in allt i my.cnf. Nuvarande (standard-)inställningnarna är:
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10
query_cache_limit = 1M
query_cache_size = 16M
Bör man tweaka det något? Isf. var?
Någon som har lite koll på det här? Har hittat en del guider, men det står inte exakt vad man ska ställa in, det står dock vilka värden man ska tänka på, men hittar inte så mkt mer info än så.
Tack!