Kelas Peristiwa Peringatan Hash

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Kelas peristiwa Peringatan Hash dapat digunakan untuk memantau ketika rekursi hash atau penghentian hash (hash bailout) telah terjadi selama operasi hashing.

Rekursi hash terjadi ketika input build tidak sesuai dengan memori yang tersedia, menghasilkan pemisahan input menjadi beberapa partisi yang diproses secara terpisah. Jika salah satu partisi ini masih tidak cocok dengan memori yang tersedia, partisi tersebut dibagi menjadi subpartisi, yang juga diproses secara terpisah. Proses pemisahan ini berlanjut sampai setiap partisi sesuai dengan memori yang tersedia atau sampai tingkat rekursi maksimum tercapai (ditampilkan di kolom data IntegerData).

Bailout hash terjadi ketika operasi hashing mencapai tingkat rekursi maksimumnya dan bergeser ke rencana alternatif untuk memproses data yang dipartisi yang tersisa. Bailout hash biasanya terjadi karena data condong.

Rekursi hash dan talangan hash menyebabkan penurunan performa di server Anda. Untuk menghilangkan atau mengurangi frekuensi rekursi hash dan talangan, lakukan salah satu hal berikut:

  • Pastikan statistik ada pada kolom yang sedang digabungkan atau dikelompokkan.

  • Jika statistik ada pada kolom, perbarui.

  • Gunakan jenis gabungan yang berbeda. Misalnya, gunakan gabungan MERGE atau LOOP, jika sesuai.

  • Tingkatkan memori yang tersedia di komputer. Rekursi hash atau bailout terjadi ketika tidak ada cukup memori untuk memproses kueri di tempat dan mereka perlu meluap ke disk.

Membuat atau memperbarui statistik pada kolom yang terlibat dalam gabungan adalah cara paling efektif untuk mengurangi jumlah rekursi hash atau bailout yang terjadi.

Catatan

Istilah grace hash join dan hash join rekursif juga digunakan untuk menggambarkan bailout hash.

Penting

Untuk menentukan di mana peristiwa Peringatan Hash terjadi ketika 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 Peringatan Hash sesuai dengan ID Node di Showplans sehingga Anda dapat menentukan operator, atau operasi mana, yang menyebabkan kesalahan.

Kolom Data Kelas Peristiwa Peringatan Hash

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 dengan 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 = 55. 27 Tidak
EventSequence int Urutan peristiwa tertentu dalam permintaan. 51 Tidak
EventSubClass int Jenis subkelas peristiwa.

0=Rekursi

1=Bailout
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
IntegerData int Tingkat rekursi (hanya rekursi hash). 25 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 tampilan katalog sys.server_principals. 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 node dari akar tim hash yang terlibat dalam partisi ulang. 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
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)
Gabung