none
是否真是內存方面的問題 RRS feed

  • 问题

  • 大家好,請教一個問題。

    環境SQLServer 2005

    這幾天遇到一個奇怪的事情,有些報表根本就執行不出結果,在Activity Monitor中去查看,發現該進程存在很多的線程,而且發現占用很多的資源都是在tempdb中。

    同時使用perfmon命令在系統中監控性能,根據之前在網上找到的一些資料(也不知道是否正確),

    Memory: Page Faults / sec

    如果该值偶尔走高,表明当时有线程竞争内存。如果持续很高,则内存可能是瓶颈。

    在系統監視器中發現該值基本上都大于40,某些時候會達到400+。

    另外一個參數:

     Memory \Cache Bytes 监控由文件系统快取所使用的字节数。可连同Memory\ Available Bytes一起使用。如果Memory\ Cache Bytes的数值超过4 MB,就可能需要向计算机新增内存了。

    在系統監視器中發現該值達到400000000(字節)遠遠大于4MB。

    是否可以憑借這兩個值判斷瓶頸在內存

    但是實際上可用內存還有11GB。


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年4月22日 2:03

答案

全部回复

  • Double check wait type of that process, and try add maxdop in the query to limit number of threads.
    2010年4月22日 2:21
  • Double check wait type of that process, and try add maxdop in the query to limit number of threads.

    發現很多線程都是CXPACKET的等待類型,另外max degree of parallelism設置的是6,CPU按照盒子計算是24個。
    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年4月22日 2:26
  • 補充一下,SQLServer版本是SQLServer2005企業版 SP3 4053
    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年4月22日 2:28
  • That means waiting on parallelism. Where did you set maxdop to 6?
    2010年4月22日 2:30
  • That means waiting on parallelism. Where did you set maxdop to 6?


    以前有段時間執行sql語句很慢,然后修改這個參數,當時就逐個測試這個參數的值。發現當為6的時候,執行起來較快。

    另外,在等待并行,是應該將max degree of parallelism的值調大還是調小?


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年4月22日 2:34
  • Set smaller value in the query. Don't change server setting, may slow down other processes.
    2010年4月22日 2:40
  • Set smaller value in the query. Don't change server setting, may slow down other processes.


    也就是說最好的是設置成默認的值0?

    當然,0是代表可用所有的CPU。


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年4月22日 2:42
  • No, 0 means use all processors.
    2010年4月22日 2:43
  • No, 0 means use all processors.


    也就是說最好設置成2到6之間的值?

    0表示全部可用,

    1表示禁用max degree of parallelism。


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年4月22日 2:48
  • That's correct.
    2010年4月22日 2:50
  • That's correct.


    OK 多謝rmiao。

    我等會修改測試下max degree of parallelism的值。


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年4月22日 2:54
  • 另外也有在微軟官網上看到這個帖子,

    http://support.microsoft.com/kb/960110/zh-tw

    是否有必要升級到最新的補丁?


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年4月22日 3:04
  • Don't need this if you applied sp3 already.
    2010年4月22日 3:08
  • Don't need this if you applied sp3 already.

    OK 多謝。
    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年4月22日 3:11
  • Don't need this if you applied sp3 already.

    OK 多謝。
    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    rmiao,是否可以這樣。

    在SQLServer2005中可以在sql語句
    中加入最大并行度的參數,

    這樣是否可以解決有問題的sql?

    目前就只有一個sql語句運行存在這個問題。


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2010年4月22日 3:28
  • That's what I said above, use maxdop hint in the query.
    2010年4月22日 3:29
  • That's what I said above, use maxdop hint in the query.


    了解,之前看錯了。

    多謝。


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    2010年4月22日 3:32