ACM schreef op woensdag 14 juni 2006 @ 08:22:
[...]
Is er na die 5 mins een pauze of gaat het continu door?
Als er een pauze zou zijn kan je nog die gegevens eerst in losse tabellen opslaan en daarna samenvoegen.
Wat voor updates zijn dat? Toch geen updates op het net geinserte record he, want dan had je net zo goed gelijk het goede record kunnen inserten? Verpak je verder die insert+updates in een transactie of laat je innodb de transactieoverhead voor elke query los uitvoeren?
Gebeuren die updates een where op die ene index die je hebt? En misschien kan je je updates combineren zodat er minder algemene overhead is?
Het zou in feite nog langer kunnen doorgaan. Ik merk dat ik toch een duidelijkere beschrijving moet geven van het platform. Bij deze:
Het gaat hier om het afhandelen van een grote hoeveelheid telefoon gesprekken.
8 machines nemen gesprekken aan en moeten uit dezelfde DB gegevens ophalen. Per machine zijn er 50 threads naar de mysql machine. In totaal dus 400. Deze threads blijven openstaan, en worden dus niet continue opnieuw opgebouwd.
Goed wat gebeurd er allemaal:
Iemand belt, wij nemen op en schrijven record in DB met daarin oa starttijd en welk nummer er gebelt wordt. DB maakt nieuw record aan. We halen last insert id op. Nu voeren we een 2 updates uit op een zeer kleine tabel (max 2k records). Beller hangt op, we updaten het eerder geschreven record en schrijven eindtijd erbij.
En wat voor records zijn het? Getalletjes? Lange stukken tekst?
Dat zijn datetime, ints, en een enkel varchar veldje.
Ik vind dat eerlijk gezegd vrij krap. Als je zoveel i/o wilt kunnen verwerken moet je er ook wel voor zorgen dat je bijpassende hardware hebt. Vergeet niet dat je met die 1200rec/s je niet netjes sequentieel aan het schrijven bent, maar grotendeels random en je dus erg veel disk-head-movements zal hebben. Een goede raid-controller (areca bijv) met een paar snelle disks (WD raptor's of scsi/sas) gaat je al een stuk meer schrijfprestaties opleveren.
Mee eens. De opzet was in eerste instantie ook voor max 4 clients, maarja, things happen. Er staat overigens wel een upgrade geplanned, maar toch willen we proberen te kijken naar mogelijke oplossingen voor de huidige situatie. Het zit hem namelijk niet in de complexiteit van de queries. Alleen de hoeveelheid.
En doet die ene client dan 1200 rec/s of doet ie er dan 1200/8 rec/s ? Dat MyISAM het met 8 clients trekt vind ik trouwens knap, want die kan helemaal niet met concurrent writers overweg, die moeten allemaal op hun beurt wachten.
Die ene client doet dan 1200/8. De situatie is moeilijk na te bootsen. Ik heb niet zomaar 8 extra machines beschikbaar om een 1 op 1 test uit te voeren. Het is zeker mogelijk om een applicatie te schrijven die de situatie nabootst, maar de vraag is dan in hoeverre je je echt vergelijkbare resultaten gaat halen tov je live platform.
Heb je verder voor innodb nog tuning gedaan? Met name de grootte van de logfile van innodb (ander soort log) is waarsch wel vrij belangrijk.
InnoDB heeft geen tuning gehad. (tijdsgebrek) Ik ben op dit moment een kopie van de DB aan het maken zodat we de InnoDB even flink kunnen stresstesten. Vandaar ook dit topic. Welke trucjes kan je uithalen bij InnoDB. Ik ben zelf niet zo heel erg bekend met deze storage engine omdat MyISAM altijd voor mij afdoende is geweest. In dit geval probeer ik wat collega's te helpen en als je naar de voordelen van InnoDB kijkt, dan lijkt het idd de ideale oplossing voor onze situatie. (Oa row level locking tov table locking).
Query- en transactieoverhead verlagen, o.a. door meer queries in een enkele transactie te verpakken en eventueel lichtere queryvarianten te nemen (batch-insert/updates bijv), aantal queries verlagen.
En verder heb je grote kans dat je snellere hardware nodig hebt ja.
Meer queries in een enkele transactie zal niet gaan denk ik. Om het even te illustreren. Per client worden er 330 calls aangenomen. Die 330 calls hebben een threadpool van 50 op de MySQL machine. 8 x 50 = 400 threadconnects op MySQL. Die threadpool wordt continue gevoed door de clients. Ik zal straks is wat meetingen doen vwb de traffic van en naar de machine.
Dus de clients zijn sneller dan je server, dat is wel een interessante constructie


I know. Nou doen de clients vrij veel werk. Oa Voice recognition, text-2-speech, voip, soundrecording, dus zo gek is het niet. Ben het wel met je eens dat de MySQL machine een upgrade moet hebben. Zeker omdat er over een paar dagen 7 clients bij gaan komen!
Waarom niet? De kans is best groot dat je met een WD raptor al 3x de performance haalt, meer geheugen erin je nog wat oplevert en verder wat tuning aan de queries en procedures de rest oplevert.
Als het dan nog niet genoeg is kan je kijken naar een goede raid-controller met write-caching aan zodat ie de commando's netjes kan op de goede volgorde kan zetten en de losse disks dus meer sequentieel aan de slag kunnen en je dus veel meer schrijfprestaties haalt.
Daar ben ik het wederom (het wordt saai) helemaal mee eens. Maar $$ is ook een factor. Die clients zijn per stuk al ruim 12k het stuk, en ergens ligt de grens. Die grens moet natuurlijk wel goed getrokken worden, maar als het even kan willen we toch proberen de maximale performance uit de beschikbare hardware te halen. (En deze kop ik zelf maar even in, Ja is de hardware niet snel genoeg is zal je toch echt een andere machine neer moeten zetten).
Nogmaals, thanks voor alle input.