2011-10-04 77 views
3

如何配置查詢(選擇查詢)在sql server 2008中可以使用的最大內存?每個查詢的最大內存

我知道有一種方法來設置最小值,但最大值如何?我想用這個,因爲我有很多並行的進程。我知道MAXDOP選項,但這是針對處理器的。

更新:

我實際上試圖做的是連續運行一些數據加載。此數據加載位於ETL表單中(提取轉換和加載)。數據加載時,我想運行一些查詢(選擇)。所有這些都是昂貴的查詢(包含group by)。 對我來說最重要的過程是數據加載。我獲得了10000行/秒的平均速度,當我平行運行查詢時,它降至4000行/秒甚至更低。我知道應該提供更多的細節,但這是我工作的更復雜的產品,我無法詳細說明。我可以保證的另一件事是我的加載速度不會因爲鎖定問題而下降,因爲我監視並刪除了它們。

+1

什麼版本的SQL Server 2008是你嗎? –

+1

簡短的回答是:你可能不應該(如果你試圖這樣做,那麼你可能會做一些根本性錯誤的事情)。如果您構建了需要結果的查詢,則需要花費一切。 –

+2

也許你應該描述你正面臨的實際問題... –

回答

3

在我能想到的每個查詢級別上沒有任何設置最大內存的方法。

如果您使用Enterprise Edition,則可以使用resource governor來設置特定工作負載組可以使用的最大內存量,這可能有所幫助。

+0

不是什麼海報正在問,但可能是可行的。 –

+1

@MitchWheat - 是的,我添加了第一行,因爲我不知道有什麼辦法來完成OP要求的內容。 –

+0

yeap。這是我正在尋找的。感謝:D –

0

在SQL 2008中,您可以使用資源調控器來實現此目的。在那裏你可以設置request_max_memory_grant_percent來設置內存(這是相對於池的max_memory_percent值指定的池大小的百分比)。這個設置在不查詢特定的情況下,它是會話特定的。

+1

不知道這對martin(5分鐘)較舊的答案有多大貢獻? –

+0

對不起,但是當我打開窗口,幾分鐘沒有碰到它時 - 保存後,我看到了答案 –

0

除了馬丁的回答

如果你的查詢都是相同或相似的,在相同的數據,那麼他們將被共享內存反正。

實施例:

一個繁忙的網站100個的併發連接運行它們之間6個不同的parametrised查詢上大致相同範圍的數據。

  • 6執行計劃
  • 100用戶上下文和各類標誌和計數器
  • 一個緩衝池,以顯示每個數據頁

的使用。如果你有100個不同的查詢,否則將無法parametrised然後修復代碼。每次查詢

記憶是我從來沒有想過或關心自去年千年

+1

我假設OP正在討論像sort和hash連接這樣的操作符的內存授予。對於這個問題的動機來說,澄清一下會很好。 –