Log materialized view (MV) dapat digunakan untuk memungkinkan MV melakukan refresh cepat yang hanya mengubah data yang telah berubah. Namun, berbagai kondisi mencegah MV dari menggunakan log dan karenanya memerlukan penyegaran lengkap. Oracle menerapkan penyegaran lengkap atom sebagai penghapusan dan penyisipan setiap catatan. Ia melakukan ini bahkan jika pada akhirnya tidak ada perubahan pada data.
Apakah ada cara untuk membuat replikasi ini menjadi cerdas sehubungan dengan generasi redo ? MERGE yang diikuti oleh DELETE membutuhkan permintaan sumber dua kali. Apakah layak untuk mengumpulkan data secara massal untuk melakukan BULK MERGE dan DELETE? Apakah ada cara yang lebih baik?
Memperbarui:
Saya menjelajahi menggunakan tabel sementara global sebagai area pementasan. Meskipun mereka menggunakan kurang dari setengah redo, mereka masih menggunakan terlalu banyak.
sumber
insert
ops menghasilkan jauh lebih sedikit undo daripadadelete
atauupdate
ops (hampir tidak ada sebenarnya). Memiliki banyak gtts untuk menghindari operasi mahal mungkin merupakan pendekatan yang baikinsert
s. Ini sangat cocok dengan hasil yang saya lihat dan lebih baik tetapi tidak sebagus yang saya inginkan.append
petunjuk) bukanlah kondisi yang ideal untuk mengurangi pengulangan - Saya telah menjalankan beberapa tes untuk menunjukkan apa yang saya maksud. Diposting sebagai jawaban karena mereka tidak akan cocok dalam komentarJawaban:
Ini hanya dimaksudkan untuk menunjukkan penggunaan ulang berbagai
insert
operasi daripada menjawab seluruh pertanyaan. Hasil pada instance 10g saya tidak 100% deterministik, tetapi gambaran luasnya tetap sama setiap kali saya berlari.Untuk tabel heap, saya tidak tahu mengapa
insert /*+ append */
dihasilkan lebih banyak redo.testbed:
uji:
hasil:
sumber
Pertanyaan bagus. Saya "memecahkan" masalah ini untuk situasi saya beberapa waktu lalu dengan membuat MV dan indeks pada mereka NOLOGGING. Tidak ada gunanya situasiku - lagipula aku melakukan penyegaran penuh dari pandangan, mengapa aku perlu mengulang?
sumber