2014-03-06 45 views
1

進程版本11.0 srt *(srt)排序/臨時文件在RHEL Linux 6.0中增長很大。與Webspeed用於Web應用程序的特定數據庫隔離。使用-T開關參數來定義文件的位置。不使用-t,因此文件斷開連接並且不在文件系統上顯示。大型srt *文件正在進行中4gl

在shell執行lsof顯示文件增長到GB大小並增加。第三列是大小在輪空:

_mprosrv 29968 3862790144的/ usr /溫度/ srtJrjsxX(刪除)

_mprosrv 31588 15290187776的/ usr /溫度/ srtVEi9Lp(刪除)

_mprosrv 32644 1533157376的/ usr /溫度/ srtTozP1W(刪除)

_mprosrv 32667 3890683904在/ usr /溫度/ srte5qI1U(刪除)

有沒有辦法來限制這些臨時文件的大小或增長如此之大的阻止他們?

回答

1

如果您使用11.0,請考慮升級到11.2或更高版本。

顯然有一個錯誤(稱爲缺陷OE00227173,在11.2中修復),其中一些大型查詢會導致_mprosrv進程不斷增長其.srt文件,而不是按照它們應該重用的文件空間。

從發行說明:

發行編號:OE00227173 臨時排序文件成長的每一個查詢被執行

時間運行在一個字索引的通配符搜索時,該搜索 將在數據庫服務器上創建一個srt文件。如果查詢返回大量的行數(大於100,000),則排序文件中的空間不是 完全重新使用,並且.srt可能會變得非常大。

暫時緩解可以通過從所討論的服務器的PID斷開用戶會話,然後終止所述服務器進程(最好用PROMONř& d,4,7,7-)中找到。

def var v-pid as int format ">>>>>>>>>9" label "Server PID" no-undo. 

do while true: 
    update v-pid with frame f1 side-labels. 

    find _server where _server._server-pid eq v-pid 
     no-lock no-error. 
    disp _server with frame f2. 

    for each _connect where 
     _connect._Connect-Server eq _server._server-num /** NOT _server-id **/ 
     no-lock: 

     find _userio where _connect._connect-id eq _userio._userio-id 
     no-lock no-error. 

     disp _connect._Connect-Usr /** NOT _Connect-Id **/ 
      _connect._Connect-Name 
      _connect._Connect-Device 
      _connect._Connect-Time 
      _connect._Connect-Pid 
      _userio._userio-dbaccess 
      _userio._userio-dbread 
      _userio._userio-dbwrite. 

    end. 
end. 
+0

這樣的聲音解決了我們遇到的確切問題。當在字詞索引中進行具有通配符的搜索時,我們可以看到文件增長。謝謝 – MikeM

+0

也意識到,作爲臨時措施,您可以使用特別大的srt文件停止服務器進程以釋放該磁盤空間。 (無論是直接殺死還是提示R&D,4,7,7 ...)當然,連接到該服務器的任何用戶都可能會斷開連接,直接殺死服務器進程可能會導致數據庫崩潰。最好首先斷開用戶與服務器PID的關係[可能在系統安靜的時候,如果存在]。 – user3466351

+0

添加代碼以獲取每個服務器的用戶PID ... – user3466351

1

不,沒有參數來限制它們。瞭解你在做什麼來促進增長是關鍵。通常它們是缺少適當索引的查詢的結果,因此必須有客戶選擇和排序的記錄。

我想:

  • 在客戶端上啓用-t這樣就可以實時監控SRT文件增長。
  • 啓用客戶端語句緩存,以便您可以確定在增長髮生時哪個源代碼模塊負責哪一行代碼中的哪個查詢。
  • 編譯XREF和調試,使您可以查看錶掃描代碼(XREF「整個索引」引用)和http://dbappraise.com/protop.html發現語句緩存中的信息
  • 下載PROTOP 3(調試)源代碼行,這樣就可以實時監控
  • 查詢活動的-noautoresultlist參數添加到您的客戶端啓動(這是不是萬能的,但它可能在某些情況下幫助)
  • 如果你碰巧趕上「的行爲,」客戶端不聲明緩存啓用發送「kill -USR1」,然後查找並檢查protrace中的4gl堆棧跟蹤。 (可能在客戶端的啓動目錄中)
+0

審議了以下進展文章http://knowledgebase.progress.com/articles/Article/P95930?popup=true任何幫助查明其代碼/查詢:

代碼由服務器PID獲取用戶實際上是在增長? – MikeM

+0

我會啓用客戶端語句緩存,PROMON,R&D,1,18 –

+0

一旦它們變得太大以致只能殺死與SRT文件相關聯的PID的任何副作用,因此它們的空間可以被回收?看起來像是一旦殺死了應用程序中的查詢被執行時重新創建的文件。 – MikeM