Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle 10g Blob nhỏ hoặc Clob không được lưu trữ nội tuyến?

Hành vi của Oracle LOB là như sau.

LOB được lưu trữ nội tuyến khi:

(
  The size is lower or equal than 3964
  AND
  ENABLE STORAGE IN ROW has been defined in the LOB storage clause
) OR (
  The value is NULL
)

LOB được lưu trữ ngoài hàng khi:

(
  The value is not NULL
) AND (
  Its size is higher than 3964
  OR
  DISABLE STORAGE IN ROW has been defined in the LOB storage clause
)

Giờ đây, đây không phải là vấn đề duy nhất có thể ảnh hưởng đến hiệu suất.

Nếu các LOB cuối cùng không được lưu trữ nội tuyến, hành vi mặc định của Oracle là tránh lưu chúng vào bộ nhớ đệm (chỉ các LOB nội tuyến mới được lưu trong bộ đệm đệm với các trường khác của hàng). Để yêu cầu Oracle lưu trữ các LOB không nội tuyến, tùy chọn CACHE nên được sử dụng khi LOB được xác định.

Hành vi mặc định là BẬT LƯU TRỮ TRONG ROW và NOCACHE, có nghĩa là các LOB nhỏ sẽ được nội dòng, các LOB lớn sẽ không (và sẽ không được lưu vào bộ nhớ đệm).

Cuối cùng, cũng có một vấn đề về hiệu suất ở cấp độ giao thức truyền thông. Các ứng dụng khách Oracle điển hình sẽ thực hiện thêm 2 bước đi vòng bổ sung cho mỗi LOB để tìm nạp chúng:- một để lấy kích thước của LOB và cấp phát bộ nhớ cho phù hợp - một để tìm nạp chính dữ liệu (miễn là LOB nhỏ)

Những bước vòng bổ sung này được thực hiện ngay cả khi một giao diện mảng được sử dụng để truy xuất kết quả. Nếu bạn truy xuất 1000 hàng và kích thước mảng của bạn đủ lớn, bạn sẽ phải trả cho 1 vòng quay để truy xuất các hàng và 2000 vòng tròn để truy xuất nội dung của LOB.

Xin lưu ý rằng nó không phụ thuộc vào thực tế, LOB có được lưu trữ nội tuyến hay không. Chúng hoàn thành các vấn đề khác nhau.

Để tối ưu hóa ở cấp độ giao thức, Oracle đã cung cấp một động từ OCI mới để tìm nạp một số LOB trong một vòng quay (OCILobArrayRead). Tôi không biết liệu điều gì đó tương tự có tồn tại với JDBC hay không.

Một tùy chọn khác là liên kết LOB ở phía máy khách như thể nó là một RAW / VARCHAR2 lớn. Điều này chỉ hoạt động nếu kích thước tối đa của LOB có thể được xác định (vì kích thước tối đa phải được cung cấp tại thời điểm ràng buộc). Thủ thuật này tránh những rắc rối phụ:LOB chỉ được xử lý như RAW hoặc VARCHAR2. Chúng tôi sử dụng nó rất nhiều trong các ứng dụng chuyên sâu về LOB của mình.

Khi số lượng đường vòng đã được tối ưu hóa, kích thước gói (SDU) có thể được thay đổi kích thước trong cấu hình mạng để phù hợp hơn với tình hình (tức là một số lượng hạn chế các đường vòng lớn). Nó có xu hướng giảm bớt sự kiện chờ "SQL * Net more data to client" và "SQL * Net more data from client".



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tải dữ liệu từ tệp văn bản vào bảng trong oracle

  2. Oracle sẽ tạo chỉ mục tự động trong những trường hợp nào?

  3. Thao tác bộ sưu tập

  4. Làm thế nào bạn có thể chạy cùng một truy vấn nhiều lần bằng cách sử dụng vòng lặp trong PL / SQL?

  5. Sự cố về hiệu suất khi cập nhật bảng từ một bảng khác