Was sind die Nachteile beim Ausführen einer Datenbank in einer virtuellen Maschine? Wie überwinde ich sie? [geschlossen]

66

Das Ausführen von Elementen in einer virtuellen Maschine hat gewisse Leistungseinbußen zur Folge. Inwieweit wirkt sich dies jedoch wirklich auf die Leistung eines Datenbanksystems aus?

Ich fand dieses akademische Nachschlagewerk mit einigen interessanten Benchmarks, aber es war nur ein eingeschränkter Test mit Xen und PostgreSQL. Die Schlussfolgerung war, dass die Verwendung einer VM "keine hohen Kosten für die Leistung mit sich bringt" (obwohl Sie vielleicht glauben, dass die tatsächlichen Daten etwas anderes aussagen).

Welche technischen, administrativen und sonstigen Nachteile ergeben sich beim Ausführen einer Datenbank in einer virtuellen Maschine?

Bitte poste Antworten, die durch objektive Fakten gestützt werden können. Ich bin nicht an Spekulationen oder anderen semireligiösen Argumenten interessiert.

Davon abgesehen

  • Welche Probleme treten auf, wenn eine Datenbank in einer virtuellen Maschine ausgeführt wird? (bitte Referenzen posten)
  • Sind diese Probleme von Bedeutung?
    • Sind sie nur in bestimmten Szenarien von Bedeutung?
  • Was sind die Problemumgehungen?
Russ
quelle
+1 Ich bin hauptsächlich daran interessiert, Feedback zu SQL Server- und Windows 2008 R2-Szenarien zu erhalten
goodguys_activate
4
@ Shane Madden - Kannst du bitte die Schließung ein wenig erklären? Ich gehe davon aus, dass die Motivation auf einer unspezifischen Antwort beruhte (die dann in den Kommentaren entgleist) und nicht auf der Frage selbst. In Bezug auf die Frage implizieren 44 Stimmen und 12 Favoriten innerhalb von ungefähr einem Tag nach dem Bestehen der Schließung für mich, dass es sich um eine gute Frage mit nützlichen Antworten / Informationen handelte (insbesondere im Vergleich zu dem, was für ServerFault-Fragenverkehr typisch zu sein scheint). Darauf zielen die verschiedenen SE-Standorte ab. Hätten Sie eine spezifischere Fragestellung gegenüber dem losen "Wie schlimm ist es?" Vorgezogen?
Russ
1
@ErikA, Shane, Womble, mikeyb, Ben - Ich habe eine Community-Bearbeitung vorgenommen, die diese Frage möglicherweise konstruktiver macht. Erwägen Sie, diese erneut zu öffnen oder eine ähnliche Frage in einer neuen / bereinigten Frage zu veröffentlichen.
goodguys_activate

Antworten:

41

Obwohl viele DB-Anbieter dies nur sehr langsam erledigten, unterstützen mittlerweile fast alle ihre Software offiziell in einer virtualisierten Umgebung.

Wir betreiben viele Oracle 11g-Instanzen unter Linux auf ESXi, und es ist sicherlich möglich, eine sehr gute Leistung zu erzielen. Wie bei all Hardware - Skalierung, Sie müssen nur sicherstellen , dass die Virtualisierung Host viele Ressourcen (RAM, CPU) hat, und dass Ihre Plattenschicht bis zu der Aufgabe der Bereitstellung von was auch immer IO Leistung , die Sie benötigen.

