De Sysbench OLTP-toepassingsbenchmark draait bovenop een MySQL-database met de InnoDB-opslagengine. De taak van de storage-engine is het beheren van de interface van de database op de schijf naar de toepassingen die gegevens lezen en schrijven van en naar de storage-engine. De storage-engine beheert op zijn beurt IO-threads en logs, en houdt een in-memory cache aan om schijftoegang te minimaliseren. De onderstaande grafiek geeft een simplistisch overzicht van de motor.
De Sysbench OLTP-toepassingsbenchmark draait bovenop een MySQL-database met de InnoDB-opslagengine. De taak van de storage-engine is het beheren van de interface van de database op de schijf naar de toepassingen die gegevens lezen en schrijven van en naar de storage-engine. De storage-engine beheert op zijn beurt IO-threads en logs, en houdt een in-memory cache aan om schijftoegang te minimaliseren. De onderstaande grafiek geeft een simplistisch overzicht van de motor.
Aangezien de InnoDB-engine een cache in het geheugen bewaart, de bufferpool genaamd, worden de prestaties rechtstreeks beïnvloed door de verhouding tussen de grootte van de werkset en de grootte van de bufferpool. Met andere woorden, als de bufferpool groot genoeg is om de werkset te bevatten of als de werkset klein genoeg is om in de bufferpool te passen, zullen de meeste bewerkingen nooit IO-gebonden zijn. Als de database echter te groot is om in het geheugen te passen, zullen de IO-prestaties de responstijden en doorvoer van transacties bepalen. We karakteriseren de prestaties van de schijf in deze situatie waarin de database niet in het geheugen past, wat leidt tot meer IO-verkeer van de InnoDB-opslagengine.
Meerdere threads (het aantal hangt af van de databaseconfiguratie voor krachtige toepassingen en varieert van 32 tot 128) lezen gegevens op een willekeurige manier uit de backing store met een blokgrootte van 16 Kbytes. Deze reads hebben betrekking op databasequery's die gegevens opvragen bij de backing store. Naarmate leesbewerkingen worden verwerkt, worden ze automatisch in de cache opgeslagen in de bufferpool. Naarmate de bufferpool vol raakt, gebruikt InnoDB een LRU-beleid (minst recent gebruikt) om oudere pagina's te verwijderen om ruimte te maken voor nieuwere gegevens.
Database-schrijfbewerkingen worden eerst naar het transactielogboek en naar de bufferpool geleid. Het transactielogboek is een opeenvolgend geschreven ringbuffer die voor elke schrijftransactie wordt bijgewerkt. Afhankelijk van de MySQL-configuratie kan deze update leiden tot een onmiddellijke schrijfbewerking op de schijf, of kan deze tijdelijk in het RAM blijven bestaan als een buffer die uiteindelijk door het bestandssysteem naar de schijf wordt gespoeld. De grootte van deze logboekbuffer varieert, maar ligt meestal rond de 256 MB. Aanbevolen instellingen voor ACID-compliance vereisen dat de log-schrijfbewerkingen de schijf raken bij elke database-commit. Deze schrijfbewerkingen zijn 4K lang.
Het logboek schrijft alleen "fysiologisch" waar de delta tussen de vorige gegevens en de nieuwe gegevens wordt geschreven. Voor de oorspronkelijke gegevens schrijft InnoDB naar de bufferpool in RAM, die ook asynchroon moet worden leeggemaakt. Het proces van het terugschrijven van de gegevens naar het bestandssysteem is configureerbaar en vindt op de achtergrond plaats. De schrijfbewerkingen zijn ook 16K. De schrijfbewerkingen zijn eigenlijk dubbele schrijfbewerkingen waarbij de engine eerst de gegevens naar een tussenliggende locatie schrijft, de dubbele schrijfbuffer. De engine kopieert die gegevens vervolgens naar de uiteindelijke locatie in het bestandssysteem. Dit is nodig om het probleem van de "gescheurde pagina" te voorkomen waarbij een databasepagina van 16 kB gedeeltelijk naar de schijf wordt geschreven als gevolg van een stroomstoring of een andere catastrofale gebeurtenis.
Oorsprong van de Sysbench Benchmark
We hebben de Sysbench testopstelling in ons lab gehaald na diverse gesprekken met Micron over hoe ze real-world MySQL-toepassingsomgevingen simuleren voor SSD-testen en -metingen. Ze ontwikkelden een testmethode rond Sysbench nadat ze ontdekten dat synthetische opslagbenchmarks zelden een volledig beeld gaven van hoe een schijf zich zal gedragen onder een bepaalde applicatiewerklast. Met de Sysbench-test kan Micron een omgeving simuleren die het meest overeenkomt met een standaard MySQL-databaseworkload, die veel voorkomt in applicaties zoals Facebook, Craigslist en Booking.com
We hebben bijzonder nauw samengewerkt met Moussa Ba, die heeft meegewerkt aan de co-auteur van dit artikel. Moussa is een software-engineer in het PCIe-ontwikkelingsteam van Micron, waar hij onder andere werkt aan het optimaliseren van applicatie- en systeemsoftware voor hoogwaardige IO-apparaten.
Sysbench OLTP-benchmark
Sysbench is een systeemprestatiebenchmark met een OnLine Transaction Processing (OLTP)-testprofiel. De OLTP-test is geen benadering van een OLTP-test, maar is eerder een echte database-ondersteunde benchmark die transactionele query's uitvoert naar een exemplaar van MySQL in een CentOS-omgeving.
De eerste stap bij het instellen van de benchmark is het maken van de database zelf, wat wordt gedaan door het aantal tabellen in de database op te geven, evenals het aantal rijen per tabel. In onze test hebben we 100 tabellen gedefinieerd met elk 10 miljoen rijen, wat resulteerde in een database met 1 miljard ingangen. Deze database was 260 GB.
Sysbench heeft twee bedrijfsmodi: standaardmodus die leest en schrijft naar de database en een alleen-lezen modus. De standaard R/W-modus voert de volgende querytypen uit: 5 SELECT-query's, 2 UPDATE-query's, 1 DELETE-query en 1 INSERT. Kijkend naar het aantal IO's, is de waargenomen lees/schrijfverhouding ongeveer 75% gelezen en 25% geschreven.
Sysbench-testomgeving
Opslagoplossingen worden getest met de Sysbench OLTP-benchmark in de StorageReview Enterprise-testlaboratorium gebruik maken van stand-alone servers. We gebruiken momenteel kant-en-klare channel PowerEdge R730's van Dell om zowel realistische prestaties als een solide prijs/prestatieverhouding te tonen, waarbij alleen de opslagadapter of netwerkinterface wordt vervangen om onze R730 op verschillende opslagproducten aan te sluiten. De PowerEdge R730 heeft bewezen uitstekende compatibiliteit te bieden met apparaten van derden, waardoor het een uitstekend platform is voor deze diverse testomgeving. De R730 maakt ook gebruik van Intel's krachtige architectuur van Haswell-klasse, die ons de rekenkracht geeft om een breed scala aan opslagaanbiedingen goed te benutten en hun prestatiepotentieel te maximaliseren.
Eerste generatie Sysbench Benchmark-omgeving
Lenovo Think Server RD630 – SATA/SAS/PCIe-testplatform
- 2594-ABU Topsellermodel
- Dubbele Intel E5-2650 CPU's (2.0 GHz, 8 cores, 20 MB cache)
- 128 GB RAM (8 GB x 16 DDR3, 64 GB per CPU)
- Micron van 100 GB RealSSD P400e SSD (via LSI 9207-8i) Opstartschijf
- 960 GB Micron M500 (via 9207-8i) Vooraf gebouwde databaseopslag
- CentOS 6.3 64-bits
- Percona XtraDB 5.5.30-rel30.1
- Databasetabellen: 100
- Databasegrootte: 10,000,000
- Database-threads: 32
- RAM-buffer: 24 GB
Sysbench Benchmark-omgeving van de tweede generatie
Dell PowerEdge R730 – SATA/SAS/PCIe-testplatform
- Dubbele Intel E5-2690 v3 CPU's (2.6 GHz, 12 cores, 30 MB cache)
- 256 GB RAM (16 GB x 16 DDR4, 128 GB per CPU)
- 100 GB opstart-SSD, 480 GB databaseopslag-SSD
- 2 x Mellanox ConnectX-3 InfiniBand-adapter
- 2 x Emulex 16 GB FC HBA met twee poorten
- 2 x Emulex 10GbE NIC met twee poorten
- CentOS 6.6 64-bits
- Percona XtraDB 5.5.30-rel30.1
- Databasetabellen: 100
- Databasegrootte: 10,000,000
- Database-threads: 32
- RAM-buffer: 24 GB
Dell PowerEdge R730 gevirtualiseerde Sysbench-cluster met 4 knooppunten
- Acht Intel E5-2690 v3 CPU's voor 249 GHz in cluster (twee per node, 2.6 GHz, 12 cores, 30 MB cache)
- 1 TB RAM (256 GB per knooppunt, 16 GB x 16 DDR4, 128 GB per CPU)
- SD-kaart opstarten (Lexar 16GB)
- 4 x Mellanox ConnectX-3 InfiniBand-adapter (vSwitch voor vMotion en VM-netwerk)
- 4 x Emulex 16 GB FC HBA met twee poorten
- 4 x Emulex 10GbE NIC met twee poorten
- VMware ESXi vSphere 6.0 / Enterprise Plus 8-CPU
Het belangrijkste doel van dit platform is om te benadrukken hoe enterprise-opslag presteert in een daadwerkelijke bedrijfsomgeving en workload, in plaats van te vertrouwen op synthetische of pseudo-synthetische workloads. Synthetische werklastgeneratoren laten goed zien hoe goed opslagapparaten presteren met een continu synthetisch I/O-patroon, maar ze houden geen rekening met andere externe variabelen die laten zien hoe apparaten daadwerkelijk werken in productieomgevingen. Synthetische werklastgeneratoren hebben het voordeel dat ze keer op keer een schoon I/O-patroon laten zien, maar ze zullen nooit een echte productieomgeving repliceren. Het introduceren van applicatieprestaties bovenop opslagproducten begint te laten zien hoe goed de opslag samenwerkt met de stuurprogramma's, het lokale besturingssysteem, de applicatie die wordt getest, de netwerkstack, de netwerkswitching en externe servers. Dit zijn variabelen waar een generator van synthetische werklast eenvoudigweg geen rekening mee kan houden, en ze zijn ook een orde van grootte meer resource- en infrastructuurintensief in termen van de apparatuur die nodig is om deze specifieke benchmark uit te voeren.
Algemene prestatieresultaten van Sysbench
Met de Sysbench OLTP benchmark testen we een breed scala aan storageoplossingen die voldoen aan de minimale eisen van de testomgeving. Om in aanmerking te komen voor testen, moet het opslagapparaat een bruikbare capaciteit van meer dan 260 GB hebben en geschikt zijn voor gebruik onder stressvolle ondernemingsomstandigheden. Lokaal aangesloten opslagapparaten zoals SAS, SATA en PCIe SSD's worden getest op een bare-metal server met één Sysbench-instantie. Nieuwere SAN- en Hyper-converged-platforms draaien 4, 8, 12 of 16 VM's tegelijkertijd om te laten zien hoe goed meerdere workloads tegelijkertijd werken op elk. Deze testmethode helpt de prestatievergelijkingen tussen nieuwere hypergeconvergeerde systemen en traditionele SAN-opslagarrays te demystificeren.
Hyper-geconvergeerde / SAN gevirtualiseerde Sysbench-prestatieresultaten (16 VM Aggregate)
Apparaat | 32-draads geaggregeerde TPS | Gemiddelde responstijd (ms) | 99e percentiel latentie (ms) |
---|---|---|---|
X-IO ISE 860 (4) Dell R730, X-IO ISE 860 AFA (2) Volumes van 10 TB |
6625 | 80 | 418 |
Hyper-geconvergeerde / SAN gevirtualiseerde Sysbench-prestatieresultaten (12 VM Aggregate)
Apparaat | 32-draads geaggregeerde TPS | Gemiddelde responstijd (ms) | 99e percentiel latentie (ms) |
---|---|---|---|
X-IO ISE 860 (4) Dell R730, X-IO ISE 860 AFA (2) Volumes van 10 TB |
7160 | 54 | 177 |
Hyper-geconvergeerde / SAN gevirtualiseerde Sysbench-prestatieresultaten (8 VM Aggregate)
Apparaat | 32-draads geaggregeerde TPS | Gemiddelde responstijd (ms) | 99e percentiel latentie (ms) |
---|---|---|---|
X-IO ISE 860 (4) Dell R730, X-IO ISE 860 AFA (2) Volumes van 10 TB |
6568 | 39 | 83 |
VMware VSAN (ESXi 6.0) (4) Dell R730xd, 80 1.2 TB HDD's, 16 800 GB SSD's |
4259 | 60 | 131 |
Hyper-geconvergeerde / SAN gevirtualiseerde Sysbench-prestatieresultaten (4 VM Aggregate)
Apparaat | 32-draads geaggregeerde TPS | Gemiddelde responstijd (ms) | 99e percentiel latentie (ms) | Pieklatentie (ms) |
---|---|---|---|---|
DotHill Ultra48 hybride (4) Dell R730, DotHill Ultra48 hybride (2) RAID14-pools met 1 schijven, 40 HDD's van 1.8 TB, 8 SSD's van 400 GB |
4645 | 28 | 51 | 676 |
X-IO ISE 860 (4) Dell R730, X-IO ISE 860 AFA (2) Volumes van 10 TB |
4424 | 29 | 57 | 983 |
VMware VSAN (ESXi 6.0) (4) Dell R730xd, 80 1.2 TB HDD's, 16 800 GB SSD's |
2830 | 45 | 94 | 480 |
Nutanix NX-8150 (ESXi 6.0) (4) NX-8150, 80 HDD's van 1 TB, 16 SSD's van 800 GB RAID0 x 4 vDisk-databasevolume |
2390 | 54 | 173 | 4784 |
Nutanix NX-8150 (ESXi 6.0) (4) NX-8150, 80 HDD's van 1 TB, 16 SSD's van 800 GB Standaard database-implementatie |
1422 | 90 | 216 | 5508 |
PCIe Application Accelerator / Multi-SSD/HDD RAID Sysbench Prestatieresultaten
Apparaat | 32-draads gemiddelde TPS | Gemiddelde reactietijd | 99e percentiel latentie |
---|---|---|---|
Huawei ES3000 2.4 TB MLC PCIe-SSD x 1 |
2734.69 | 11.7 | 19.84 |
Huawei ES3000 1.2 TB MLC PCIe-SSD x 1 |
2615.12 | 12.23 | 21.80 |
Fusion ioDrive2 Duo 2.4 TB MLC PCIe-SSD x 1 |
2521.06 | 12.69 | 23.92 |
Micron P320h 700 GB SLC PCIe-SSD x 1 |
2443.56 | 13.09 | 22.45 |
Micron P420m 1.4 TB MLC PCIe-SSD x 1 |
2361.29 | 13.55 | 25.84 |
Fusion ioDrive2 1.2 TB MLC PCIe-SSD x 1 |
2354.06 | 13.59 | 29.35 |
Virident FlashMAX II 2.2 TB MLC PCIe-SSD x 1 |
2278.11 | 14.04 | 26.04 |
LSI Nytro WarpDrive 800 GB MLC PCIe-SSD x 1 |
1977.67 | 16.18 | 39.94 |
LSI Nytro WarpDrive 400 GB MLC PCIe-SSD x 1 |
1903.14 | 16.81 | 39.30 |
Individuele SAS / SATA SSD-resultaten
Apparaat | 32-draads gemiddelde TPS | Gemiddelde reactietijd | 99e percentiel latentie |
---|---|---|---|
Toshiba HK3R2 960 GB MLC-SATA x 1 |
1673.23 | 19.12 | 49.65 |
SanDisk Cloud Speed Eco 960 GB cMLC SATA x 1 |
1556.99 | 20.55 | 49.05 |
Intel S3700 800 GB eMLC SATA x 1 |
1488.71 | 21.49 | 40 |
Toshiba PX02SM 400 GB eMLC SAS (6 Gb/s) x 1 |
1487.03 | 21.52 | 62.02 |
Slimme Optimus 400 GB eMLC SAS x 1 |
1477.1 | 21.66 | 52.69 |
OCZ Talos 2C 480GB MLC SAS x 1 |
1438.7 | 22.24 | 47.32 |
OCZ Intrepid 3600 400 GB eMLC SAS x 1 |
1335.3 | 23.96 | 48.42 |
OCZ Talos 2R 400GB eMLC SAS x 1 |
1421.15 | 22.51 | 45.06 |
SanDisk Extreme 480GB MLC-SATA x 1 |
1303.48 | 24.55 | 53.56 |
STEC s842 800 GB eMLC SAS x 1 |
1293.56 | 24.74 | 67.20 |
Intel S3500 512 GB eMLC SATA x 1 |
1,287.65 | 24.85 | 64.15 |
Intel S3500 480 GB eMLC SATA x 1 |
1241.59 | 25.77 | 54.27 |
Seagate600 Pro 400 GB eMLC SATA x 1 |
1198.2 | 26.7 | 62.69 |
Hitachi SSD400S.B 400GB SLC SAS x 1 |
1191.47 | 26.85 | 47.87 |
OCZ-vector 512 GB MLC-SATA x 1 |
1130.03 | 28.32 | 62.67 |
SanDisk Extreme II 480 GB MLC-SATA x 1 |
981.34 | 32.61 | 102.58 |
Hitachi SSD400M eMLC SAS x 1 |
878.9 | 36.41 | 68.03 |
Toshiba eSSD SLC SAS x 1 |
758.41 | 42.19 | 140.59 |
Micron M500 480 GB MLC-SATA x 1 |
668.6 | 47.86 | 461.80 |