Chúng tôi sử dụng ODP.NET để thực hiện truy vấn trên cơ sở dữ liệu Oracle và bình thường nó hoạt động tốt. Có một cơ sở dữ liệu cụ thể, và một khung nhìn cụ thể trong cơ sở dữ liệu đó, mặc dù, chúng ta không thể hoàn thành một truy vấn trên từ .NET. Ví dụ:Truy vấn Oracle chậm (hoặc không thành công) từ ứng dụng .NET nhưng nhanh chóng từ Nhà phát triển SQL
SELECT some_varchar_field FROM the_view WHERE ROWNUM < 5;
Nếu tôi thực hiện truy vấn này từ bên trong nhà phát triển Oracle SQL, nó kết thúc sau chưa đầy một giây. Nếu tôi thực hiện một truy vấn giống hệt từ ứng dụng .NET của chúng tôi bằng ODP.NET, nó sẽ bị treo và cuối cùng tạo ra một lỗi "liên hệ bị mất kết nối ORA-03135: kết nối". Tôi nghĩ rằng hạn chế nó chỉ là một vài hàng loại bỏ khả năng rằng nó là vấn đề FetchSize.
Có các truy vấn khác mà tôi có thể thực hiện thành công, nhưng chúng chậm hơn so với chương trình của chúng tôi so với từ nhà phát triển SQL. Một lần nữa, tôi nhận ra SQL Developer chỉ nhận được dữ liệu cho 50 hàng đầu tiên ban đầu, nhưng tôi nghĩ rằng điều kiện ROWNUM lấy nó ra khỏi phương trình.
Điều gì có thể khác về kết nối hoặc lệnh mà Oracle SQL Developer đang sử dụng so với ứng dụng mà chúng tôi đang sử dụng có thể gây ra sự khác biệt về tốc độ?
Thật không may, tôi không có quyền truy cập vào máy chủ (ngoài việc chạy truy vấn Oracle chống lại nó).
Cảm ơn bạn.
CẬP NHẬT: Tôi đã thử cùng một truy vấn với nhà cung cấp Oracle của Microsoft và nó thực thi rất nhanh. Thật không may, nhà cung cấp đó không được chấp nhận nên đây không phải là giải pháp lâu dài.
Trong phụ lục này câu trả lời rất hữu ích, tôi thấy rằng chạy ALTER SESSION SET NLS_COMP = BINARY; ALTER SESSION SET NLS_SORT = BINARY; đặt phiên trở lại cài đặt mặc định của nó. Chắc chắn, nó bật độ nhạy trường hợp, nhưng đó không phải là xấu như truy vấn chậm. –
Làm cách nào bạn thấy rằng thư viện bạn đang sử dụng đang thực thi các câu lệnh đó? Tôi đang có một kịch bản tương tự: ngay lập tức trong Oracle Sql Developer nhưng một vài giây từ ứng dụng. Kiểm tra chính xác cùng một kịch bản trên Sql Server thực sự là nhanh hơn. Có lẽ tôi đang thiếu một số cấu hình quan trọng. –