Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Database SQL di Microsoft Fabric
Saat Anda melakukan operasi indeks online, panduan berikut berlaku:
Indeks berkluster harus dibuat, dibangun kembali, atau dihilangkan secara offline saat tabel yang mendasar berisi jenis data objek besar (LOB) berikut: gambar, ntext, dan teks.
Indeks nonunique nonclustered dapat dibuat secara online ketika tabel memiliki kolom menggunakan jenis data LOB tetapi tidak satupun dari kolom tersebut yang digunakan dalam pendefinisian indeks baik sebagai kunci maupun sebagai kolom yang disertakan.
Indeks pada tabel temp lokal tidak dapat dibuat, dibangun kembali, atau dihilangkan secara online. Pembatasan ini tidak berlaku bagi indeks pada tabel temp global.
Anda dapat memulai operasi indeks online sebagai operasi yang dapat dilanjutkan dengan menggunakan klausa
RESUMABLECREATE INDEX atau ALTER INDEX. Operasi indeks yang dapat dilanjutkan kembali dapat dimulai ulang setelah kegagalan tak terduga, kegagalan database, atau perintahALTER INDEX PAUSEdan melanjutkan dari titik di mana operasi tersebut terhenti.
Note
Operasi indeks online tidak tersedia di setiap edisi Microsoft SQL Server. Untuk daftar fitur yang didukung oleh edisi SQL Server, lihat Edisi dan fitur yang didukung SQL Server 2022.
Tabel berikut menunjukkan operasi indeks yang dapat dilakukan secara online, indeks yang dikecualikan dari operasi online ini, dan pembatasan indeks yang dapat dilanjutkan. Pembatasan tambahan juga disertakan.
| Operasi indeks online | Indeks yang dikecualikan | Pembatasan lain |
|---|---|---|
ALTER INDEX REBUILD |
Indeks terkluster yang dinonaktifkan atau tampilan terindeks yang dinonaktifkan Indeks XML Indeks pada tabel sementara lokal |
Menentukan kata kunci ALL dapat menyebabkan operasi gagal ketika tabel berisi indeks yang dikecualikan.Pembatasan tambahan untuk membangun kembali indeks yang dinonaktifkan berlaku. Untuk informasi selengkapnya, lihat Menonaktifkan indeks dan batasan. |
CREATE INDEX |
Indeks XML Indeks kluster unik awal pada tampilan Indeks pada tabel sementara lokal |
|
CREATE INDEX WITH DROP_EXISTING |
Indeks terkluster yang dinonaktifkan atau tampilan terindeks yang dinonaktifkan Indeks pada tabel sementara lokal Indeks XML |
|
DROP INDEX |
Indeks yang dinonaktifkan Indeks XML Indeks tidak terkelompok Indeks pada tabel sementara lokal |
Beberapa indeks tidak dapat ditentukan dalam satu pernyataan. |
ALTER TABLE ADD CONSTRAINT (PRIMARY KEY atau UNIQUE) |
Indeks pada tabel sementara lokal Indeks dalam kluster |
Hanya satu anak kalimat yang diizinkan pada suatu waktu. Misalnya, Anda tidak dapat menambahkan dan menghapus PRIMARY KEY atau UNIQUE batasan dalam pernyataan ALTER TABLE yang sama. |
ALTER TABLE DROP CONSTRAINT (PRIMARY KEY atau UNIQUE) |
Indeks dalam kluster |
Tabel yang mendasar tidak dapat dimodifikasi, dipotong, atau dihilangkan saat operasi indeks online sedang berlangsung.
Pengaturan opsi online (ON atau OFF) yang ditentukan saat Anda membuat atau menghilangkan indeks berkluster diterapkan ke indeks non-kluster apa pun yang harus dibangun kembali. Misalnya, jika indeks berkluster dibangun secara online dengan menggunakan CREATE INDEX WITH DROP_EXISTING, ONLINE = ON, semua indeks non-kluster terkait juga dibuat ulang secara online.
Saat Anda membuat atau membangun ulang indeks UNIQUE secara online, proses pembangunan indeks dan transaksi pengguna yang berlangsung bersamaan mungkin mencoba memasukkan kunci yang sama, yang dapat melanggar sifat unik. Jika baris yang dimasukkan oleh pengguna dimasukkan ke dalam indeks baru (target) sebelum baris asli dari tabel sumber dipindahkan ke indeks baru, operasi indeks online gagal.
Meskipun tidak umum, operasi indeks online dapat menyebabkan kebuntuan saat berinteraksi dengan pembaruan database karena aktivitas pengguna atau aplikasi. Dalam kasus yang jarang terjadi ini, aktivitas pengguna atau aplikasi dipilih sebagai korban kebuntuan.
Anda dapat melakukan operasi DDL indeks online bersamaan pada tabel atau tampilan yang sama hanya saat Anda membuat beberapa indeks nonclustered baru, atau menyusun ulang indeks nonclustered. Semua operasi indeks online lainnya yang dilakukan pada saat yang sama gagal. Misalnya, Anda tidak dapat membuat indeks baru secara online saat membangun kembali indeks yang ada secara online pada tabel yang sama.
Operasi online tidak dapat dilakukan ketika indeks berisi kolom jenis objek besar, dan transaksi yang sama melakukan modifikasi data sebelum operasi indeks online dimulai. Untuk mengatasi masalah ini, pindahkan operasi indeks online di luar transaksi, atau pindahkan sebelum modifikasi data dalam transaksi yang sama.
Pertimbangan ruang disk
Operasi indeks online memerlukan lebih banyak ruang disk daripada operasi indeks offline.
Selama pembuatan indeks dan operasi membangun ulang indeks, ruang tambahan diperlukan untuk indeks yang sedang dibangun (atau dibangun ulang). Biasanya, ruang tambahan ini sama dengan ruang saat ini yang ditempati oleh indeks, tetapi bisa lebih besar atau lebih kecil tergantung pada kompresi yang digunakan dalam indeks saat ini atau pembangunan ulang.
Selain itu, ruang disk diperlukan untuk indeks pemetaan sementara. Indeks sementara ini digunakan dalam operasi indeks online yang membuat, membangun ulang, atau menjatuhkan indeks berkluster.
Menghilangkan indeks berkluster secara online membutuhkan ruang sebanyak membuat (atau membangun ulang) indeks berkluster secara online.
Untuk informasi selengkapnya, lihat persyaratan ruang disk untuk operasi DDL indeks.
Pertimbangan performa
Meskipun operasi indeks online mengizinkan aktivitas pembaruan pengguna bersamaan, operasi indeks dapat memakan waktu lebih lama jika aktivitas pembaruan berat. Biasanya, operasi indeks online lebih lambat dari operasi indeks offline yang setara, terlepas dari tingkat aktivitas pembaruan bersamaan.
Karena struktur sumber dan target dipertahankan selama operasi indeks online, penggunaan sumber daya untuk menyisipkan, memperbarui, dan menghapus transaksi ditingkatkan, berpotensi dua kali lipat. Ini dapat menyebabkan penurunan performa dan penggunaan sumber daya yang lebih besar, terutama waktu CPU, selama operasi indeks. Operasi indeks online dicatat sepenuhnya.
Meskipun kami merekomendasikan operasi online, Anda harus mengevaluasi lingkungan dan persyaratan khusus Anda. Mungkin optimal untuk menjalankan operasi indeks secara offline. Dengan demikian, akses pengguna ke data dibatasi selama operasi, tetapi operasi selesai lebih cepat dan menggunakan lebih sedikit sumber daya.
Pada komputer multiprosesor yang menjalankan SQL Server 2016 (13.x) dan versi yang lebih baru, operasi indeks dapat menggunakan paralelisme untuk melakukan operasi pemindaian dan pengurutan yang terkait dengan pernyataan indeks. Anda dapat menggunakan opsi indeks MAXDOP untuk mengontrol tingkat paralelisme operasi indeks online. Dengan cara ini, Anda dapat menyeimbangkan sumber daya yang digunakan oleh operasi indeks dengan sumber daya pengguna bersamaan. Untuk informasi selengkapnya, lihat Mengonfigurasi operasi indeks paralel. Untuk informasi selengkapnya tentang edisi SQL Server yang mendukung operasi indeks paralel, lihat Edisi dan fitur yang didukung SQL Server 2022.
Karena kunci bersama (S) atau kunci modifikasi skema (Sch-M) ditahan pada fase akhir operasi indeks, berhati-hatilah saat Anda menjalankan operasi indeks online di dalam transaksi pengguna eksplisit, seperti blok BEGIN TRANSACTION ... COMMIT. Melakukan ini menyebabkan kunci ditahan hingga akhir transaksi, berpotensi memblokir beban kerja lain.
Jika kunci halaman indeks dinonaktifkan menggunakan ALLOW_PAGE_LOCKS = OFF, pembangunan ulang indeks online dapat meningkatkan fragmentasi indeks saat dijalankan dengan MAXDOP lebih besar dari 1. Untuk informasi selengkapnya, lihat Cara Kerjanya: Pembangunan Ulang Indeks Online - Dapat Menyebabkan Peningkatan Fragmentasi.
Pertimbangan log transaksi
Operasi indeks skala besar yang dilakukan secara offline atau online dapat menghasilkan log transaksi dalam jumlah besar. Ini karena operasi pembangunan ulang indeks offline dan online sepenuhnya dicatat. Untuk memastikan bahwa operasi indeks dapat digulung balik, log transaksi tidak dapat dipotong sampai operasi indeks selesai; namun, log dapat dicadangkan selama operasi indeks.
Oleh karena itu, log transaksi harus memiliki ruang yang cukup untuk menyimpan transaksi operasi indeks dan transaksi pengguna bersamaan selama operasi indeks. Untuk informasi selengkapnya, lihat Ruang disk log transaksi untuk operasi indeks.
Operasi indeks online tidak menyebabkan pertumbuhan log transaksi yang tinggi jika pemulihan database dipercepat (ADR) diaktifkan.
Pertimbangan penyimpanan versi persisten
Jika ADR diaktifkan, membuat, atau membangun kembali indeks besar secara online dapat secara substansial meningkatkan ukuran penyimpanan versi persisten (PVS) saat operasi indeks sedang berlangsung. Pastikan bahwa database memiliki ruang kosong yang memadai agar PVS tumbuh. Untuk informasi selengkapnya, lihat Memantau dan memecahkan masalah pemulihan database yang dipercepat.
Pertimbangan indeks berkelanjutan
Opsi indeks RESUMABLE untuk CREATE INDEX dan ALTER INDEX berlaku untuk SQL Server (ALTER INDEX dimulai dengan SQL Server 2017 (14.x), dan CREATE INDEX dimulai dengan SQL Server 2019 (15.x)), Azure SQL Database, dan Azure SQL Managed Instance. Untuk informasi selengkapnya, lihat CREATE INDEX dan ALTER INDEX.
Untuk menggunakan opsi RESUMABLE, Anda juga harus menggunakan opsi ONLINE. Saat Anda melakukan pembuatan atau pembangunan ulang indeks yang dapat dilanjutkan, panduan berikut berlaku:
Anda memiliki kontrol yang lebih baik atas pengelolaan, perencanaan, dan perluasan jendela pemeliharaan indeks. Anda dapat menjeda dan memulai ulang operasi pembuatan atau pembangunan ulang indeks beberapa kali agar sesuai dengan jendela pemeliharaan Anda.
Anda dapat mengatasi kegagalan pembuatan atau pembaruan kembali indeks (seperti failover database atau kehabisan ruang disk) tanpa perlu memulai operasi indeks dari awal lagi.
Ketika operasi indeks dijeda, indeks asli dan yang baru dibuat memerlukan ruang disk dan perlu diperbarui selama operasi DML.
Opsi
SORT_IN_TEMPDB = ONtidak didukung.Indeks yang dinonaktifkan tidak didukung.
Tip
Operasi indeks yang dapat dilanjutkan tidak memerlukan transaksi besar, memungkinkan pemotongan log yang sering selama operasi ini dan menghindari pertumbuhan log yang besar. Data yang diperlukan untuk melanjutkan dan menyelesaikan operasi indeks disimpan dalam file data database.
Umumnya, tidak ada perbedaan performa antara operasi indeks online yang dapat diulang dan yang tidak dapat diulang. Untuk CREATE INDEXyang dapat dilanjutkan, ada overhead konstan yang dapat menyebabkan operasi yang jauh lebih lambat untuk tabel yang lebih kecil.
Ketika operasi indeks yang dapat dilanjutkan dijeda:
- Untuk sebagian besar beban kerja baca, penurunan performa tidak signifikan.
- Untuk beban kerja dengan banyak pembaruan, Anda mungkin mengalami penurunan throughput tergantung pada spesifikasi beban kerja.
Umumnya, tidak ada perbedaan dalam kualitas defragmentasi antara pembuatan atau pembangunan kembali indeks online yang dapat dilanjutkan dan tidak dapat dilanjutkan.
Saat operasi indeks online dijeda, setiap transaksi yang memerlukan kunci eksklusif tingkat tabel (X) pada tabel yang berisi indeks yang dijeda gagal. Misalnya, hal ini dapat terjadi pada operasi INSERT ... WITH (TABLOCK). Dalam hal ini, Anda mendapatkan kesalahan 10637:
Cannot perform this operation on '<object name>' with ID (<object ID>) as one or more indexes are currently in resumable index rebuild state. Please refer to sys.index_resumable_operations for more details.
Untuk mengatasi kesalahan 10637, hapus TABLOCK petunjuk dari transaksi Anda, atau batalkan jeda operasi indeks dan tunggu hingga selesai sebelum mencoba transaksi Anda lagi.
Opsi bawaan online
Anda dapat mengatur operasi indeks online dan dapat dilanjutkan sebagai opsi default di tingkat database dengan mengatur konfigurasi cakupan database ELEVATE_ONLINE atau ELEVATE_RESUMABLE. Dengan opsi default ini, Anda dapat menghindari memulai operasi indeks offline secara tidak sengaja yang membuat tabel atau indeks tidak dapat diakses saat sedang berjalan. Kedua opsi menyebabkan mesin database secara otomatis meningkatkan operasi indeks tertentu ke eksekusi online atau yang dapat dilanjutkan.
Anda dapat mengatur salah satu opsi sebagai FAIL_UNSUPPORTED, WHEN_SUPPORTED, atau OFF. Anda dapat mengatur nilai yang berbeda untuk ELEVATE_ONLINE dan ELEVATE_RESUMABLE. Untuk informasi selengkapnya, lihat MENGUBAH KONFIGURASI CAKUPAN DATABASE.
Baik ELEVATE_ONLINE dan ELEVATE_RESUMABLE hanya berlaku untuk pernyataan DDL yang masing-masing mendukung sintaks online dan dapat diulang. Misalnya, jika Anda mencoba membuat indeks XML dengan ELEVATE_ONLINE = FAIL_UNSUPPORTED, operasi berjalan offline karena indeks XML tidak mendukung opsi ONLINE. Opsi hanya memengaruhi pernyataan DDL yang dikirimkan tanpa menentukan opsi ONLINE atau RESUMABLE. Misalnya, dengan mengirimkan pernyataan dengan ONLINE = OFF atau RESUMABLE = OFF, pengguna dapat menimpa pengaturan FAIL_UNSUPPORTED dan menjalankan pernyataan secara offline dan/atau tidak dapat dilanjutkan.
Note
ELEVATE_ONLINE dan ELEVATE_RESUMABLE tidak berlaku untuk operasi indeks XML.