Bagikan melalui


Cara kerja operasi indeks online

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

Artikel ini menentukan struktur yang ada selama operasi indeks online dan menunjukkan aktivitas yang terkait dengan struktur ini.

Struktur indeks online

Untuk memungkinkan aktivitas pengguna bersamaan selama operasi bahasa definisi data indeks (DDL), struktur berikut digunakan selama operasi indeks online: indeks sumber dan yang sudah ada sebelumnya, target, dan untuk membangun kembali timbunan atau menghilangkan indeks berkluster secara online, indeks pemetaan sementara.

  • Indeks sumber dan yang sudah ada sebelumnya

    Sumbernya adalah tabel asli atau data indeks berkluster. Indeks yang sudah ada sebelumnya adalah indeks nonclustered yang terkait dengan struktur sumber. Misalnya, jika operasi indeks online membangun kembali indeks berkluster yang memiliki empat indeks noncluster terkait, sumbernya adalah indeks berkluster yang ada dan indeks yang sudah ada sebelumnya adalah indeks nonclustered.

    Indeks yang sudah ada sebelumnya tersedia untuk pengguna bersamaan untuk operasi pilih, sisipkan, perbarui, dan hapus. Ini termasuk sisipan massal (didukung tetapi tidak direkomendasikan selama operasi indeks online) dan pembaruan implisit oleh pemicu dan batasan integritas referensial. Semua indeks yang sudah ada sebelumnya tersedia untuk kueri. Ini berarti mereka mungkin dipilih oleh pengoptimal kueri dan, jika perlu, ditentukan dalam petunjuk indeks.

  • Target

    Target atau target adalah indeks baru (atau timbunan) atau sekumpulan indeks baru yang sedang dibuat atau dibangun kembali. Operasi penambahan, pembaruan, dan penghapusan oleh pengguna pada sumber diterapkan oleh Mesin Basis Data ke target selama operasi indeks. Misalnya, jika operasi indeks online membangun kembali indeks berkluster, targetnya adalah indeks berkluster yang dibangun kembali; Mesin Database tidak membangun kembali indeks nonclustered saat indeks berkluster dibangun kembali.

    Indeks target tidak digunakan sampai operasi indeks dilakukan. Secara internal, indeks ditandai sebagai tulis-saja.

  • Indeks pemetaan sementara

    Operasi indeks online yang membuat, menghilangkan, atau membangun kembali indeks berkluster juga memerlukan indeks pemetaan sementara. Indeks sementara ini digunakan oleh transaksi bersamaan untuk menentukan rekaman mana yang akan dihapus dalam indeks baru yang sedang dibangun saat baris dalam tabel sumber diperbarui atau dihapus. Indeks non-kluster ini dibuat dalam langkah yang sama dengan indeks terkluster baru (atau tumpukan) dan tidak memerlukan operasi pengurutan terpisah. Transaksi bersamaan mempertahankan indeks pemetaan sementara di semua operasi penyisipan, pembaruan, dan penghapusannya.

Aktivitas indeks online

Selama operasi indeks online, seperti membuat indeks berkluster pada tabel nonindeks (tumpukan), sumber dan target melalui tiga fase: persiapan, build, dan final.

Anda dapat menggunakan progress_report_online_index_operation event diperluas untuk memantau kemajuan operasi indeks daring.

Ilustrasi berikut menunjukkan proses untuk membuat indeks berkluster awal secara online. Objek sumber (timbunan) tidak memiliki indeks lain. Aktivitas struktur sumber dan target ditampilkan untuk setiap fase; operasi pengguna bersamaan SELECT, INSERT, UPDATE, dan DELETE juga ditampilkan. Fase persiapan, build, dan akhir ditunjukkan bersama dengan mode kunci yang digunakan di setiap fase.

Diagram memperlihatkan aktivitas yang dilakukan selama operasi indeks online.

Aktivitas struktur sumber

Tabel berikut mencantumkan aktivitas yang melibatkan struktur sumber selama setiap fase operasi indeks dan strategi penguncian yang sesuai.

Phase Aktivitas sumber Pengunci sumber
Preparation

Fase pendek
Persiapan metadata sistem untuk membuat struktur indeks kosong baru.

Rekam jepret tabel ditentukan. Artinya, penerapan versi baris digunakan untuk memberikan konsistensi baca tingkat transaksi.

Operasi penulisan pengguna bersamaan pada sumber diblokir untuk waktu yang singkat.

