none
資料庫伺服器的Physical Memory幾乎滿載? RRS feed

  • 問題

  • 透過監控軟體,Physical Memory有2G,使用量高達1.89G,甚至還用到
    Virtual Memory?硬體設備為Xeon 3.0*2顆,RAM:1024X2,
    線上人數約100~200左右,請問這該如何調校起呢?
    2007年3月19日 上午 01:43

解答

  • Dear Sir,

     

    若是要看SQL Server用了多少的memory, 那麼您可以用performance monitor來看, 使用Total Server Memory的counter

     

    另外, 在線上叢書中有提到

    SQL Server 動態使用記憶體時,會定期查詢系統以判定可用的實際記憶體量。在 Microsoft Windows 2000 下,SQL Server 增加或縮減緩衝區快取,根據伺服器的活動將可用的實體記憶體保持在 4 MB 與 10 MB 之間。維持這個可用記憶體可避免 Windows 2000 進行分頁。若有一些可用記憶體,SQL Server 會將記憶體釋放給 Windows 2000。若有更多可用記憶體,SQL Server 會配置記憶體至緩衝集區。SQL Server 只有在需要更多記憶體時,才會加入記憶體到緩衝集區;休眠中的伺服器不會增加其緩衝集區的大小。

    在 Windows Server 2003 下,SQL Server 使用記憶體通知 API QueryMemoryResourceNotification,判定緩衝集區何時要配置記憶體和釋放記憶體。

    建議允許 SQL Server 動態使用記憶體;不過,您可以手動設定記憶體選項和限制 SQL Server 可存取的記憶體數量。設定 SQL Server 的記憶體數量之前,要先決定適當的記憶體設定,請將實體記憶體總數減去 Windows 2000 或 Windows Server 2003 以及任何 SQL Server 執行個體 (以及當電腦不專用於 SQL Server 時,其他的系統用途) 需要的記憶體。這個差額是可指派給 SQL Server 的最大記憶體數量。

     

    因此, 若是您沒有設定上限的話, SQL會盡可能的使用記憶體.

    另外, 要去看的是, 就200人來登入使用SQL, 若是真的就需要用到2GB的RAM, 那應該去思考的是, 為何會需要這麼大量的memory, 是否大多數的動作可以最佳化, 或是簡化程式. 有時取資料時不要一次做太多的table join動作. 若是這些條件在最後是必要的, 那麼, 伺服器的效能有很大的問題時, 加RAM是不可以免的.

     

    Best regards,

    Colin Lin

    微軟技術支援中心

    2007年5月4日 上午 03:13

所有回覆

  • 加記憶體比較快 ...
    這種線上人數多的資料庫都會吃比較多的記憶體,所以記憶體是多多益善 ...

    2007年3月19日 上午 03:00
    版主
  • 2048G記憶體不夠用?同時線上人數100左右上下。...若要加記憶體,也需要理由跟上層報告?

    可以知道什麼程式把記憶體要耗掉了,SQL Profiler可以找出來嗎?

    2007年3月19日 上午 05:22
  • 你可以用 Performance Counter (效能檢視器) 去檢測 SQL Server 使用的記憶體量,看是誰吃記憶體的 .

    可參考:
    http://www.microsoft.com/technet/prodtechnol/sql/2005/tsprfprb.mspx#EYIAC

    因為我只知道你有多少 RAM 和多少人上線,無法 100% 判斷問題,所以只依照一般的認知來回應 .
    SQL Server 本身對記憶體要求本來就是多多益善 ...

    2007年3月19日 上午 06:40
    版主
  •  

    建議解法

     

    1. 加 RAM

    2. SQL2000 SEVER 可以設定使用實體記憶體的上限.. 最好設一下.. 不然RUN久了 就算有100GB 也會被用光..

        SQL2000 預設佔了RAM 是不會還的..

    3. 多個USER 使用 AP-SERVER 共用一組 連線.. 就不會佔那麼多的連線數..

        以100個連線數  2GB 是一定不夠的..

    4.  鋸箭法  排定時間 定時重啟 SQL-SERVER 的服務     哈哈..真的有人這麼作

     

    2007年3月29日 下午 12:03
  • Dear Sir,

     

    若是要看SQL Server用了多少的memory, 那麼您可以用performance monitor來看, 使用Total Server Memory的counter

     

    另外, 在線上叢書中有提到

    SQL Server 動態使用記憶體時,會定期查詢系統以判定可用的實際記憶體量。在 Microsoft Windows 2000 下,SQL Server 增加或縮減緩衝區快取,根據伺服器的活動將可用的實體記憶體保持在 4 MB 與 10 MB 之間。維持這個可用記憶體可避免 Windows 2000 進行分頁。若有一些可用記憶體,SQL Server 會將記憶體釋放給 Windows 2000。若有更多可用記憶體,SQL Server 會配置記憶體至緩衝集區。SQL Server 只有在需要更多記憶體時,才會加入記憶體到緩衝集區;休眠中的伺服器不會增加其緩衝集區的大小。

    在 Windows Server 2003 下,SQL Server 使用記憶體通知 API QueryMemoryResourceNotification,判定緩衝集區何時要配置記憶體和釋放記憶體。

    建議允許 SQL Server 動態使用記憶體;不過,您可以手動設定記憶體選項和限制 SQL Server 可存取的記憶體數量。設定 SQL Server 的記憶體數量之前,要先決定適當的記憶體設定,請將實體記憶體總數減去 Windows 2000 或 Windows Server 2003 以及任何 SQL Server 執行個體 (以及當電腦不專用於 SQL Server 時,其他的系統用途) 需要的記憶體。這個差額是可指派給 SQL Server 的最大記憶體數量。

     

    因此, 若是您沒有設定上限的話, SQL會盡可能的使用記憶體.

    另外, 要去看的是, 就200人來登入使用SQL, 若是真的就需要用到2GB的RAM, 那應該去思考的是, 為何會需要這麼大量的memory, 是否大多數的動作可以最佳化, 或是簡化程式. 有時取資料時不要一次做太多的table join動作. 若是這些條件在最後是必要的, 那麼, 伺服器的效能有很大的問題時, 加RAM是不可以免的.

     

    Best regards,

    Colin Lin

    微軟技術支援中心

    2007年5月4日 上午 03:13