2012-01-12 22 views
5

Tôi đang cố gắng đọc một cột clob từ oracle trong .Net và quan sát hiệu suất rất kém và nhiều lưu lượng truy cập mạng.Hiệu suất kém nhận được trường thông tin từ Oracle trong .Net

Tôi đã thử cách ODP + OCI, devArt + OCI để truy cập dữ liệu với cùng kết quả - mất khoảng 20 giây để nhận 1000 hàng trong trình đọc dữ liệu và đọc giá trị clob cho mỗi hàng.

Kiểm tra dấu vết của dấu vân tay, hóa ra mỗi khi tôi cố gắng đọc trường dấu mũ cho một hàng trong trình đọc, có thêm nhiều gói tcp được gửi giữa máy khách và máy chủ. Vì vậy, đối với 1000 hàng, điều này sẽ chậm hơn 1000 lần so với khi chỉ truy vấn một hàng.

Đồng thời, nếu tôi chạy cùng một truy vấn trong SQL Developer (mà tôi tin rằng sử dụng trình điều khiển jdbc mỏng thay vì oci), tôi nhận được kết quả ngay lập tức, bao gồm các giá trị clob. Nó không cố gắng để truy vấn clob cho mỗi hàng - nó được tất cả trong một đi!

Nhưng tôi không thấy ứng dụng khách mỏng cho .net. Làm thế nào tôi có thể tăng tốc độ? Hãy giúp tôi!

EDIT: Loại trường của tôi thực sự là XMLTYPE được lưu trữ dưới dạng dấu kiểm, không phải là một dấu kiểm thực. Sử dụng getClobVal để cải thiện kết quả từ 50% đến 10 giây cho 1000 hàng. Nhưng đồng thời, Sql Developer đang trả về kết quả ngay lập tức, không phải trong 10 giây.

+0

Bạn đã bao giờ giải quyết vấn đề này chưa? Bạn đã đăng nhập yêu cầu hỗ trợ với nhà cung cấp chưa? –

Trả lời

1

Bạn đã quan sát chính xác rằng Oracle trì hoãn việc truy xuất LOB. Do đó, hiệu suất ứng dụng của bạn bị giới hạn bởi thời gian đi vòng quanh mạng.

Với thuộc tính InitialLOBFetchSize của lớp OracleCommand (trong ODP.NET, xem documentation), bạn có thể yêu cầu Oracle truy xuất một phần của LOB với lần truy xuất ban đầu của hàng. Nếu LOB của bạn không quá dài, điều này có thể tạo nên sự khác biệt.

+0

Cảm ơn, tôi cũng đã nhìn vào nó ngày hôm qua nhưng nó đã không làm cho sự khác biệt với tôi. Tôi thực sự đã không thành thật trong thông điệp của tôi - chúng tôi có trường XmlType được lưu trữ như là clob, không phải là một clob trực tiếp và có thể điều này đang gây ra vấn đề. Tôi cũng đã cố gắng gọi getClobVal qua nó và nó cho hiệu suất tăng 50%, nhưng đó chỉ là 10 giây cho 1000 hàng trong khi Nhà phát triển SQL tìm nạp 5000 gần như ngay lập tức. – neonknight

Các vấn đề liên quan