Bagikan melalui


Eskalasi Manajemen Transaksi

Windows menghosting serangkaian layanan dan modul yang bersama-sama menyusun manajer transaksi. Eskalasi manajemen transaksi menjelaskan proses migrasi transaksi dari satu komponen manajer transaksi ke komponen lain.

System.Transactions termasuk komponen manajer transaksi yang mengoordinasikan transaksi yang paling banyak terlibat, suatu sumber daya tahan lama atau beberapa sumber daya volatil. Karena manajer transaksi hanya menggunakan panggilan domain intra-aplikasi, manajer transaksi menghasilkan performa terbaik. Pengembang tidak perlu berinteraksi dengan manajer transaksi secara langsung. Sebaliknya, infrastruktur umum yang menentukan antarmuka, perilaku umum, dan kelas pembantu disediakan oleh namespace System.Transactions.

Ketika Anda ingin memberikan transaksi ke objek di domain aplikasi lain (termasuk di seluruh batas proses dan mesin) pada komputer yang sama, infrastruktur System.Transactions secara otomatis meningkatkan transaksi yang akan dikelola oleh Koordinator Transaksi Terdistribusi Microsoft (MSDTC). Eskalasi juga terjadi jika Anda mendaftarkan manajer sumber daya tahan lama lainnya. Ketika dieskalasi, transaksi tetap dikelola dalam keadaan terelevasi sampai selesai.

Antara transaksi System.Transactions dan transaksi MSDTC, ada jenis perantara transaksi yang tersedia melalui Promotable Single Phase Enlistment (PSPE). PSPE adalah mekanisme penting lainnya dalam System.Transactions untuk pengoptimalan performa. Ini memungkinkan sumber daya tahan lama jarak jauh, yang terletak di domain aplikasi, proses, atau komputer yang berbeda, untuk berpartisipasi dalam transaksi System.Transactions tanpa menyebabkannya dieskalasi ke transaksi MSDTC. Untuk informasi selengkapnya tentang PSPE, lihat Mendaftarkan Sumber Daya sebagai Peserta dalam Transaksi.

Bagaimana Eskalasi Dimulai

Eskalasi transaksi mengurangi performa karena MSDTC berada dalam proses terpisah, dan mengeskalasi transaksi ke MSDTC menghasilkan pesan yang dikirim di seluruh proses. Untuk meningkatkan performa, Anda harus menunda atau menghindari eskalasi ke MSDTC; dengan demikian, Anda perlu tahu bagaimana dan kapan eskalasi dimulai.

Selama infrastruktur System.Transactions menangani sumber daya yang volatil dan paling banyak satu sumber daya tahan lama yang mendukung pemberitahuan fase tunggal, transaksi tetap berada dalam kepemilikan infrastruktur System.Transactions. Manajer transaksi hanya tersedia untuk sumber daya yang tinggal di domain aplikasi yang sama dan pengelogan (menulis hasil transaksi ke disk) tidak diperlukan. Eskalasi yang menghasilkan infrastruktur System.Transactions yang mentransfer kepemilikan transaksi ke MSDTC terjadi ketika:

  • Setidaknya satu sumber daya tahan lama yang tidak mendukung pemberitahuan fase tunggal terdaftar dalam transaksi.

  • Setidaknya dua sumber daya tahan lama yang mendukung pemberitahuan fase tunggal terdaftar dalam transaksi. Misalnya, mendaftarkan satu koneksi dengan SQL Server 2005 tidak menyebabkan transaksi dipromosikan. Namun, setiap kali Anda membuka koneksi kedua ke database SQL Server 2005 yang menyebabkan database mendaftar, infrastruktur System.Transactions mendeteksi bahwa itu adalah sumber daya tahan lama kedua dalam transaksi, dan mengeskalasikannya ke transaksi MSDTC.

  • Permintaan untuk "menyusun" transaksi ke domain aplikasi yang berbeda atau proses yang berbeda dipanggil. Misalnya, serialisasi objek transaksi di seluruh batas domain aplikasi. Objek transaksi disusun berdasarkan nilai, yang berarti bahwa setiap upaya untuk meneruskannya di seluruh batas domain aplikasi (bahkan dalam proses yang sama) menghasilkan serialisasi objek transaksi. Anda dapat meneruskan objek transaksi dengan melakukan panggilan pada metode jarak jauh yang mengambil Transaction sebagai parameter atau Anda dapat mencoba mengakses komponen layanan transaksional jarak jauh. Ini menserialisasikan objek transaksi dan menghasilkan eskalasi, seperti ketika transaksi diserialisasikan di seluruh domain aplikasi. Ini sedang didistribusikan dan manajer transaksi lokal tidak lagi memadai.

Tabel berikut mencantumkan semua kemungkinan pengecualian yang dapat dilemparkan selama eskalasi.

Jenis pengecualian Kondisi
InvalidOperationException Upaya untuk mengeskalasi transaksi dengan tingkat isolasi yang sama dengan Snapshot.
TransactionAbortedException Manajer transaksi tidak berfungsi.
TransactionException Eskalasi gagal dan aplikasi dibatalkan.