EEAA
quelle
7
+1 Wie bereits erwähnt, ist es wichtig, dass die Ressourcen der Aufgabe gewachsen sind. Die Festplatte war der große Engpass für uns und eine sorgfältige Planung ist erforderlich.
Dave M
2
+1 Sie müssen Ihre Hausaufgaben zur Datenbanknutzung im Voraus machen . Wenn Ihre physische Box mehr als 40% ausnutzt, lösen sich Ihre Vorteile auf. Davon abgesehen haben wir Tonnen von kleinen, anwendungsspezifischen, isolierten SQLs, die problemlos auf VMs ausgeführt werden können. Unsere großen, stark ausgelasteten Maschinen verfügen jedoch aufgrund des Mangels an Vorteilen über spezielle Hardware.
Nate
5
Auf jeden Fall ist Disk IO der Hauptschuldige, und was virtualisierte Umgebungen angeht, sind sie eher unzuverlässig.
Lynxman
1
@lynxman - Einverstanden. Wir führen alle unsere Oracle-Instanzen auf unseren Tier 1-SAN-Festplatten aus, bei denen es sich um 15-k-SAS handelt. Von dem, was ich sagen kann, bekommen wir sehr zu nahezu nativer Performance schließen.
EEAA
10
"Eine Unze Test ist ein Pfund Vermutung wert."
Chris B. Behrens
21

Wie ErikA sagt, wird dies immer häufiger. Ich bin im SQL Server-Camp und habe keine Produktionssysteme, auf denen VMs ausgeführt werden, aber ich würde nicht zögern (nach einer weiteren Untersuchung des Themas). Es gibt jedoch auf jeden Fall einige Punkte zu beachten, bevor Sie diesen Weg einschlagen (zumindest für SQL Server). Festplatten-E / A (wie bereits erwähnt) und Speicherzuweisung sind nur zwei Beispiele. Die Dinge werden auch zwischen verschiedenen Hypervisoren unterschiedlich sein.

Brent Ozar ist ein anerkannter Experte für die Virtualisierung von SQL Server, insbesondere in VMWare. Ich kann nur empfehlen, sein Material durchzulesen.

http://www.brentozar.com/community/virtualization-best-practices/

Squillman
quelle
11

Es gibt Dose und dann sollte es . Eine Korvette kann 150 Meilen pro Stunde gehen, aber sollten Sie auf öffentlichen Autobahnen? Sie können sich unnötig verletzen.

Datenbanken sind Gastbetriebssysteme. Wenn sie anfangen, greifen sie gezielt nach Blöcken einer Ressource und verwalten sie aus Leistungsgründen direkt. Sobald Sie das Kernbetriebssystem des Datenbankservers zu einem Gast in einer virtualisierten Hosting-Umgebung machen, platzieren Sie eine Arbitrierungsschicht mit dem Hypervisor zwischen dem blockzugeordneten Element von Festplatte und RAM und dem Datenbankserver. Es wird langsamer. Je ineffizienter Ihre Abfragen sind, desto langsamer wird es. Diese Ineffizienzen können heute möglicherweise auf dedizierter Hardware ausgeblendet werden. Sobald Sie jedoch eine Schlichtung für Ihre abhängige Ressource einführen, werden Sie schnell feststellen, ob dies der Fall ist.

Viele Bean-Counter, die Virtualisierung benötigen, erkennen nicht, dass Datenbankserver als Gastbetriebssysteme eine eigene Konsolidierungsebene bieten. Es gibt keinen Grund, warum Sie nicht mehrere logische Datenbankinstanzen auf einem physischen Server konsolidieren können, selbst wenn Sie IP-Adressen verschieben, zusätzliche Hostnamen einrichten usw., um diese natürliche Zusammenführung von Diensten zu ermöglichen. Und mit diesem Modell behalten Sie nicht nur die Kosteneinsparungen bei, die das Management für eine verringerte Anzahl physischer Hosts erzwingt, sondern Sie behalten auch den Blockzugriff auf physische Ressourcen bei, ohne dass der willkürliche Hypervisor hiervon betroffen ist, der manchmal nützliche Entscheidungen treffen kann und nicht Andere.

Gleiches gilt für andere Gastbetriebssysteme wie Java. Virtualisierungslösungen sind normalerweise geschäftige Umgebungen und der Hypervisor muss viele Entscheidungen darüber treffen, wer das Token für eine Ressource erhält. Wann immer Sie diese Schicht beseitigen können, werden Sie besser dran sein.

