Ist es möglich, memory zu einer Abfrage in MS SQL server zuzuordnen?

Ich habe Abfrage innerhalb einer gespeicherten Prozedur und ich versuche zu sehen, gibt es eine Möglichkeit, memory festzulegen, die für diese Abfrage erforderlich zu verwenden.

Ich weiß auf server-Ebene können wir ändern Minimum memory, um Query verwenden, aber ich das ist für alle Abfragen auf dem server, aber ich bin auf der search nach einer Option auf bestimmten Abfrage-Ebene.

Es gibt keine Methode oder Option, die dem Benutzer in SQL server zur Verfügung gestellt wird, um memory für bestimmte Abfrage zu reservieren. Die Reservierung erfolgt intern durch das databasemodul, bevor die Abfrage ausgeführt wird. Wenn du an Resource Governor denkst, weiß ich nicht viel darüber, aber du kannst es versuchen

Wenn die Abfrage ausgeführt wird, wird sie kompiliert und dann optimiert der Optimierer die Abfrage. Wenn die Abfrage völlig neu ist, kann es etwas memory benötigen, um mehrere Pläne zu erstellen und dann den besten Plan daraus zu wählen. Dies wird als kostenorientierte Optimierung bezeichnet. Ein Mangel an memory kann diesen process verzögern. Als nächstes kommt die Abfrage Ausführung und vorausgesetzt, Sie tun Sorten und Hash-Joins in Ihrer Abfrage es würde memory benötigen vielleicht manchmal erhebliche Menge an memory je nach Zeilen, die es zu sortieren hat.

Wenn eine solche Abfrage ausgeführt wird, berechnet sie zwei memoryparameter, die required memory und additional memory erforderlich memory ist ein Mindestspeicher, der erforderlich ist, um Sortieroperationen auszuführen, und zusätzlicher memory ist memory erforderlich, um zusätzliche Sorten zu speichern, wenn die vollständige Abfrage ausgeführt wird. Dies wird als Abfragespeicher gewährt. Jetzt in Ihrem Fall nehme ich an, dass Stats entweder veraltet sind oder ein memorydruck oder memory ist, ist derzeit nicht frei. Wenn Ihre Abfrage lief es für einige Menge an memory gefragt, wird SQL server nicht alle memory zu gewähren, sondern würde nur minimalen memory zu gewähren, so dass Abfrage Executon starten kann und würde einige memory für die Abfrage auf der Grundlage der sorting es wird zu tun. Aber wenn Ihre Abfrage entweder aufgrund von schiefem Stats oder aufgrund von memorydruck lief, wurde zusätzlicher memory für die memoryung von sortierten data nicht erhalten und dies führte zu verschütten.

Sie können versuchen, Statistiken zu aktualisieren und sehen, ob Abfrage einen besseren Plan vorbereitet und vermeiden würde, sich zu verteilen oder den Wert des maximalen serverspeichers zu erhöhen, um mehr memory zum Pufferpool zur Verfügung zu stellen. Es kann auch die Chance geben, dass du die Reihenfolge der Abfrage ändern musst oder eine Abfrage umschreiben kannst.

Vollständige Beschreibung, wie memory zugewiesen wird, wenn Abfrageläufe in diesem Artikel ist