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

Nhầm lẫn InMemory DUPLICATE trong Oracle RAC

Có lẽ hầu hết mọi người đều biết đến tính năng Oracle 12.1.0.2 mới, tùy chọn cơ sở dữ liệu InMemory. Khi sử dụng tùy chọn này trên Oracle RAC, DBA có thể chỉ định mệnh đề DUPLICATE để một đối tượng được sao chép trong kho lưu trữ cột InMemory trong tất cả các trường hợp. Điều khoản này dành cho các Hệ thống được thiết kế bởi Oracle như Exadata. Tuy nhiên, trong các hệ thống không được thiết kế, Oracle dường như cho phép điều khoản này nhưng nó không hoạt động như người ta có thể mong đợi. Để minh họa, hãy làm theo ví dụ này, được chạy trên cơ sở dữ liệu RAC hai nút trên MacBook Pro của tôi với VirtualBox… chắc chắn không phải là hệ thống được thiết kế.

Đầu tiên, một bảng được tạo và sau đó được thay đổi cho INMEMORY DUPLICATE.

SQL> create table db_objs
 2 as select * From dba_objects;
Table created.
SQL> alter table db_objs inmemory duplicate;
Table altered.

Không nên đặt điều khoản này gây ra lỗi vì đây là hệ thống không được thiết kế?

Bảng được xác minh để cho thấy rằng DUPLICATE được chỉ định.

SQL> select inmemory,inmemory_duplicate 
 2 from user_tables where table_name='DB_OBJS';
INMEMORY INMEMORY_DUPL
-------- -------------
ENABLED  DUPLICATE

Một biểu mẫu “chọn *” đơn giản mà bảng được đưa ra trong trường hợp 1. Sau đó, chúng tôi có thể xác minh rằng bảng đó là InMemory.

SQL> select inst_id,owner,segment_name,populate_status,inmemory_duplicate
 2 from gv$im_segments;
INST_ID    OWNER      SEGMENT_NA POPULATE_ INMEMORY_DUPL
---------- ---------- ---------- --------- -------------
         1 SCOTT      DB_OBJS    COMPLETED DUPLICATE

Lưu ý rằng kết quả ở trên cho thấy rằng phân đoạn chỉ ở trong trường hợp 1. Cùng một bảng được truy vấn trong trường hợp 2, nhưng truy vấn GV $ IM_SEGMENTS vẫn chỉ hiển thị trường hợp 1.

Từ phiên bản 1:

SQL> select avg(object_id) from db_objs;
AVG(OBJECT_ID)
--------------
 11095.2049
Elapsed: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 1349857420
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5 | 10 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 5 | | |
| 2 | TABLE ACCESS INMEMORY FULL| DB_OBJS | 21319 | 104K| 10 (0)| 00:00:01 |
---------------------------------------------------------------------------------------

Từ phiên bản 2:

 
SQL> select avg(object_id) from db_objs;
AVG(OBJECT_ID)
--------------
 11095.2049
Elapsed: 00:00:00.03
Execution Plan
----------------------------------------------------------
Plan hash value: 1349857420
---------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5 | 4 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 5 | | |
| 2 | TABLE ACCESS INMEMORY FULL| DB_OBJS | 21319 | 104K| 4 (0)| 00:00:01 |
---------------------------------------------------------------------------------------

Vì vậy, từ một trong hai trường hợp, bảng đã được truy cập INMEMORY. Nhưng chúng ta có thể thấy rằng chỉ có phiên bản 1 có phân đoạn InMemory.

Tất cả các dấu hiệu chỉ ra điều khoản DUPLICATE là đang hoạt động trên một hệ thống không được thiết kế, mà chúng tôi biết đó là một lỗi. DBA_TABLES dường như cho biết DUPLICATE đang được phát ở đây. Kế hoạch Giải thích cung cấp sự đồng tình. Nhưng GV $ IM_SEGMENTS không đồng ý và cho thấy rằng DUPLICATE không hoạt động trong hệ thống này.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ý nghĩa của byte kết xuất (systimestamp) của Oracle

  2. Bắt một xử lý kết nối Oracle gốc trong Hibernate 4 để chạy một proc được lưu trữ

  3. Hiệu suất chọn Hibernate kém so với chạy trực tiếp - gỡ lỗi như thế nào?

  4. Tham gia Diễn đàn Hỏi và Đáp dành cho Nhà phát triển

  5. Hết thời gian chờ cho phương pháp OracleDataReader.Read