2008-08-28 114 views
2

使用oracle 10g,通過perl DBI訪問,我有一張表,每秒鐘更新數千萬行,同時從另一個進程中更頻繁地讀取數據。何時提交更改?

很快,更新頻率將增加一個數量級(也許是兩個)。 有人建議每提交一次N更新,而不是每次更新都會有助於提升性能。

我有幾個問題:

  • 將是更快或更慢或這取決於(儘快規劃基準既方式可以得到新的負載體面的仿真)
  • 爲什麼將它幫助/阻礙表現。
  • 如果「它取決於...」,關於什麼?
  • 如果這有助於N的最佳價值?
  • 爲什麼我的本地DBA在我需要時有一個有用的直接答案?
    (其實我知道這個問題的答案之一):-)

編輯:

@codeslave:謝謝,BTW失去 未提交的更改是沒有問題的,我 不要刪除原始數據用於更新使用 直到我確信一切 是好的,順便說一句清潔女工做 拔服務器,TWICE :-)

一些谷歌搜索顯示,它可能會幫助 因爲的問題有關回滾 段,但我仍然不知道一個 經驗法則爲N每幾十? 數百?千?

@diciu:偉大的信息,我一定會 看看。

回答

3

提交會導致Oracle將內容寫入磁盤 - 即在重做日誌文件中,以便在發生電源故障等情況下,無論提交的事務做了什麼都可以恢復。 在文件中寫入比在內存中寫入要慢,所以如果對一行中的許多操作執行而不是對一組合並更新執行,則提交速度會更慢。

在Oracle 10g中有一個異步提交,使得它更快但不太可靠:https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6158695.html

PS我肯定知道的是,在一個場景中我已經看到了一定的應用,改變凝聚的更新數量從5K到50K使其速度提高了一個數量級(快10倍)。

0

更快/更慢?

它可能會快一點。但是,在運行運行到死鎖的風險更大,損失未提交的修改應該有災難性發生(清潔女工拔服務器),FUD,消防,硫磺等

爲什麼它會幫助嗎?

顯然更少的提交操作,這反過來又意味着更少的磁盤寫入等

DBA的和直接的答案?

如果它很容易,你不會需要一個。

1

降低提交的頻率肯定會加快速度,但因爲你是讀取和寫入到該表中經常有對鎖的潛力。只有您可以確定同時更新相同數據的可能性。如果發生這種情況的可能性很低,則每隔50行提交一次並監測情況。試錯恐怕:-)

0

如果你「不刪除用於更新,直到原始數據[你]深信一切都很好」,那麼你爲什麼不刪除所有這些增量在提交之間和回滾如果有問題?這聽起來像你有效地在交易之上建立了一個交易系統。

0

@CodeSlave您您的問題是由@stevechol回答,如果我刪除所有增量承諾會有鎖。我想如果沒有更好的事情出現,我會按照他的建議選擇一個隨機數字,監控負載並相應地進行調整。應用@diciu twaks。

PS:事務之上的事務只是偶然的,我通過FTP獲取用於更新的文件,而不是立即刪除它們,我設置了一個cron作業以在一週後刪除它們(如果沒有人使用應用程序抱怨),這意味着如果出現問題,我有一個星期趕上錯誤。

1

以及減少提交頻率,你也應該考慮進行批量更新,而不是個別的。

+0

你能詳細說明爲什麼會有幫助嗎? – Pat 2008-09-16 11:19:00