解決ArcGIS中因SDE或數據庫配置問題而導致服務宕掉的一種思路


文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

1.背景

最近連續有兩個項目現場出現了AGS服務盪掉的問題,一個是通州現場,一個是福州現場。

1.1通州現場的問題描述和解決思路

通州現場環境為ArcGIS9.2,使用IMS發布的地圖服務,其問題表現為每隔兩天左右,其地形圖服務便會崩潰一次,重啟地形圖服務后地圖可以正常顯示。

因為IMS中地圖的出圖為動態出圖,所以其出圖時需要通過連接SDE,此問題的出現很可能是SDE中最大連接數的問題。

1.2福州現場的問題描述和解決思路

福州現場環境為ArcGIS10.0,使用的ArcGIS Server發布的矢量服務(Map Server),其問題表現為基本每天矢量服務都會盪掉一次,重啟后,系統便可以正常運行。

矢量服務盪掉有很多種原因,猜想了如下幾種可能:

(1)沒有定期清除ArcGIS Server中的緩存,導致緩存過多而盪掉。

(2)由於Windows防火牆的原因,Context和SDE的連接限制一段時間后,會被系統Kill掉,然而Context並不知情,於是在空閑一段時間后的第一次訪問中,仍然使用該鏈接,連接不上SDE導致Crash。

(3)矢量查詢需要通過SDE連接數據庫,會不會SDE的最大連接數設置少了,導致服務盪掉。

(4)因為矢量查詢時同樣需要用到數據庫中的游標,會不會數據庫的最大游標數設置少了,導致服務盪掉。

2.解決通州現場問題

2.1首先設置最大連接數

SDE的默認連接數是48個,修改它有兩種方式,一種是通過注冊表,一種是通過數據庫。這里我將兩種修改方式都做一個介紹。

2.1.1通過注冊表修改

打開SDE的安裝目錄下的(一般安裝路徑為C:\ arcgis\ArcSDE\sqlexe\etc)giomgr.defs文件進行編輯,設置CONNECTIONS參數為你的最大連接數。通過命令導入到數據庫中:sdeconfig –o import –f C:\arcgis\ArcSDE\sqlexe\etc\giomgr.defs –i esri_sde(數據庫實例名) –s (ServerName) –u sde(用戶名) –p sde(密碼) 。 設置好后需要重啟SDE服務才能生效。

2.1.2通過數據庫中的

運行select * from sde.server_config;在這個表中修改CONNECTIONS的NUM_PROP_VALUE即可。

 

         

2.2 修改TCPKEEPALIVE配置

能夠刪除無效連接的最大功臣就是TCPKEEPALIVE了。TCPKEEPALIVE參數可以控制數據庫是否會根據已配置好的間隔時間來定時檢查連接是否為無效連接,如果是,則自動刪除該連接。

例如,當TCPKEEPALIVE參數設置為TRUE后,數據庫會根據SDE服務所在機器的注冊表項KEEPALIVETIME所提供的響應時間,不斷偵測所有連接是否為無效連接,如果為無效連接,則自動刪除該連接。

此參數的修改跟SDE的最大連接數的修改方式一樣,有兩種方式,具體可以參考上節描述的方法。

2.3修改 KEEPALIVETIME的配置

這里涉及到另外一個參數:KEEPALIVETIME。

對於操作系統默認安裝的機器來說,KEEPALIVETIME注冊表項是沒有的,而如果沒有話,服務器不會主動發送發送KeepAlive數據包來確認空閑連接是否依然毫無變化,也就不會進行刪除操作。所以上面提到的無效連接會越來越多。我們可以在如下路徑中:Local_Machine\system\CurrentControlSet\Services\Tcpip\Parameters 添加DWORD項:KeepAliveTime。這樣系統的注冊表中便有了KEEPALIVETIME項。

 

如果系統中已經有了KEEPALIVETIME項,我們不填寫它的值時,它默認的就是兩小時。根據網上別人的經驗,推薦設置為5分鍾。不過具體情況根據項目來定,最后重啟SDE才能生效。

2.4 繼續修改——修改注冊表中的SharedSection

我們在給通州現場設置了以上三個配置后,過了兩天,現場反映地圖服務還是盪掉了。於是我們再次查資料,發現還有一個關鍵的地方需要配置——SharedSection。

Windows為每個服務分配了一個固定大小的內存(默認512K)。每個sde進程大約需要9K內存,因此sde默認的連接數為512/9約等於48。

如果我們不修改這個固定大小內存的配置,即使我們已經將SDE的最大連接數配置改成了128,一樣無法生效。

按照上面的換算方法,9*128=1152,然后我們適當的將其改成1024。

最后我們在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows 項中找到SharedSection,並將原SharedSection=1024,3072,512中的第三項改為1024。改完后,到目前已經過了兩周,現場反映地圖服務沒有盪掉過。

 

3.解決福州現場問題

3.1 修改定期清除緩存——無效果

通過http://192.168.101.9:8399/arcgis/rest/admin這個連接進入管理頁面,然后設置每天的一個時刻定期清除緩存。給現場修改后,第二天現場工程人員回復還是盪掉了。

 

3.2 關掉防火牆,並且設置服務過一段時間后再次連接數據庫時先檢查連接是否正常——無效果

 

在服務的ServiceProperties里面設置這個定期檢查連接的時間間隔。給現場修改的是30分鍾。第二天問現場,現場反饋服務還是盪掉了。

3.3 修改數據庫最大游標數、以及SDE最大連接數等相關配置——成功

仔細觀察錯誤日志,發現在眾多報錯中有如下一個錯誤。猜想數據庫游標數可能設置小了。

 

通過show parameter open_cursors;查看現場的游標數目為250。

通過select count(*) from v$open_cursor ;查看現場目前的游標打開的數目,發現在矢量服務關閉了的情況下,這個數目已經過了200。

通過alter system set open_cursors=2000 scope=both;將游標數目變大。

為保險起見,通過上面提到過的幾個步驟,將SDE的最大連接數以及殺進程的配置等全部修改。

目前已經過了兩周,現場沒再出現服務盪掉的情況。

不過我總擔心游標數設置大了會影響系統,因為,游標在shared pool占有一定的內存,太多會帶來浪費,當然也不能太少,太少的話會給系統帶來一定壓力,引起系統內存爭搶。

今天詢問了下公司在北京的DBA,他告訴我,游標數量根據現場環境不同而不同,如果會話不多,建議使用會話數*5來設置,如果多的話,比如超過200個會話,那*3也可以,並且,游標數多少對性能影響小,如果你內存資源充足,可以多設置點。

我給現場設置的是2000,這樣看來是合理的。

 

4.總結

(1)只修改SDE最大連接數,而不修改注冊表中的SharedSection,是無效果的。

(2)由於矢量查詢與數據庫是有直接聯系的,每一次查詢均需要使用游標,如果數據庫中的游標設置太小,容易引起矢量查詢的崩潰。

 

 

                                     -----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

                                              如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM