Storage Empfehlung für Windows Server VM mit Datenbank

Haithabu84

Well-Known Member
Oct 19, 2016
119
4
58
32
Hallo,

ich stehe vor einer Migration von einem dedizierten Windows 10 Pro auf dem eine Firebird DB (mehrere Datenbanken, insgesamt 200Gb, Tendenz steigend) hin zu Windows Server 2016 auf einer VM. Da ich mich mit der Datenbank Firebird selbst nicht sonderlich gut auskenne, habe ich nach einiger Recherche folgendes gefunden:

https://www.ibexpert.net/ibe_de/pmwiki.php?n=Doku.FirebirdPerformanceRecommendations

Der Artikel ist von 2013 wo noch die Firebird Version 2.5 aktuell war. In meinem Fall wird Version 3.0.4 verwendet. Also kann sich in der Zwischenzeit natürlich schon viel getan haben und die Probleme die dort in Zusammenhang mit Virtualisierung beschrieben werden, müssen nicht zwingend zutreffen.

Dennoch hat mich das etwas verunsichert.

Obwohl die Firebird DB nichts weiter als ein SQL DB Server ist, scheint diese sehr Ressourcen-fressend zu sein. Vor allem lebt die Datenbank von hoher IOPS. Ich habe hier MySQL-Variationen mit wesentlich größeren Datenbanken im Einsatz, die nicht mal einen Bruchteil davon benötigen.

Damit die Umstellung nicht im Desaster endet, wollte ich vorher nochmal nachfragen was hier die beste Herangehensweise in Zusammenhang mit Proxmox wäre.

Die Hardware steht schon fest, da diese übernommen wird:

2x Xeon Silver 4208
Supermicro X11DPi-N
64Gb RAM

Dazu ist gedacht:

HBA LSI 9300-8i
2x Intel D3-S4510 240Gb => Proxmox OS
6x Western Digital DC SS530 400Gb => VM-Daten

Ich habe jetzt auf einem anderen Proxmox-Host bereits eine VM angelegt und die Datenbank gestartet. Sie performt flüssig, aber natürlich ist jetzt keine Arbeitslast drauf. Es wird nichts drauf gemacht. Diese VM liegt auf einem Raid1 ZFS. Erste Tests mit diversen Benchmark-Tools bescheinigten einen ordentlichen Durchsatz. Aber beim hauseigenen Tool von der FirebirdDB, zeigte ein eher anderes Bild: Unterer Durchschnitt.

Die VM wurde nach Best-Practice aus dem Proxmox Wiki erstellt:

https://pve.proxmox.com/wiki/Windows_10_guest_best_practices

8 Kerne, 16Gb RAM

pveperf zeigt:

Code:
CPU BOGOMIPS:      153580.48
REGEX/SECOND:      2246612
HD SIZE:           149.81 GB (rpool/ROOT/pve-1)
FSYNCS/SECOND:     4290.53

Auf dem geplanten Proxmox-Host sollten ähnliche Werte zustande kommen. Die Frage ist jetzt:

Wenn die 6 WD SAS SSD zu einem ZFS RAID10 zusammenfasse, ob dies ausreichen wird?

Hat jemand andere Konfigurations-Vorschläge?

Gruß
 
Wenn du Virtualisierungsoverhead vermeiden willst könntest du auch die SSDs, auf denen die DBs laufen sollen, direkt per PCI Passthrough in die VM durchreichen. Dann würden die SSDs direkt physisch von der VM angesprochen werden. Müssten natürlich dann an einem eigenen HBA hängen.

Hast du die Volblocksize von deinem pool angepasst, damit das du deinen Laufwerken und dem Schreibverhalten der DB passt? Wichtig dabei ist z.B. in welchen Blockgrößen die DB versucht ihre Daten zu schreiben. Manche DBs schreiben da in 8kb, 16kb, 32kb oder auch 64kb Blöcken. Und die werden dann ja wieder auf die verschiedenen Laufwerke verteilt wenn ZFS die speichern soll.
Ich weiß auch nicht wie gut da ein stripped mirror aus 6 Laufwerken funktioniert. Wenn du da den Standardwert für die Volblocksize von 8KB belassen hast, dann versucht ZFS ja die 8KB auf 3 Laufwerke aufzuteilen und auf jedes Laufwerk sollen dann 2,66KB. Könnte mir vorstellen, dass das auch wieder Probleme macht, weil sich das nicht so rund teilen lässt wie 8KB volblocksize bei normalem Raid10 wo dann jede SSD einen 4KB block schreibt, was dann wieder gut zur LBA der Laufwerke passt, falls die eine logische Blockgröße von 4K haben.

Am besten einfach mal verschiedene Konfigurationen durchtesten und dann Benchmarks machen.
 
Wenn du Virtualisierungsoverhead vermeiden willst könntest du auch die SSDs, auf denen die DBs laufen sollen, direkt per PCI Passthrough in die VM durchreichen. Dann würden die SSDs direkt physisch von der VM angesprochen werden. Müssten natürlich dann an einem eigenen HBA hängen.

Genau das will ich eben nicht. Dann gehen die ganzen Vorteile durch die Virtualisierung und ZFS als Filesystem verloren. Da kann ich gleich bei Bare-Metal-Installation bleiben.

Aber ganz ehrlich? Ist den Virtualisierungsoverhead überhaupt noch ein Problem? Ich meine mal gelesen zu haben, das der bei KVM nur noch maximal bei 1% liegt.

Also für den besagten Pool ist die ashift=12 gesetzt. Die besagten WD SS530 unterstützen 4K.

Default-Einstellung der Blocksize:

Code:
 zfs get volblocksize rpool/data/vm-300-disk-0
NAME                      PROPERTY      VALUE     SOURCE
rpool/data/vm-300-disk-0  volblocksize  8K        default

Leider kann ich nicht genau sagen mit welcher Block Size die Datenbanken arbeiten. Da ich diese nicht selbst betreue. ABer ich geh jetzt mal vom Best Practice und von dem was Firebird selbst empfiehlt aus: 16k.
 
Last edited:
Naja, ich finde gerade beim Storage kann der Overhead echt happig werden.

Bei mir hier im Heimserver sieht das gerade so aus:

382 IOPS auf dem Pool <-- 185 IOPS von den VMs.
3880 kb/s geschrieben auf den Pool <-- 1338 kb/s geschrieben von den VMs

Das ist dann doch schon ein beachtlicher Overhead den da KVM und ZFS erzeugen.
Wenn man all die ZFS Features haben möchte kann man das gerne in Kauf nehmen, aber nur 1% Overhead ist das echt nicht. Bei Sync writes habe ich auch schon Overhead von 600% gesehen.
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!