Powershell

比較兩個不同的 ODBC 系統 DNS 條目。哪個更快?PS腳本

  • February 12, 2015

我想找出在我的帶有 Windows Server 2008 R2 的 VM 上哪個 ODBC 連接更快。我有兩個不同的 ODBC 提供程序。第一個是 v11 中的“Oracle Instant Client ODBC”。另一個“Microsoft ODBC for Oracle”。我想,我可以使用 Powershell 來測試兩個類似查詢與每個提供程序一起執行多長時間。(稍後我還想測試 MS Provider for Oracle 在 Win08R2 或 Win12R2 上是否更快)

我在這裡找到了一個不錯的腳本:LINK

我只修改了一點。所以現在我有 tihs litte 腳本:

#SQL Authentication
$t_start = Get-Date 

$connectstring = "DSN=instant;Uid=USER;Pwd=PASSWORD;"
#Windows Authentication
#$connectstring = "DSN=myDsn;"
$sql = "SELECT * FROM TABLE1 WHERE ROWNUM <= 900;"

$conn = New-Object System.Data.Odbc.OdbcConnection($connectstring)
$conn.open()
$cmd = New-Object system.Data.Odbc.OdbcCommand($sql,$conn)
$da = New-Object system.Data.Odbc.OdbcDataAdapter($cmd)
$dt = New-Object system.Data.datatable
$null = $da.fill($dt)
$conn.close()
$dt | measure

$t_end = Get-Date
Write-Host ($t_end - $t_start)

它適用於小查詢,但問題是如果我想選擇超過 840 行,我會收到錯誤:

Exception calling "Fill" with 1 argument (s): "Input string was not in a correct format."
Line: 14 Sign: 2
   In Zeile:14 Zeichen:2
   +  $null = $da.fill($dt)
   +  ~~~~~~~~~~~~~~~~~~~~~
       + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
       + FullyQualifiedErrorId : FormatException

腳本的結果是:

Count    : 840
Average  : 
Sum      : 
Maximum  : 
Minimum  : 
Property : 

00:00:01.4530713

如果我將 SQL-Query 更改為“ ROWNUM <= 839”,它可以工作。如果我更改為“ ROWNUM <= 841”,我會收到此錯誤。

我的目標是真正做一個像“ ROWNUM <= 1.000.000”這樣的大查詢

我查詢的表有大約 1.200.000 行…

是否有可能更改某些內容,以便我能夠查詢大表?或者有沒有人可以使用一個不錯的免費軟體工具來查詢 ODBC-SYSTEM-DSN 條目並獲得有用的查詢時間,以便我可以比較不同的 ODBC?

我沒有做很多 PS,所以不確定錯誤到底在說什麼,但是……看起來你正試圖用 select *? 的輸出填充本地表?如果這是真的,我想知道 PS 是否為 rownum 創建了一個帶有數字/int 列類型的臨時表,但第 840 或 841 行中的 rownum 值不是數字/int。或其他列的類似內容。

設置臨時表時需要一種數據類型,但正在尋找另一種數據類型。

在從事數據等工作的這些年裡,我已經多次看到這種情況發生。

rownum 總是有數字嗎?

所有數據行 840 和 841 是什麼樣的?

如果您逐項列出一個欄位而不是 select * 會發生什麼?即選擇

$$ first_ name $$來自表 1,其中 ROWNUM <= 900; 如果你改變了rownum怎麼辦?900到1800之間?

順便說一句:很酷的腳本!

引用自:https://dba.stackexchange.com/questions/91854