Verbinden Sie mehrere Instanzen zuerst mithilfe der natürlichen Gastbetriebssystemschicht. Wahrscheinlich können Sie Ihre Plattformkonsolidierungs- und Leistungsziele leichter erreichen.

James Pulley
quelle
4
Interessante Definition von "Gastbetriebssystem". Wie oft haben Ihre Datenbanken tatsächlich einen Engpass bei der CPU, obwohl Sie sich auf die reine, unverfälschte Leistung konzentrieren? E / A-Vorgänge sind viel wahrscheinlicher, und für Anwendungen mit höherer Leistung teilen Sie sich bereits die E / A-Zeit in einem SAN. Ich hoffe, Sie würden Ihre Virtualisierungsphilosophie überdenken, wenn ein Sicherheitsproblem mit einer Anwendung alle Kennwort-Hashes Ihrer konsolidierten Datenbanken gefährdet oder wenn ein in Ihrer JVM ausgeführter Prozess jedes Byte des verfügbaren Heapspeichers belegt.
Shane Madden
5
Um es klar auszudrücken, stimme ich voll und ganz zu, dass ein fein abgestimmter, stark ausgelasteter Hochleistungs-Datenbankserver seine eigene physische Hardware haben sollte. Dies ist jedoch nicht die Norm, und die anderen Vorteile der Virtualisierung überwiegen in der Regel die Leistungseinbußen, die bei den meisten Workloads nicht zu unterscheiden sind.
Shane Madden
3
Ich bin nicht einverstanden damit, dass Sie immer zuerst zu den vorhandenen Konsolidierungsschichten gehen. Manchmal macht das Sinn. Schauen Sie sich zum Beispiel den Kompromiss zwischen der Konsolidierung mehrerer Datenbanken auf einem einzigen Betriebssystem und der Konsolidierung mehrerer Datenbank- / Betriebssystemkombinationen auf einem Hypervisor an. Der erste ist effizienter. Die zweite ist viel einfacher auszugleichen. Die Migration eines Betriebssystems / einer Datenbank auf einen neuen Host ist weitaus weniger störend als die Migration einer Datenbank auf ein neues Betriebssystem.
Jake Oshins
Meine Kommentare stammen aus direkten Vor-Ort-Beobachtungen erfolgreicher und fehlgeschlagener Migrationen zu Virtualisierungslösungen während des letzten Jahrzehnts als Performance Engineer. Es gibt Unmengen von schlechten Datenbank-Apps, bei denen die Verwendung von Hardware Leistungsprobleme überdeckt. Fügen Sie Virtualisierung hinzu, und diese Probleme treten zutage. Wenn Sie eine App haben, die eine genaue Uhr für Timing- oder Audit-Zwecke benötigt, dann sind Sie mit der schwebenden Uhr in der Software-Virtualisierung auf der Flucht.
James Pulley
1
Wow, nur wow James. Ich habe weder die Zeit noch die Geduld, alle Punkte, die Sie in Ihrer Antwort und den nachfolgenden Kommentaren gemacht haben, zu verwerfen, aber ich hatte nur das Gefühl, dass ich hier einen Kommentar für jeden abgeben muss, der auf diese Antwort reagieren könnte. James 'Ansichten sind seine eigenen und spiegeln nicht wider, was wirklich möglich ist. Wenn Sie überzeichnet sind, werden Sie natürlich eine schlechte Leistung haben. Also nicht überzeichnen. Es ist durchaus möglich, eine sehr leistungsfähige Virtualisierungsumgebung zu haben. Es ist töricht, eine pauschale Empfehlung dagegen abzugeben, weil es "schlecht abschneidet".
EEAA
6

Hier sind zwei Dinge zu realisieren:

  • Die Leistungseinheit der Datenbank pro Hardwareeinheit ist bei einer virtualisierten Datenbank etwas niedriger. Das bedeutet, dass Sie etwas mehr Hardware kaufen müssen, um die gleiche Leistung zu erzielen.
  • Das bedeutet nicht, dass das gleiche oder ein gewünschtes Leistungsniveau nicht erreichbar ist. Die Gewinne , die Sie von einem verbesserten Management erhalten und anderen Vorteilen (wie leichter HA) häufig Art und Weise mehr als die geringfügig erhöhte Hardwarekosten ausgeglichen.

