Kelas Peristiwa Peringatan Hash
Berlaku untuk: SQL ServerAzure SQL Database Azure 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 | No |
EventSequence | int | Urutan peristiwa tertentu dalam permintaan. | 51 | No |
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 |