sys.dm_tran_active_snapshot_database_transactions (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Dalam instans SQL Server, tampilan manajemen dinamis ini mengembalikan tabel virtual untuk semua transaksi aktif yang menghasilkan atau berpotensi mengakses versi baris. Transaksi disertakan untuk satu atau beberapa ketentuan berikut:

  • Saat opsi database ALLOW_SNAPSHOT_ISOLATION dan READ_COMMITTED_SNAPSHOT diatur ke AKTIF:

    • Ada satu baris untuk setiap transaksi yang berjalan di bawah tingkat isolasi rekam jepret, atau tingkat isolasi yang diterapkan baca yang menggunakan penerapan versi baris.

    • Ada satu baris untuk setiap transaksi yang menyebabkan versi baris dibuat dalam database saat ini. Misalnya, transaksi menghasilkan versi baris dengan memperbarui atau menghapus baris dalam database saat ini.

  • Ketika pemicu diaktifkan, ada satu baris untuk transaksi tempat pemicu dijalankan.

  • Saat prosedur pengindeksan online berjalan, ada satu baris untuk transaksi yang membuat indeks.

  • Saat sesi Multiple Active Results Sets (MARS) diaktifkan, ada satu baris untuk setiap transaksi yang mengakses versi baris.

Tampilan manajemen dinamis ini tidak termasuk transaksi sistem.

Catatan

Untuk memanggil ini dari Azure Synapse Analytics atau Analytics Platform System (PDW), gunakan nama sys.dm_pdw_nodes_tran_active_snapshot_database_transactions. Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.

Sintaks

  
sys.dm_tran_active_snapshot_database_transactions  

Tabel Dikembalikan

Nama kolom Jenis data Deskripsi
transaction_id bigint Nomor identifikasi unik yang ditetapkan untuk transaksi. ID transaksi terutama digunakan untuk mengidentifikasi transaksi dalam operasi penguncian.
transaction_sequence_num bigint Nomor urutan transaksi. Ini adalah nomor urut unik yang ditetapkan ke transaksi saat dimulai. Transaksi yang tidak menghasilkan rekaman versi dan tidak menggunakan pemindaian rekam jepret tidak akan menerima nomor urutan transaksi.
commit_sequence_num bigint Nomor urut yang menunjukkan kapan transaksi selesai (terapkan atau berhenti). Untuk transaksi aktif, nilainya adalah NULL.
is_snapshot int 0 = Bukan transaksi isolasi rekam jepret.

1 = Adalah transaksi isolasi rekam jepret.
session_id int ID sesi yang memulai transaksi.
first_snapshot_sequence_num bigint Jumlah urutan transaksi terendah dari transaksi yang aktif saat rekam jepret diambil. Pada eksekusi, transaksi rekam jepret mengambil rekam jepret dari semua transaksi aktif pada saat itu. Untuk transaksi nonsnapshot, kolom ini menunjukkan 0.
max_version_chain_traversed int Panjang maksimum rantai versi yang dilalui untuk menemukan versi yang konsisten secara transaksional.
average_version_chain_traversed real Jumlah rata-rata versi baris dalam rantai versi yang dilalui.
elapsed_time_seconds bigint Waktu yang berlalu sejak transaksi memperoleh nomor urut transaksinya.
pdw_node_id int Berlaku untuk: Azure Synapse Analytics, Analytics Platform System (PDW)

Pengidentifikasi untuk simpul tempat distribusi ini aktif.

Izin

Pada SQL Server dan SQL Managed Instance, memerlukan VIEW SERVER STATE izin.

Pada tujuan layanan SQL Database Basic, S0, dan S1, dan untuk database di kumpulan elastis, akun admin server, akun admin Microsoft Entra, atau keanggotaan dalam##MS_ServerStateReader## peran server diperlukan. Pada semua tujuan layanan SQL Database lainnya, izin VIEW DATABASE STATE pada database, atau keanggotaan dalam ##MS_ServerStateReader## peran server diperlukan.

Izin untuk SQL Server 2022 dan yang lebih baru

Memerlukan izin TAMPILKAN STATUS PERFORMA SERVER pada server.

Keterangan

sys.dm_tran_active_snapshot_database_transactions melaporkan transaksi yang diberi nomor urut transaksi (XSN). XSN ditetapkan saat transaksi pertama kali mengakses penyimpanan versi. Dalam database yang diaktifkan untuk isolasi rekam jepret atau isolasi yang diterapkan baca menggunakan penerapan versi baris, contoh menunjukkan kapan XSN ditetapkan ke transaksi:

  • Jika transaksi berjalan di bawah tingkat isolasi yang dapat diserialisasikan, XSN ditetapkan saat transaksi pertama kali menjalankan pernyataan, seperti operasi UPDATE, yang menyebabkan versi baris dibuat.

  • Jika transaksi berjalan di bawah isolasi rekam jepret, XSN ditetapkan saat pernyataan bahasa manipulasi data (DML), termasuk operasi SELECT, dijalankan.

Nomor urutan transaksi secara serial ditahapkan untuk setiap transaksi yang dimulai dalam instans Mesin Database.

Contoh

Contoh berikut menggunakan skenario pengujian di mana empat transaksi bersamaan, masing-masing diidentifikasi oleh nomor urutan transaksi (XSN), berjalan dalam database yang memiliki opsi ALLOW_SNAPSHOT_ISOLATION dan READ_COMMITTED_SNAPSHOT diatur ke AKTIF. Transaksi berikut berjalan:

  • XSN-57 adalah operasi pembaruan di bawah isolasi yang dapat diserialisasikan.

  • XSN-58 sama dengan XSN-57.

  • XSN-59 adalah operasi pilih di bawah isolasi rekam jepret

  • XSN-60 sama dengan XSN-59.

Kueri berikut dijalankan.

SELECT   
    transaction_id,  
    transaction_sequence_num,  
    commit_sequence_num,  
    is_snapshot session_id,  
    first_snapshot_sequence_num,  
    max_version_chain_traversed,  
    average_version_chain_traversed,  
    elapsed_time_seconds  
  FROM sys.dm_tran_active_snapshot_database_transactions;  

Berikut adalah hasil yang ditetapkan.

transaction_id  transaction_sequence_num  commit_sequence_num  
--------------  ------------------------  -------------------  
9295            57                        NULL  
9324            58                        NULL  
9387            59                        NULL  
9400            60                        NULL  
  
is_snapshot  session_id   first_snapshot_sequence_num  
-----------  -----------  ---------------------------  
0            54           0  
0            53           0  
1            52           57  
1            51           57  
  
max_version_chain_traversed  average_version_chain_traversed  
---------------------------  -------------------------------  
0                            0  
0                            0  
1                            1  
1                            1  
  
elapsed_time_seconds  
--------------------  
419  
397  
359  
333  

Informasi berikut mengevaluasi hasil dari sys.dm_tran_active_snapshot_database_transactions:

  • XSN-57: Karena transaksi ini tidak berjalan di bawah isolasi rekam jepret, is_snapshot nilai dan first_snapshot_sequence_num adalah 0. transaction_sequence_num menunjukkan bahwa nomor urutan transaksi telah ditetapkan ke transaksi ini, karena salah satu atau opsi database ALLOW_SNAPSHOT_ISOLATION atau READ_COMMITTED_SNAPSHOT AKTIF.

  • XSN-58: Transaksi ini tidak berjalan di bawah isolasi rekam jepret dan informasi yang sama untuk XSN-57 berlaku.

  • XSN-59: Ini adalah transaksi aktif pertama yang berjalan di bawah isolasi rekam jepret. Transaksi ini membaca data yang dilakukan sebelum XSN-57, seperti yang ditunjukkan oleh first_snapshot_sequence_num. Output untuk transaksi ini juga menunjukkan rantai versi maksimum yang dilalui untuk baris adalah 1 dan telah melintasi rata-rata 1 versi untuk setiap baris yang diakses. Ini berarti bahwa transaksi XSN-57, XSN-58, dan XSN-60 belum memodifikasi baris dan berkomitmen.

  • XSN-60: Ini adalah transaksi kedua yang berjalan di bawah isolasi rekam jepret. Output menunjukkan informasi yang sama dengan XSN-59.

Lihat Juga

ATUR TINGKAT ISOLASI TRANSAKSI (Transact-SQL)
Tampilan dan Fungsi Manajemen Dinamis (Transact-SQL)
Tampilan dan Fungsi Manajemen Dinamis Terkait Transaksi (Transact-SQL)