sys.dm_tran_active_snapshot_database_transactions (T-SQL)
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform 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 danfirst_snapshot_sequence_num
adalah0
.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 adalah1
dan telah melintasi rata-rata1
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)