Bagikan melalui


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)