SQL 2012 in Hyper-V. Warum sind meine Abfragen so lange, bis ich einen räumlichen Index verwende?

2524
Damien

Ich habe eine räumliche Anwendung, die jedes Mal, wenn der Benutzer die Karte schwenkt oder zoomt, mehrere Tabellen (Layer) abfragt. Als ich den SQL-Server in Hyper-V verlegte, fiel mir beim Abfragen einer der Tabellen eine Verzögerung von einigen Sekunden auf. Ich habe diese Tabelle von den Abfragen deaktiviert und dann wurde eine andere Tabelle langsam usw.

Seltsamerweise wird durch das Ablegen und Erstellen eines beliebigen räumlichen Indexes einer beliebigen Tabelle in der DB (selbst eine, die ich nicht abfrage) die Leistung magisch blitzschnell, bis ich einen Neustart durchführe oder eine neue Verbindung herstelle.

Ich habe versucht, eine Pass-Through-Platte zu verwenden, aber es machte keinen Unterschied. Dieser "Fehler" tritt nicht auf derselben Hardware auf, wenn der native SQL-Server (nicht virtuell) ausgeführt wird. Ich habe auch Hyper-V auf einem anderen Desktop-PC ausprobiert und auch SQL 2014 Express ausprobiert, hatte aber das gleiche Problem.

Gibt es andere Einstellungen für Hyper-V / SQL, die ich ausprobieren kann? Gibt es eine Erklärung, warum das Löschen und Erstellen eines Index das Problem vorübergehend behebt?

0

1 Antwort auf die Frage

1
Brad

Leider scheint dies in einigen Szenarien die Kosten für die Virtualisierung zu sein. Wenn Sie mit dynamischem Speicher arbeiten, der einen Speicherballontreiber verwendet, versuchen Sie, die VM so zu konfigurieren, dass sie über eine bestimmte Menge RAM verfügt. Beobachten Sie die Speicherauslastung von Host und Gast. Wenn Sie feststellen, dass immer mehr Speicher belegt wird, deaktivieren Sie die Sperrseiten im Speicher. Sie können versuchen, alle Gäste auszuschalten und den Host neu zu starten. Starten Sie einfach den einzelnen Gast, der SQL ausführt. Wenn die Abfragen ordnungsgemäß ausgeführt werden, nehmen die anderen Gastcomputer dieser VM die benötigten Ressourcen. Dies kann passieren, wenn ein Server nicht die richtige Größe hat und häufig vorkommt. Um dies zu umgehen, können Sie ein zusätzliches Array von Festplatten hinzufügen und es nur dieser VM zuweisen. Eine andere Möglichkeit, das System zu betrügen, ist die Verwendung der SSD-Zwischenspeicherung für die Datenbank. Ein paar andere Dinge sollten Sie berücksichtigen, wenn Sie den SQL-Dienst herunterfahren und ein Tool wie UltraDefrag verwenden und eine vollständige Optimierung und Defragmentierung durchführen. Bringen Sie dann den Dienst wieder hoch, wenn die Abfrage schneller ausgeführt wird. Sie können UltraDefrag erhalten, das OpenSource und kostenlos isthttp://ultradefrag.sf.net Zum Schluss hat Microsoft ein Dokument, mit dem Sie Ihre Konfigurationen überprüfen könnten. Check out: http://www.slideshare.net/ManuelCastro8/high-performance-sql-server-workloads-on-hyper-v

Eine andere Sache, die Sie ausprobieren können, ist die Verwendung von ESXi anstelle von Hyper-V oder der neuesten Hyper-V 2012 R2.

Letztendlich wird mit der Vollversion von SQL ausgeführt, welche Version genau ausgeführt wird. Welches Betriebssystem wird gerade für den Gast und den Host ausgeführt? Haben Sie die neuesten Integrationsdienste installiert?