Commit vs Fast Commit vs Commit Cleanout di Oracle Database

12

Saya bertanya-tanya apakah seseorang dapat memverifikasi pemahaman saya mengenai perbedaan antara 3 istilah tersebut yang berkaitan dengan Oracle Databases.

Banyak sumber mengacaukan istilah-istilah ini dan tidak menjelaskannya secara terperinci sehingga agak sulit mencari info.

Dari apa yang saya kumpulkan:

  1. Komit dan komit cepat adalah hal yang sama persis, semua komit adalah komitmen cepat.
  2. Komit cepat pada dasarnya hanya memperbarui bendera di tabel transaksi dari header segmen undo / rollback untuk menunjukkan bahwa transaksi telah dilakukan. Namun, blok aktual tidak ditinjau kembali yang berarti bahwa alamat byte dibatalkan (UBA) dalam daftar transaksi yang tertarik (ITL) yang terletak di header blok data masih menunjuk ke tabel transaksi segmen undo yang sesuai. Selanjutnya, byte kunci dari baris yang sesuai tidak dilepaskan dan jumlah kunci di ITL tidak berubah (baris masih terkunci).
  3. Dalam komit cleanout, blok ini ditinjau kembali dan ITL diperbarui dengan komit SCN. Namun, jumlah kunci di ITL dan byte kunci yang disimpan pada setiap baris masih belum diperbarui (baris masih terkunci seperti di komit cepat), ini tidak menghasilkan pengulangan meskipun blok diubah.
  4. Blok yang dilakukan secara normal (== komitmen cepat) akan menjalani Pembersihan Blok Tertunda saat disentuh berikutnya (dan menghasilkan pengulangan).
  5. Blok yang telah menjalani pembersihan akan menjalani Pembersihan Blok Penundaan Tertunda saat mereka disentuh berikutnya (dan menghasilkan pengulangan).

Semoga seseorang dapat memverifikasi poin-poin ini! Terima kasih!

BYS2
sumber

Jawaban:

6

Anda memiliki dasar-dasar yang benar. Hanya ada satu jenis komit (tidak normal , cepat ...).

dari konsep doc :

Ketika transaksi dilakukan, tindakan berikut terjadi:

  • Nomor perubahan sistem (SCN) dihasilkan untuk COMMIT.

    Tabel transaksi internal untuk undo tablespace terkait mencatat bahwa transaksi telah dilakukan. SCN unik terkait transaksi ditugaskan dan dicatat dalam tabel transaksi. Lihat "Tingkat Isolasi Serializable".

  • Proses log writer (LGWR) menulis entri redo log yang tersisa dalam buffer redo log ke redo log online dan menulis SCN transaksi ke redo log online. Peristiwa atomik ini merupakan komitmen transaksi.

  • Basis data Oracle melepaskan kunci yang dipegang pada baris dan tabel.

    Pengguna yang merasa enqueued menunggu kunci yang dipegang oleh transaksi yang tidak berkomitmen diizinkan untuk melanjutkan pekerjaan mereka.

  • Oracle Database menghapus savepoints.

  • Oracle Database melakukan pembersihan komit.

    Jika blok yang dimodifikasi berisi data dari transaksi yang dilakukan masih dalam SGA, dan jika tidak ada sesi lain yang memodifikasinya, maka database akan menghapus informasi transaksi terkait kunci dari blok. Idealnya, KOMIT membersihkan blok sehingga SELECT berikutnya tidak harus melakukan tugas ini.

Jadi pembersihan (penuh dengan redo) akan dilakukan selama komit jika blok masih dalam SGA.

Dalam sistem aktif, adalah umum untuk blok dengan transaksi yang tidak dikomit untuk ditulis ke disk dan memerah dari SGA. Dalam hal ini, blok dibiarkan apa adanya dan permintaan berikutnya yang menyentuh blok akan melakukan pembersihan blok tertunda (poin Anda 5 tidak terjadi dalam semua kasus).

Vincent Malgrat
sumber