2014-10-29 86 views
0

我們有一個可以連接到Oracle或SQL Server的Delphi應用程序。我們使用Devart組件連接到數據庫,並且在涉及數據庫訪問時,所有內容都非常通用。即我們使用最小公分母。最終,我們使用數據庫作爲數據存儲,並且不使用任何可能特定於數據庫的「高級」功能。從Delphi執行批量插入時的Oracle性能

但是,我們對Oracle有嚴重的性能問題。這與插入數據有關。我知道通過運行一系列insert語句來插入數據對於性能來說並不好,但由於在將數據上傳到數據庫之前需要對原始數據進行一些業務邏輯處理,所以我們有點侷限於多次插入。爲了瞭解性能差異,我們最近做了一個測試,在我們的數據庫中插入了1000個項目,在SQL Server中(可接受)需要5分鐘,而在Oracle中需要44分鐘。

我們可以做些什麼來提高性能?數據的插入需要用戶完成,而不是Oracle DBA,因此絕對沒有任何Oracle技能是任何解決方案的先決條件之一。基本上,用戶需要按下按鈕,一切都完成了。

編輯:業務邏輯發生在插入之前(儘管在實際插入過程中會有一點點變化,所以對於SQL Server來說更實際的數字是2分鐘,對於Oracle來說更多的是40分鐘左右。每個記錄有幾個大的斑點,所以也許這就解釋了速度慢的原因,但並不是爲什麼會有這樣的差異,這1000個項目是交易的一部分

+3

你不啓用某種自動提交選項?你在交易中插入數據嗎? UniDAC是否支持DML數組(hm,['might not'](http://forums.devart.com/viewtopic.php?f=28&t=25135))?順便說一句。在SQL Server上插入1000行5分鐘的確是非常慢的性能。 – TLama 2014-10-29 11:26:24

+0

我在你的問題中找不到它,所以處理順序如下:*在1000個項目上應用業務邏輯 - >插入1000條記錄*或*在1項目上應用業務邏輯 - >插入1條記錄 - >重複1000次* ?插入1000條記錄需要5分鐘時間。 – 2014-10-29 11:35:17

+0

在上面的問題中進一步解釋。 – Steve 2014-10-29 11:58:19

回答

2

Oracle支持DML數組,可以加速性能。 BLOB是涉及的,性能可能取決於緩存設置,以及如何在目標表中設置BLOB。一些數據庫客戶端參數調整可能也有助於提高網絡速度 無論如何,不​​知道您使用的是哪個版本的Oracle,如何配置,你的表定義(及其表空間),BLOBS有多大,以及實際使用的SQL(你是否追蹤過它?),診斷真正的問題非常困難。 Oracle有一些強大的診斷工具來識別瓶頸,但它們可能不易於使用,並且需要充分了解Oracle如何工作。從企業管理器控制檯,您可以以更易讀的格式訪問其中的一些 - 是否檢查過它?

更新:因爲我不能到其他的答案發表評論,甲骨文支持differet LOB類型存儲:存儲到數據庫

  • 的LOB(下交易同治)
  • BFILES,外部文件系統LOBS仍然由Oracle管理的(不低於交易LOB數據)
  • 的SecureFiles(11g開始,都BFILES但交易支持等功能)

Oracle專爲並可以管理大型LOB而設計 - 只需要對其進行正確配置即可。參數會影響LOB性能:

  • 啓用/禁用STORAGE IN ROW
  • 緩存/ NOCACHE /緩存中讀取
  • 記錄/ NOLOGGING
  • CHUNK
  • PCTVERSION /保持(尤其是更新和刪除)
  • TABLESPACE(通常,建議用於lobs的專用表空間)

這些參數需要考慮平均LOB大小,LOB的訪問方式以及修改頻率。沒有「一刀切」。但是也有客戶端:OCI可以緩衝LOB客戶端,所以緩存小的讀/寫操作,最小化網絡往返和LOB版本的數量 - 這取決於您使用的OCI包裝。

1

如果您的問題是關於blob傳輸,則陣列DML(僅適用於FireDac,ODAC,DOA和SynDbOracle單元afaik)不會發生太大變化。

第一個想法是在傳輸之前壓縮數據。

嘗試多個訪問庫。我們的開源代碼SynDBOracle直接訪問oci.dll客戶端,但可能會稍微快一點。

但也許問題可能出現在服務器端。 Oracle不喜歡擁有大量數據的交易,因爲它往往會溢出其沃爾文件。嘗試調整表格的預寫日誌文件。

恕我直言,rdbms不是存儲巨大斑點的最佳選擇。通過元數據的rdbms索引的純文件通常更好。或者切換到一個大的SQL存儲,如鍵/值存儲或mongodb blob api。

記住,Oracle和MSSQL都不要問錢成正比的數據大小....

+1

「僅可用」並不完全正確。 [直接Oracle訪問](http://www.allaroundautomations.com/DOA)也支持DML數組,並且已經有十年了。 (我在2001年曾在一家公司工作過。) – 2014-10-29 14:09:40

+0

@ken網站正在關閉......但另一個庫進行測試.... – 2014-10-29 14:39:49

+0

Direct Oracle Access的正確網站是http:// www。allroundautomations.com/doa.html – 2015-01-20 03:23:58