Oracle 性能問題
我們使用的是非常強大的 Oracle 11G 機器;有冗餘儲存等。據我所知,這是一頭野獸。
我們剛剛為一個工具獲得了這個數據庫,當我第一次加入合作社時,大約有 20 人在使用,現在已經超過 150 人。我是唯一一個在做這件事的人:(
我們目前有一個系統,可以在我們的整個數據中心分發 PERL 腳本,本質上為我們提供了一種“網格”計算能力。
Perl 腳本執行一種模擬並將結果報告回數據庫。他們做選擇/插入。每個腳本的負載不是很高,但它可能同時發生在 20-50 個系統上。
然後,我們有多個數據中心和使用者都使用相同的方法訪問相同的數據庫。
我們的主要問題是我們的數據庫因連接而過載,不得不丟棄一些。我們有時有超過 500 個連接。這些是舊的 perl 腳本,它們不能很好地處理這個問題。從本質上講,它們失敗了,結果失去了。我寧願避免重寫很多這些,因為它們寫得不好,甚至讓人頭疼。
數據庫本身並沒有過載,只是連接成本太高。我們打開一個連接,進行快速查詢,然後斷開連接。連接很短,但很多。數據庫團隊基本上說我們需要減少連接數,否則他們會忽略我們。
因為它分佈在我們的農場中,所以我們無法實現持久連接。我用我們的網路伺服器來做這個;但它在一個固定的系統上。其他的是 perl 腳本,它們由分發工具打開和關閉,因此並不總是執行。
解決此問題的最佳方法是什麼?腳本本身可以等待連接打開。他們不需要立即採取行動。某種排隊系統?
有人建議我設置幾個名為“SQL Relay”的工具實例。也許每個數據中心都有一個。這個工具有多可靠?這種方法有多好?它能滿足我們的需要嗎?
我們可以為每個數據中心設置一個,並通過它將請求中繼到我們的主數據庫,保持開放的持久連接管道?這有意義嗎?
您還有其他建議嗎?有任何想法嗎?任何幫助將不勝感激。
可悲的是,我只是在一家非常大的公司工作的 coop 學生,不知何故,所有這些都落在了我的肩上(實際上沒有人可以尋求幫助;它是一家硬體公司,每個人都是硬體工程師,數據庫團隊沒用在印度)我很迷茫,因為最好的方法是什麼?
我工作過度,這個問題干擾了正在進行的進度,基本上需要盡快解決;最好不要重寫整個系統,購買硬體(不會發生),或者在腳下開槍。
幫助大聲笑!
“我們打開一個連接,進行快速查詢,然後斷開連接。連接很短,但很多。”
我會嘗試使用共享伺服器連接。在 unix 機器上執行的 Oracle 需要一個 unix 程序來完成會話請求的“工作”。通常,在專用連接下,它會在會話連接時分叉一個新的 unix 程序,並在會話斷開連接時終止它。
在共享伺服器下,DBA 定義了最小和最大連接數,例如 100 和 250。在啟動時,數據庫分叉出 100 個程序,它們坐在那裡等待連接。如果它收到 150 個請求,它將啟動所需的額外 50 個程序。如果它收到 300 個請求,其中 50 個會一直掛起,直到 250 個(最大)程序之一可用。
重要的是,這些程序在會話的生命週期內並不與特定會話綁定,而僅針對特定呼叫(例如,單獨的插入或更新)。這確實對記憶體使用有一些影響。呼叫之間保留的任何內容都必須在共享記憶體 (SGA) 中,而不是在程序記憶體 (PGA) 中。但是在 11g 下,數據庫可以在 SGA 和 PGA 之間移動記憶體,因此這不像以前那麼重要了。
在這裡閱讀更多