Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door Wouter Tinus

Databaseserver en -software vergelijking

Testverantwoording

Om de webdatabase-prestaties van database-software en serverplatformen te testen, heeft Tweakers.net een simulatie ontwikkeld op basis van de eigen Tweakers.net-code en -database. De omgeving van Tweakers.net kenmerkt zich door zijn goed geoptimaliseerde queries, die over het algemeen een 'licht' karakter hebben en binnen enkele milliseconden verwerkt kunnen worden. De queries zijn vaak joins van twee of meerdere tabellen, waarvan de indices en datatypes goed zijn geoptimaliseerd. Veel queries laten zich bovendien goed versnellen door de query cache van MySQL, die resultaten van zoekopdrachten tijdelijk in het geheugen vasthoudt zolang de gegevens in de betrokken tabellen ongewijzigd blijven. Omdat er veel gelijktijdige queries door de Tweakers.net-database worden verwerkt, ontstaat er toch een hoge belasting van de database-server.

De queries in de simulatie zijn gebaseerd op degene die worden gebruikt om de belangrijkste pagina's op Tweakers.net op te bouwen. De pagina's voeren acties uit zoals het opvragen van een nieuwsbericht met de bijbehorende productkoppelingen en reacties, of het opvragen van een prijslijst in de Pricewatch. Om de simulatie zo realistisch mogelijk te maken is de verdeling van deze acties gebaseerd op de werkelijke verhoudingen tussen pageviews van de verschillende onderdelen van Tweakers.net (exclusief het forum). Deze verdeling is als volgt:

Verdeling pageviews
Frontpage 35%
Nieuws 25%
RSS-feeds 14%
Pricewatch 13%
Meuktracker 6%
Productsurvey 2%
Vraag & Aanbod 2%
Reviews 2%
Shopsurvey 1%

De simulatie wordt uitgevoerd in een 2-tier-opstelling met een database-server aan de ene kant en één of meerdere webservers aan de andere kant. Op de webservers draait een load generator die queries op de database afvuurt.

*Werking van de load generator

De load generator is feitelijk een combinatie van "ab" (Apache Bench) en een php-script. Het php-script stelt een lijst van honderd "acties" op (zoals het ophalen van de frontpage, een nieuwspagina, een Pricewatch-prijslijstpagina of een meukpost) volgens de eerder genoemde distributie. Om het min of meer willekeurige klikgedrag van enkele honderden gelijktijdig ingelogde tweakers te kunnen simuleren, wordt de lijst van acties "geshuffeld" voordat de acties daadwerkelijk worden uitgevoerd. De acties bestaan uit het verwerken van de queries zoals deze ook in werkelijkheid worden uitgevoerd bij het parsen van pagina's op Tweakers.net. Het "shuffelen" voorkomt dat er eerst 35 keer de frontpage wordt aangeroepen, vervolgens 25 nieuwspagina's, enzovoorts. De database-server zou dan op veel momenten enkel gelijksoortige queries uitvoeren, wat niet realistisch is.

Apache logoMet behulp van Apache Bench kan de load generator met een bepaalde concurrency, dat wil zeggen een bepaald aantal tegelijk draaiende generators, aangeroepen worden. Zo kan de simulatie in lichtere en zwaardere scenario's getest worden. We hebben ervoor gekozen om de testruns uit te voeren met een concurrency van 1, 2, 3, 4, 5, 7, 10, 13, 15, 20, 25, 30, 35, 40, 45 en 50 gelijktijdige load generators. Normaliter nemen de prestaties (gemeten in queries per seconde) toe tot een bepaalde concurrency waarna de performance ongeveer gelijk blijft of juist weer afneemt. Onze ervaring is dat concurrencies hoger dan 50 nauwelijks verschillen laten zien en bovendien in de praktijk nauwelijks voorkomen.

De virtuele pagina's die door de acties in de load generator worden gesimuleerd, worden aangevraagd door middel van willekeurig berekende ID's binnen een realistisch bereik. Voor nieuwspagina's zijn dit de ID's tussen 0 en ongeveer 40.000 met de nadruk op het nieuws van de afgelopen dag. De random ID-generators zorgen ervoor dat een breed gedeelte van de database wordt aangesproken, zodat de dataset niet eenvoudig gecached kan worden. Voor alle virtuele pageviews worden net als in de werkelijkheid statistieken gelogd. Op willekeurige basis worden er met een bepaalde waarschijnlijkheid inserts in de reactie- en prijstabellen gedaan. Daarbij wordt ook de tabel met gegevens van de users, die veel wordt benaderd voor het ophalen van gebruikers- en sessiegegevens, geupdate. Dit alles zorgt ervoor dat er geen sprake is van een statische database. Wijzigingen in de database hebben invloed op de effectiviteit van de MySQL query cache, want een wijziging in een tabel zorgt ervoor dat alle gecachede resultaten die betrekking hebben op de tabel uit de cache verwijderd moeten worden.

Om de database de tijd te geven om zijn buffers te vullen, worden de testruns vooraf gegaan door een ramp-up run. Daarna volgen de testruns met een oplopende concurrency van 1 tot 50 simultane load generators. Tijdens het draaien van de benchmark worden er statistieken verzameld over het aantal queries per seconde en de processorbelasting van de database-server.

*Testplatformen

De resultaten van de singlecore Xeon-processors werden verkregen op een Melrow QX312S-systeem met een Intel SE7520BD2-moederbord voorzien van 4GB DDR2-400-geheugen. Dit moederbord is gebaseerd op de Intel E7520-chipset en biedt helaas geen ondersteuning voor dualcore Xeon-processors. De dualcore Xeon werd daarom getest in een Dell PowerEdge 1850 met 4GB DDR2-geheugen. De Opteron-processors werden getest op een Iwill DK8ES nForce Pro 2200-moederbord met 4GB DDR400-geheugen.

Het singlecore Xeon-systeem was uitgerust met een Areca ARC-1130 SATA RAID-adapter met 256MB cache. Omdat deze full-height PCI-X-adapter niet ondergebracht kon worden in de low-profile slots van de Dell PowerEdge 1850 moest er voor dit systeem noodgedwongen uitgeweken worden naar een low-profile Areca ARC-1120 met 128MB cache. Vanwege de kleinere hoeveelheid cache presteert deze kaart in sommige situaties net iets minder dan de Areca ARC-1130. Het is niet aannemelijk dat dit heeft geresulteerd in significante verschillen in de prestaties van de database-server. De I/O belasting in de databasebenchmarks was namelijk gering met een gemiddelde CPU iowait van minder dan een procent en een lees transfer rate van zo'n 600KB/s. De Opteron-processors werden eveneens getest met de Areca ARC-1120.

De Areca-adapters waren aangesloten op acht Western Digital Raptor WD740GD-harde schijven. Daarvan waren twee stuks geconfigureerd in RAID 1 als bootarray en vijf stuks in RAID 5 als data-array. Het achtste exemplaar diende als hotspare. Als client werd een Linux-systeem met een Pentium 4 2,8GHz en 1GB RAM ingezet. Voor de multi-clienttests werd er een Windows-systeem met een P4 3,2GHz en 2,5GB geheugen als tweede client gebruikt.

Database testopstelling
Dell PowerEdge 1850 met acht Raptor-harde schijven

* Softwareconfiguratie

MySQL
Versies4.1.14 en 5.0.18
key_buffer1024M
table_cache512
sort_buffer_size2M
read_buffer_size2M
myisam_sort_buffer_size64M
thread_cache8
query_cache_size32M
max_connections1000
innodb_buffer_pool_size1200M
innodb_additional_mem_pool_size128M
innodb_file_io_threads8
innodb_lock_wait_timeout50
innodb_log_files_in_group3
innodb_log_file_size800M
innodb_log_buffer_size35M

OnePlus 7 Microsoft Xbox One S All-Digital Edition LG W7 Google Pixel 3 XL OnePlus 6T (6GB ram) FIFA 19 Samsung Galaxy S10 Sony PlayStation 5

Tweakers vormt samen met Tweakers Elect, Hardware.Info, Autotrack, Nationale Vacaturebank, Intermediair en Independer de Persgroep Online Services B.V.
Alle rechten voorbehouden © 1998 - 2019 Hosting door True