Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

InMemory DUPLICATE Kebingungan di Oracle RAC

Kebanyakan orang mungkin mengetahui fitur Oracle 12.1.0.2 yang baru, opsi database InMemory. Saat menggunakan opsi ini di Oracle RAC, DBA dapat menentukan klausa DUPLICATE agar objek diduplikasi di antara penyimpanan kolom InMemory di semua instance. Klausul ini untuk Sistem Rekayasa Oracle seperti Exadata. Namun, dalam sistem non-Rekayasa, Oracle tampaknya mengizinkan klausa ini tetapi tidak berfungsi seperti yang diharapkan. Sebagai ilustrasi, ikuti contoh ini, yang dijalankan pada database RAC dua simpul di MacBook Pro saya dengan VirtualBox… jelas bukan sistem yang Direkayasa.

Pertama, sebuah tabel dibuat dan kemudian diubah untuk INMEMORY DUPLICATE.

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

Bukankah pengaturan klausa ini akan menimbulkan kesalahan karena ini adalah sistem yang tidak direkayasa?

Tabel diverifikasi untuk menunjukkan bahwa DUPLICATE telah ditentukan.

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

Formulir "pilih *" sederhana dari tabel dikeluarkan pada instance 1. Kami kemudian dapat memverifikasi bahwa tabel tersebut adalah 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

Perhatikan bahwa hasil di atas menunjukkan bahwa segmen hanya pada instance 1. Tabel yang sama dikueri pada instance 2, tetapi kueri GV$IM_SEGMENTS masih hanya menampilkan instance 1.

Dari contoh 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 |
---------------------------------------------------------------------------------------

Dari contoh 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 |
---------------------------------------------------------------------------------------

Jadi dari salah satu contoh, tabel diakses INMEMORY. Tetapi kita dapat melihat bahwa hanya instance 1 yang memiliki segmen InMemory.

Semua tanda menunjuk ke klausa DUPLICATE sebagai bekerja pada sistem non-Rekayasa, yang kita tahu adalah kesalahan. DBA_TABLES tampaknya menunjukkan bahwa DUPLICATE sedang dimainkan di sini. The Explain Plan memberikan persetujuan. Namun GV$IM_SEGMENTS tidak setuju dan menunjukkan bahwa DUPLICATE tidak berfungsi di sistem ini.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ORA-01008:tidak semua variabel terikat Kesalahan w/ Parameter

  2. Apa arti tanda (+) dalam klausa Oracle SQL WHERE?

  3. JDBC Oracle - Ambil penjelasan rencana untuk kueri

  4. Kesalahan Oracle ORA-12154 pada IIS lokal, tetapi tidak dengan Server Pengembangan Visual Studio

  5. SQL Terus mendapatkan kesalahan dengan ON UPDATE CASCADE