none
開啟資料表問題 RRS feed

  • 問題

  •  

    作業系統:windows server 2003

    資料庫:sql server 2000(sp4)

    我有一套系統軟體在啟動(服務)時,會去開sql server 2000的某個資料表(內有五十萬筆),並且會在windows的temp目錄下產生temp file,當temp file大到2GB多時,我的系統就無法啟動。

    問題:

    1. temp file是否有限制容量?
    2. 如果有如何讓它可以超過2GB的限制?
    2007年12月2日 上午 07:44

解答

  • Dear Sir,

     

    我大致看了一下描述, 覺得有幾個地方的描述, 和SQL Server的運作模式不太相同

    1. SQL Server不會在開啟資料表時去產生temp file, 若是有也只是在資料庫的transaction log中去產生

    2. SQL Server若是還到記憶體不足時, 會需要使用disk來做swapping, 但也是只使用pagefile來做運作

     

    另外針對您所描述的temp file, 是屬於哪一種格式? 就我過去的經驗, 比較有可能是您們的軟體將資料取出後建立的. 您可以與程式開發人員做一確認.

     

    PS. 基本上SQL Server資料庫並沒有2GB的限制, 除非您使用MSDE/SQL Server Express, 或是建立檔案時設定了檔案大小.

    而若是設定了檔案大小, 您將會在SQL Server Error 中找到9002的錯誤訊息, 並且只會造成此資料庫無法加入資料.

     

    Best regards,

    Colin Lin

    微軟技術支援中心

     

    2007年12月3日 上午 10:12

所有回覆

  • 不知道你所用的檔案系統是哪一種?

     

    檔案系統 FAT32 NTFS
    單一檔案最大大小 (2^32 – 1) Bytes 理論值:(2^64 – 1) KB
    實際值:(2^64 – 64) KB
    最多可儲存的檔案個數 接近 2^22 2^32 − 1

     

    至於會產生暫存檔則代表您的實體記憶體不足,所以 SQL Server 會自行跟作業系統要求更多的記憶體。可以的話,請原系統設計者重新檢視其 T-SQL 程式碼是否有適時地釋放出不要的資源,或是使用暫存資料表進行處理,而不要一股腦地把所有的資料都載入到記憶體進行處理。

    2007年12月2日 上午 08:08
    版主
  • 我的案系統是NTFS、主機的記憶體為2GB。

    原系統設計者主要考量執行效率問題,所以系統啟動時,會預先將資料表開啟備用。

    最近要新購伺服器(RAM:8GB),作業系統為WINDOWS SERVER 2003 (64位元)、資料庫為MS SQL SERVER 2005 (64位元),此問題會有改善嗎?還是有什麼方法可以解決?

    謝謝!!

     

     

    2007年12月2日 上午 09:40
  • 雖然說在不更改程式的狀態下,升級硬體並改用 SQL Server 2005,問題是有可能會改善,不過真正的結果如何,還是要上線實際測試之後才知道。

     

    PS.
    講實話,不知道所謂的將資料表開啟備用是什麼意思?是說已經將所有的資料都載入到記憶體內?還是...

    如果是前者,那麼記憶體再多也永遠都不夠用。

    2007年12月2日 上午 09:48
    版主
  • 因為該資料表24小時持續有前端的軟體在存取,所以系統啟動的時候就將該資料表預先OPEN(如果每次存取就OPEN一次,可能執行速度會變慢),,而TEMP FILE應該是SQL SERVER產生的,可能如您所說的SQL SERVER將資料載入到記憶體內,而記憶體不夠就產生TEMP FILE(記憶體再多也永遠都不夠用)。

    謝謝!

    2007年12月2日 上午 11:12
  • Dear Sir,

     

    我大致看了一下描述, 覺得有幾個地方的描述, 和SQL Server的運作模式不太相同

    1. SQL Server不會在開啟資料表時去產生temp file, 若是有也只是在資料庫的transaction log中去產生

    2. SQL Server若是還到記憶體不足時, 會需要使用disk來做swapping, 但也是只使用pagefile來做運作

     

    另外針對您所描述的temp file, 是屬於哪一種格式? 就我過去的經驗, 比較有可能是您們的軟體將資料取出後建立的. 您可以與程式開發人員做一確認.

     

    PS. 基本上SQL Server資料庫並沒有2GB的限制, 除非您使用MSDE/SQL Server Express, 或是建立檔案時設定了檔案大小.

    而若是設定了檔案大小, 您將會在SQL Server Error 中找到9002的錯誤訊息, 並且只會造成此資料庫無法加入資料.

     

    Best regards,

    Colin Lin

    微軟技術支援中心

     

    2007年12月3日 上午 10:12