Dot-Net
.NET 應用程序中的 Oracle 查詢很慢(或失敗),但 SQL Developer 中的查詢速度很快
我們使用 ODP.NET 對 Oracle 數據庫執行查詢,通常它工作正常。但是,在該數據庫中有一個特定的數據庫和一個特定的視圖,我們只是無法從 .NET 完成查詢。例如:
SELECT some_varchar_field FROM the_view WHERE ROWNUM < 5;如果我從 Oracle SQL 開發人員內部執行此查詢,它會在不到一秒的時間內完成。如果我使用 ODP.NET 從我們的 .NET 應用程序執行相同的查詢,它會掛起並最終產生“ORA-03135:連接失去聯繫”錯誤。我認為將其限制為僅幾行消除了它作為 FetchSize 問題的可能性。
還有其他查詢我可以成功執行,但我們的程序比 SQL Developer 慢。同樣,我意識到 SQL Developer 最初只獲取前 50 行的數據,但我認為 ROWNUM 條件將其排除在等式之外。
Oracle SQL Developer 使用的連接或命令與我們的應用程序使用的連接或命令有什麼不同會導致速度差異?
不幸的是,我無權訪問伺服器(除了對它執行 Oracle 查詢)。
謝謝你。
更新:我用微軟的 Oracle 提供商嘗試了相同的查詢,它執行得非常快。不幸的是,該提供程序已被棄用,因此這不是一個長期的解決方案。
它與 ODP.NET 提供程序無關。問題是我們用來為我們創建連接的庫(當然,Oracle SQL Developer 不使用它,我在嘗試 Microsoft 提供程序時也沒有使用它)在執行任何操作之前總是執行以下語句:
ALTER SESSION SET NLS_COMP = LINGUISTIC ALTER SESSION SET NLS_SORT = BINARY_CI這些使 Oracle 不區分大小寫。但是,它們也使所有正常索引變得無用。因為我們是從視圖中查詢的,所以它內置了排序。而且因為我們不擁有數據庫,所以我們不能使索引語言化來解決性能問題。
提供一種在這種(罕見的)場景中不執行這些語句的方法解決了這個問題。