Das heißt, wo ich arbeite, ist unsere SQL Server-Installation einer von nur zwei Servern, die ich nicht in naher Zukunft virtualisieren möchte (der andere ist der primäre Domänencontroller).

Joel Coel
quelle
4

Das Ausführen von SQL Server als VM ist in Ordnung, vorausgesetzt, Sie können der VM genügend Ressourcen bereitstellen, um Ihre Anwendung auszuführen. Wenn Sie in der physischen Welt 24 Kerne und 256 GB RAM benötigen, müssen Sie in der virtuellen Welt 24 vCPUs und 256 GB RAM bereitstellen.

Ich habe gerade in den letzten Monaten einen Artikel im SQL Server-Magazin geschrieben, in dem es darum geht, SQL Server unter VMware vSphere auszuführen.

mrdenny
quelle
2

Ich verwende zwei Datenbanken, eine PostgreSQL- und eine MySQL-Datenbank, in einer virtuellen Umgebung (Xen), in der die dom0s hoch verfügbar sind. domU-Dateisysteme befinden sich alle auf einer iSCSI-SAN-LUN, die aus logischen LVM2-Volumes besteht. Die MySQL-Datenbank ist ausschließlich für Cacti bestimmt und wird daher kaum genutzt. Sie befindet sich auch auf der iSCSI-LUN.

Die PostgreSQL-Datenbank ist die Datenbank für unsere Staging-Umgebung und wird daher stärker ausgelastet als die MySQL-Datenbank. Aus diesem Grund befindet sich die Datenbank in einem lokalen RAID10-Satz und DRBD wird auf den zweiten Clusterknoten repliziert. In Bezug auf die tatsächliche Auslastung sieht diese Staging-Datenbank jedoch überhaupt keine sehr hohe Auslastung. Das macht es meiner Meinung nach zu einem guten / großartigen Kandidaten für die Virtualisierung.

Einige der Vorteile für unser Unternehmen waren der geringere Stromverbrauch, der eingesparten Rack-Platz und der geringere administrative Hardware-Aufwand.

Unsere Hauptproduktionsdatenbank hingegen kann ich mir nicht vorstellen, virtuell zu werden ...

Kendall
quelle
2

Ich arbeite mit MSSQL- und MySQL-Servern auf zahlreichen Servern. Vor ein paar Jahren zögerte ich, mit dem Einrichten von SQL-Servern auf VMs zu beginnen, da ich von den Leistungsproblemen beim Ausführen eines SQL-Servers auf einer VM erfahren hatte. Ich war jedoch überrascht, als ich meine ersten SQL-Server einrichtete und keine Änderung der Leistung feststellte. Immer mehr der Server, auf denen ich arbeite, befinden sich auf VM und fast alle größeren Enterprise-Clients, für die ich arbeite, haben SQL-Server virtualisiert.

Ja, die VM verursacht zusätzliche Kosten. Wenn Sie mehrere VMs auf einer einzigen Box hosten möchten, benötigen Sie einen leistungsstarken Server. Ein häufiges Problem bei Ressourcen ist das Hinzufügen zusätzlicher VMs und das Ausdünnen der verfügbaren Ressourcen. Es ist gängige Praxis, ein gewisses Wachstum zu planen. Wenn Sie Ihren Server jedoch für das Hosten von 2 oder 3 VMs gekauft haben und jetzt 10 VMs ausführen, wird die Leistung wahrscheinlich beeinträchtigt.

Ich würde lügen, wenn ich sagen würde, dass ich noch nie Leistungsprobleme beim Ausführen eines SQL-Servers auf einer VM gesehen habe. Ich habe jedoch erfahren, dass bei einer schlechten Leistung möglicherweise etwas mit der Umgebung nicht stimmt.

Chris
quelle