Kelas Peristiwa Tumpahan Exchange
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
Kelas peristiwa Tumpahan Exchange menunjukkan bahwa buffer komunikasi dalam rencana kueri paralel telah ditulis sementara ke database tempdb . Ini jarang terjadi dan hanya ketika rencana kueri memiliki beberapa pemindaian rentang.
Biasanya, kueri Transact-SQL yang menghasilkan pemindaian rentang tersebut memiliki banyak operator BETWEEN, yang masing-masing memilih rentang baris dari tabel atau indeks. Atau, Anda dapat memperoleh beberapa rentang menggunakan ekspresi seperti (T.a > 10 AND T.a < 20) OR (T.a > 100 AND T.a < 120). Selain itu, rencana kueri harus mengharuskan rentang ini dipindai secara berurutan baik karena ada klausa ORDER BY pada T.a, atau karena iterator dalam rencana mengharuskan rentang tersebut menggunakan tuple dalam urutan yang diurutkan.
Ketika rencana kueri untuk kueri tersebut memiliki beberapa operator Paralelisme , buffer komunikasi memori yang digunakan oleh operator Paralelisme menjadi penuh, dan situasi dapat muncul di mana kemajuan eksekusi kueri berhenti. Dalam situasi ini, salah satu operator Paralelisme menulis buffer output-nya ke tempdb (operasi yang disebut tumpahan pertukaran) sehingga dapat mengonsumsi baris dari beberapa buffer inputnya. Akhirnya, baris yang tumpah dikembalikan kepada konsumen ketika konsumen siap untuk mengonsumsinya.
Sangat jarang, beberapa tumpahan pertukaran dapat terjadi dalam rencana eksekusi yang sama, menyebabkan kueri dijalankan secara perlahan. Jika Anda melihat lebih dari lima tumpahan dalam eksekusi paket kueri yang sama, hubungi profesional dukungan Anda.
Tumpahan pertukaran terkadang bersifat sementara dan mungkin hilang saat distribusi data berubah.
Ada beberapa cara untuk menghindari peristiwa tumpahan pertukaran:
Hilangkan klausul ORDER BY jika Anda tidak memerlukan tataan hasil untuk diurutkan.
Jika ORDER BY diperlukan, hilangkan kolom yang berpartisipasi dalam beberapa pemindaian rentang (T.a dalam contoh di atas) dari klausa ORDER BY.
Dengan menggunakan petunjuk indeks, paksa pengoptimal untuk menggunakan jalur akses yang berbeda pada tabel yang dimaksud.
Tulis ulang kueri untuk menghasilkan rencana eksekusi kueri yang berbeda.
Paksa eksekusi serial kueri dengan menambahkan opsi MAXDOP = 1 ke akhir operasi kueri atau indeks. Untuk informasi selengkapnya, lihat Mengonfigurasi tingkat maksimum Opsi Konfigurasi Server paralelisme dan Mengonfigurasi Operasi Indeks Paralel.
Penting
Untuk menentukan di mana peristiwa Tumpahan Exchange terjadi saat pengoptimal kueri menghasilkan rencana eksekusi, Anda juga harus mengumpulkan kelas peristiwa Showplan dalam pelacakan. Anda dapat memilih salah satu kelas acara Showplan kecuali kelas peristiwa Showplan Text dan Showplan Text (Unencoded), yang tidak mengembalikan ID Node. ID simpul di Showplans mengidentifikasi setiap operasi yang dilakukan pengoptimal kueri saat menghasilkan rencana eksekusi kueri. Operasi ini disebut operator dan setiap operator dalam Showplan memiliki ID Node. Kolom ObjectID untuk peristiwa Tumpahan Exchange sesuai dengan ID Simpul di Showplans sehingga Anda dapat menentukan operator, atau operasi mana, yang menyebabkan kesalahan.
Kolom Data Kelas Peristiwa Tumpahan Exchange
Nama kolom data | Jenis data | Deskripsi | ID Kolom | Dapat difilter |
---|---|---|---|---|
ApplicationName | nvarchar | Nama aplikasi klien yang membuat koneksi ke instans SQL Server. Kolom ini diisi dengan nilai yang diteruskan oleh aplikasi daripada nama program yang ditampilkan. | 10 | Ya |
ClientProcessID | int | ID yang ditetapkan oleh komputer host ke proses di mana aplikasi klien berjalan. Kolom data ini diisi jika klien menyediakan ID proses klien. | 9 | Ya |
DatabaseID | int | ID database yang ditentukan oleh pernyataan database USE atau database default jika tidak ada pernyataan database USE yang dikeluarkan untuk instans tertentu. SQL Server Profiler menampilkan nama database jika kolom data ServerName diambil dalam jejak dan server tersedia. Tentukan nilai untuk database dengan menggunakan fungsi DB_ID. | 3 | Ya |
DatabaseName | nvarchar | Nama database tempat pernyataan pengguna berjalan. | 35 | Ya |
EventClass | int | Jenis peristiwa = 127. | 27 | No |
EventSequence | int | Urutan peristiwa tertentu dalam permintaan. | 51 | No |
EventSubClass | int | Jenis subkelas peristiwa. 1=Tumpahan dimulai 2=Akhir tumpahan |
21 | Ya |
GroupID | int | ID grup beban kerja tempat peristiwa SQL Trace diaktifkan. | 66 | Ya |
HostName | nvarchar | Nama komputer tempat klien berjalan. Kolom data ini diisi jika klien menyediakan nama host. Untuk menentukan nama host, gunakan fungsi HOST_NAME. | 8 | Ya |
IsSystem | int | Menunjukkan apakah peristiwa terjadi pada proses sistem atau proses pengguna. 1 = sistem, 0 = pengguna. | 60 | Ya |
LoginName | nvarchar | Nama login pengguna (baik login keamanan SQL Server atau info masuk masuk Windows dalam bentuk DOMAIN\username>).<>< | 11 | Ya |
LoginSid | gambar | Nomor identifikasi keamanan (SID) pengguna yang masuk. Anda dapat menemukan informasi ini dalam tabel syslogins database master. Setiap SID unik untuk setiap login di server. | 41 | Ya |
NTDomainName | nvarchar | Domain Windows tempat pengguna berada. | 7 | Ya |
NTUserName | nvarchar | Nama pengguna Windows. | 6 | Ya |
ObjectID | int | ID objek yang ditetapkan sistem. Sesuai dengan ID Node di Showplans. | 22 | Ya |
RequestID | int | ID permintaan yang berisi pernyataan. | 49 | Ya |
ServerName | nvarchar | Nama instans SQL Server yang sedang dilacak. | 26 | No |
SessionLoginName | nvarchar | Nama masuk pengguna yang berasal dari sesi. Misalnya, jika Anda terhubung ke SQL Server menggunakan Login1 dan menjalankan pernyataan sebagai Login2, SessionLoginName menunjukkan Login1 dan LoginName menampilkan Login2. Kolom ini menampilkan login SQL Server dan Windows. | 64 | Ya |
SPID | int | ID sesi tempat peristiwa terjadi. | 12 | Ya |
StartTime | datetime | Waktu di mana peristiwa dimulai, jika tersedia. | 14 | Ya |
TransactionID | bigint | ID transaksi yang ditetapkan sistem. | 4 | Ya |
XactSequence | bigint | Token yang menjelaskan transaksi saat ini. | 50 | Ya |
Lihat Juga
sp_trace_setevent (T-SQL)
Atur Opsi Indeks
ALTER INDEX (Transact-SQL)