Tidak ada operasi DDL bersamaan yang diizinkan kecuali membuat beberapa indeks nonclustered.
Dibagikan (S) pada tabel1

Tujuan bersama (IS)

Penguncian objek modifikasi skema (Sch-M) dengan subjenis INDEX_OPERATION sumber daya 2
Build

Fase utama
Data dipindai, diurutkan, digabungkan, dan dimasukkan ke target menggunakan operasi pemuatan massal.

Pengguna bersamaan INSERT, , UPDATEDELETE, dan MERGE operasi diterapkan ke indeks yang sudah ada sebelumnya dan indeks baru apa pun yang sedang dibangun.
Tujuan bersama (IS)

Sch-Mkunci objek dengan subtipe sumber daya INDEX_OPERATION2
Final

Fase pendek
Semua transaksi tulis yang belum dikomitmen harus diselesaikan sebelum fase ini dimulai. Tergantung pada kunci yang diperoleh, semua transaksi baca atau tulis pengguna baru diblokir untuk waktu yang singkat sampai fase ini selesai.

Metadata sistem diperbarui untuk mengganti sumber dengan target.

Sumber dihilangkan jika diperlukan, misalnya setelah membangun kembali atau menghilangkan indeks berkluster.
Sch-Mkunci objek dengan subtipe sumber daya INDEX_OPERATION2

Dibagikan (S) pada tabel jika membuat indeks nonclustered.1

Sch-M jika ada struktur sumber (indeks atau tabel) yang dihilangkan. 1

1 Operasi indeks menunggu transaksi tulis yang belum diselesaikan selesai sebelum memperoleh kunci S atau kunci Sch-M pada tabel. Jika kueri yang berjalan lama sedang berlangsung, operasi indeks online menunggu hingga kueri selesai. Kecuali kunci berprioritas rendah digunakan, ini mungkin membentuk rantai pemblokiran.

2Sch-M Kunci objek dengan subjenis INDEX_OPERATION sumber daya mencegah eksekusi operasi bahasa definisi data bersamaan (DDL) pada sumber dan struktur yang sudah ada sebelumnya saat operasi indeks sedang berlangsung. Misalnya, kunci ini mencegah pembangunan ulang bersamaan dari dua indeks pada tabel yang sama. Meskipun ini adalah Sch-M kunci, itu tidak mencegah pernyataan manipulasi data.

Tabel sebelumnya memperlihatkan satu kunci bersama (S) yang diperoleh selama fase build operasi indeks online yang melibatkan satu indeks. Ketika indeks terkluster dan nonkluster dibangun, atau dibangun kembali, dalam satu operasi indeks online (misalnya, selama pembuatan indeks terkluster awal pada tabel yang berisi satu atau beberapa indeks nonkluster), dua kunci jangka pendek S diperoleh selama fase pembangunan, diikuti oleh kunci niat berbagi (IS) jangka panjang. Satu S kunci diperoleh terlebih dahulu untuk pembuatan indeks berkluster. Ketika indeks berkluster dibuat, kunci jangka S pendek kedua diperoleh untuk membuat indeks non-kluster. Setelah indeks non-cluster dibuat, kunci S dialihkan menjadi kunci IS hingga fase akhir operasi indeks online.

Untuk informasi selengkapnya tentang penggunaan kunci dan cara mengelolanya, lihat WAIT_AT_LOW_PRIORITY dengan operasi indeks online.

Aktivitas struktur target

Tabel berikut mencantumkan aktivitas yang melibatkan struktur target selama setiap fase operasi indeks dan strategi penguncian yang sesuai.

Phase Aktivitas target Kunci target
Preparation Indeks baru dibuat dan diatur ke tulis-saja. Tujuan bersama (IS)
Build Data disisipkan dari sumber.

Modifikasi pengguna (sisipan, pembaruan, penghapusan) yang diterapkan ke sumber juga diterapkan ke target.

Aktivitas ini transparan kepada pengguna.
Tujuan bersama (IS)
Final Metadata indeks diperbarui.

Indeks diatur ke status baca/tulis.
Dibagikan (S) atau modifikasi skema (Sch-M)

Target tidak diakses oleh kueri pengguna hingga operasi indeks selesai.

Setelah persiapan atau fase akhir selesai, rencana kueri yang disimpan dalam cache paket mungkin tidak valid.

Masa pakai kursor yang dideklarasikan pada tabel yang terlibat dalam operasi indeks online dibatasi oleh fase indeks online. Kursor pembaruan tidak valid pada setiap fase. Kursor baca-saja tidak valid hanya setelah fase akhir.