Bagikan melalui


Cara Kerja Operasi Indeks Online

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Topik ini mendefinisikan 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) dan pembaruan implisit oleh pemicu dan batasan integritas referensial. Semua indeks yang sudah ada sebelumnya tersedia untuk kueri dan pencarian. Ini berarti mereka dapat 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 penyisipan, pembaruan, dan penghapusan pengguna ke sumber diterapkan oleh Mesin Database SQL Server 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 dicari saat memproses pernyataan SELECT hingga 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 yang mendasar diperbarui atau dihapus. Indeks non-kluster ini dibuat dalam langkah yang sama dengan indeks terkluster baru (atau timbunan) dan tidak memerlukan operasi pengurutan terpisah. Transaksi bersamaan juga mempertahankan indeks pemetaan sementara di semua operasi penyisipan, pembaruan, dan penghapusannya.

Aktivitas Indeks Online

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

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 pilih, sisipkan, perbarui, dan hapus pengguna bersamaan juga ditampilkan. Fase persiapan, build, dan akhir ditunjukkan bersama dengan mode kunci yang digunakan di setiap fase.

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.

Fase Aktivitas sumber Kunci sumber
Persiapan

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.
S (Bersama) pada tabel*

IS (Niat Bersama)

INDEX_BUILD_INTERNAL_RESOURCE**
Build

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

Operasi pilih, sisipkan, perbarui, dan hapus pengguna bersamaan diterapkan ke indeks yang sudah ada sebelumnya dan indeks baru apa pun yang sedang dibangun.
IS

INDEX_BUILD_INTERNAL_RESOURCE**
Final

Fase pendek
Semua transaksi pembaruan yang tidak dilakukan harus diselesaikan sebelum fase ini dimulai. Tergantung pada kunci yang diperoleh, semua transaksi baca atau tulis pengguna baru diblokir untuk jangka waktu singkat hingga fase ini selesai.

Metadata sistem diperbarui untuk mengganti sumber dengan target.

Sumber dihilangkan jika diperlukan. Misalnya, setelah membangun kembali atau menghilangkan indeks berkluster.
INDEX_BUILD_INTERNAL_RESOURCE**

S pada tabel jika membuat indeks nonclustered.*

SCH-M (Modifikasi Skema) jika ada struktur sumber (indeks atau tabel) yang dihilangkan.*

* Operasi indeks menunggu transaksi pembaruan yang tidak dilakukan 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.

** Kunci sumber daya INDEX_BUILD_INTERNAL_RESOURCE 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 kunci sumber daya ini dikaitkan dengan kunci Sch-M, kunci sumber daya ini 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 berkluster dan non-kluster dibangun, atau dibangun kembali, dalam satu operasi indeks online (misalnya, selama pembuatan indeks berkluster awal pada tabel yang berisi satu atau beberapa indeks non-kluster) dua kunci S jangka pendek diperoleh selama fase build diikuti oleh kunci Intent Shared (IS) jangka panjang. Satu kunci S diperoleh terlebih dahulu untuk pembuatan indeks berkluster dan saat membuat indeks berkluster selesai, kunci S jangka pendek kedua diperoleh untuk membuat indeks non-kluster. Setelah indeks nonkluster dibuat, kunci S diturunkan ke kunci IS hingga fase akhir operasi indeks online.

Untuk informasi selengkapnya tentang cara kunci digunakan dan bagaimana Anda dapat mengelolanya, lihat Argumen.

Aktivitas Struktur Target

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

Fase Aktivitas target Kunci target
Persiapan Indeks baru dibuat dan diatur ke tulis-saja. IS
Build Data disisipkan dari sumber.

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

Aktivitas ini transparan kepada pengguna.
IS
Final Metadata indeks diperbarui.

Indeks diatur ke status baca/tulis.
S

or

SCH-M

Target tidak diakses oleh pernyataan SELECT yang dikeluarkan oleh pengguna hingga operasi indeks selesai.

Setelah persiapan dan fase akhir selesai, kueri dan rencana pembaruan yang disimpan dalam cache prosedur tidak valid. Kueri berikutnya menggunakan indeks baru.

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.

Melakukan Operasi Indeks Online

Panduan untuk Operasi Indeks Online

Langkah berikutnya

Opsi indeks ALTER TABLE