Sql-Server

等待資源的工作 - 是殺死它還是讓它等待更好

  • November 3, 2020

我們的伺服器有時很忙,我可以看到我的工作正在等待資源。殺死它並在例如一小時後啟動它還是讓它等到它完成更好?

現在有一個規則,如果它沒有在指定的時間內完成,它會終止工作,然後它會嘗試四次。我認為最好讓它等待,因為當它被殺死時,它會失去它在“行”中的位置,當它再次啟動時,它必須排到隊列的末尾。

額外資訊:這些作業來自帶有分析查詢的 ETL,大型作業在大型表上有許多連接。Tableau 還直接向伺服器發送查詢…

謝謝

最好的選擇是盡可能解決資源爭用。根據您的問題,您似乎正在等待記憶體授予。在評論中,您說您的伺服器有 4 TB 記憶體。預設情況下,SQL Server 將允許單個查詢獲得高達 750 GB 的授權。有沒有真正需要這麼多記憶體的查詢?請記住以下幾點:

  • 按照設計,SQL Server 為其記憶體授予請求大量記憶體。
  • 如果查詢的基數估計較差,則查詢可能會要求非常大的授權。我看到當少於 20 GB 就足夠時,查詢要求超過 1 TB 的記憶體。
  • 即使查詢獲得了巨大的記憶體授權,它仍然可能溢出到 tempdb。這是因為查詢的記憶體授權需要在不同的運算符之間共享,並且拆分是在查詢執行之前確定的。

我建議查看請求最多記憶體的查詢並使用資源調控器或MAX_GRANT_PERCENT提示來減少最大授權的大小。這是一個權衡。如果某些查詢開始將更多數據溢出到 tempdb,您可能會發現它們的性能更差。但是,您可以在完全不降低性能的情況下減少贈款。這完全取決於系統上執行的查詢以及一次執行的查詢數量。

引用自:https://dba.stackexchange.com/questions/278836