Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Manajemen Indeks Otomatis di Azure SQL Database

Pada bulan Februari saya menulis posting blog tentang Koreksi Rencana Otomatis di SQL Server, dan dalam posting ini saya ingin berbicara tentang Manajemen Indeks Otomatis, komponen kedua dari fitur Penyetelan Otomatis. Manajemen Indeks Otomatis hanya tersedia di Azure SQL Database, dan saat ini tidak tersedia di rilis SQL Server lokal berikutnya. Opsi ini diaktifkan secara independen dari Koreksi Rencana Otomatis, dan seperti namanya, opsi ini akan mengelola indeks di database Anda. Secara khusus, dapat membuat indeks yang hilang, dan dapat menghapus indeks yang tidak digunakan, dan yang duplikat. Mari kita lihat bagaimana ini terjadi.

Di Bawah Selimut
Manajemen Indeks Otomatis mengandalkan data untuk membuat keputusan. Untuk pembuatan indeks potensial, ia menggunakan informasi DMV indeks yang hilang dan melacaknya dari waktu ke waktu dan menggabungkan data tersebut dengan model internal untuk menentukan manfaat indeks. Itu juga menggunakan Penyimpanan Kueri untuk menentukan apakah indeks memberikan manfaat, sehingga harus diaktifkan untuk database, seperti halnya dengan Koreksi Rencana Otomatis. Berkenaan dengan penurunan indeks, data dari penggunaan indeks DMV (sys.dm_db_index_usage_stats) serta metadata indeks (misalnya jumlah kolom, tipe data kolom) digunakan.

Mengaktifkan Pengelolaan Indeks Otomatis
Seperti yang disebutkan, Query Store harus diaktifkan untuk database. Ini dapat dilakukan di SSMS, dengan T-SQL, dan dengan REST API untuk Azure SQL Database. Perhatikan bahwa Penyimpanan Kueri diaktifkan secara default untuk database di Azure, dan telah diaktifkan sejak Q4 2016.

USE [master];
GO
ALTER DATABASE [WideWorldImporters] 
	SET QUERY_STORE = ON;
GO
ALTER DATABASE [WideWorldImporters] 
	SET QUERY_STORE (OPERATION_MODE = READ_WRITE);
GO

Setelah Penyimpanan Kueri diaktifkan, Anda dapat menggunakan Portal Azure, T-SQL, atau EST API untuk mengaktifkan Manajemen Indeks Otomatis di Database Azure SQL (C# dan PowerShell sedang dalam pengerjaan).

ALTER DATABASE [WWI_PS] SET AUTOMATIC_TUNING (CREATE_INDEX = ON, DROP_INDEX = ON);
GO

Manajemen Indeks Otomatis akan diaktifkan secara default untuk database baru di Azure (https://azure.microsoft.com/en-us/blog/automatic-tuning-will-be-a-new-default/) dalam waktu dekat. Mulai Januari 2018, Microsoft memulai peluncuran untuk mengaktifkan Penyetelan Otomatis untuk Database Azure SQL yang belum mengaktifkannya, dengan pemberitahuan yang dikirim ke administrator sehingga opsi dapat dinonaktifkan jika diinginkan. Proses ini memakan waktu beberapa bulan, jadi jika Anda belum mendapatkan notifikasi, jangan panik!

Cara Kerjanya
Untuk pembuatan indeks, saat ini, ada jendela bergulir tujuh (7) hari* di mana data dilacak, dan minimal model membutuhkan sembilan (9) jam* data untuk merekomendasikan indeks, bersama dengan 12 jam* data di Query Store yang akan digunakan sebagai baseline. Jika ditentukan bahwa indeks akan memberikan manfaat yang signifikan, maka SQL Server akan membuat indeks.

*Nilai-nilai ini dapat berubah di masa mendatang, seiring berkembangnya model.

Catatan:saat ini model tidak menggabungkan rekomendasi. Artinya, jika beberapa indeks direkomendasikan untuk sebuah tabel, tetapi satu indeks dapat dibuat untuk mencakup semua opsi, itu dapat membuat satu indeks itu saat ini. Namun, model saat ini tidak cukup cerdas untuk menggabungkan indeks yang direkomendasikan dengan indeks yang sudah ada.

Setelah indeks dibuat, SQL Server memverifikasi bahwa itu memberikan manfaat menggunakan Query Store (dengan demikian harus diaktifkan untuk database). Ini memantau kinerja kueri apa pun yang menggunakan indeks baru dan membandingkan CPU kueri sebelum indeks ditambahkan, dan saat menggunakan indeks. Jika ada regresi dalam kinerja kueri sebagai akibat dari indeks, maka itu akan mengembalikan (menurunkan) indeks. SQL Server memantau kinerja kueri hingga tiga (3) hari, atau hingga 100% dari beban kerja yang relevan telah dianalisis. Setelah jangka waktu tersebut, jika indeks tidak menunjukkan tanda-tanda regresi, maka indeks tidak akan meninjau kinerjanya lagi.

Pahami bahwa jika Manajemen Indeks Otomatis membuat indeks, dan kemudian dua bulan kemudian beban kerja Anda berubah dan itu akan mendapat manfaat dari indeks yang sama yang secara otomatis dibuat sebelumnya tetapi dengan satu kolom tambahan, maka SQL Server akan, saat ini, membuat indeks baru. Saat ini tidak ada logika untuk mengubah indeks yang dibuat secara otomatis yang ada, tetapi fungsi tersebut ada di peta jalan untuk fitur tersebut.

Berkenaan dengan penurunan indeks, jika suatu indeks tidak mencari atau memindai selama 90 hari, tetapi memiliki biaya pemeliharaan (artinya ada penyisipan, pembaruan, atau penghapusan) maka indeks tersebut akan dihapus. Indeks duplikat juga akan dihapus, dengan asumsi mereka adalah duplikat yang tepat (dan skema digunakan untuk menentukan apakah indeks sama persis). Jika ada indeks duplikat dalam hal kolom kunci dan kolom yang disertakan (jika relevan) tetapi satu atau lebih dari indeks tersebut memiliki filter, maka indeks tersebut tidak benar-benar duplikat dan tidak ada indeks yang akan dihapus.

Sebagai referensi, ada dua kali lebih banyak rekomendasi DROP INDEX di Azure SQL Database daripada rekomendasi CREATE INDEX.

Ketika Anda mengaktifkan opsi DROP INDEX SQL Server akan menjatuhkan indeks yang dibuat pengguna. Saat Anda mengaktifkan opsi CREATE INDEX, SQL Server memiliki kemampuan untuk membuat indeks secara otomatis dan juga dapat menghapus indeks tersebut (tetapi tidak akan menghapus indeks yang dibuat pengguna). Terakhir, indeks dibuat dan dijatuhkan selama waktu beban kerja non-puncak, seperti yang ditentukan oleh DTU. Jika beban kerja di atas 80% DTU, maka SQL Server akan menunggu untuk membuat atau menjatuhkan indeks hingga beban sistem berkurang.

Apakah saya benar-benar akan membiarkan SQL Server memiliki kendali?
Mungkin. Rekomendasi saya tentang fitur ini, pada awalnya, memerlukan pendekatan “percaya tetapi verifikasi”.

Seperti Koreksi Rencana Otomatis, Manajemen Indeks Otomatis telah dikembangkan dengan sejumlah besar data yang diambil dari hampir dua juta Database Azure SQL. Fitur Manajemen Indeks Otomatis telah tersedia di Azure SQL Database sejak Q1 tahun 2016, sebagai bagian dari Penasihat Indeks.

Algoritme yang digunakan oleh fitur telah berevolusi dan terus berkembang seiring waktu, karena semakin banyak basis data yang menggunakannya dan semakin banyak data yang diambil dan dianalisis. Namun, ada beberapa batasan saat ini.

  1. Rekomendasi indeks tidak dievaluasi terhadap indeks yang ada, sehingga konsolidasi indeks antara indeks baru dan yang ada saat ini tidak tersedia.
  2. Jika indeks akan memberikan manfaat untuk SELECT, overhead modifikasi karena INSERT, UPDATE, dan DELETE tidak diketahui sebelum dibuat. SQL Server memonitor overhead ini selama proses verifikasi, setelah indeks diimplementasikan.

Ada manfaat untuk Manajemen Indeks Otomatis yang layak disebutkan:

  1. Bagi siapa saja yang harus mengelola database SQL Server, tetapi bukan DBA, rekomendasi indeks bisa sangat membantu.
  2. Rekomendasi indeks ditangkap di sys.dm_db_tuning_recommendations DMV meskipun opsi indeks CREATE dan DROP tidak diaktifkan. Oleh karena itu, jika Anda tidak yakin tentang perubahan yang mungkin dibuat SQL Server, Anda dapat meninjau apa yang ditangkap di DMV dan kemudian membuat keputusan untuk menerapkan rekomendasi secara manual.

    Catatan:Jika Anda menerapkan rekomendasi secara manual, SQL Server tidak melakukan validasi apa pun. Jika Anda menerapkan rekomendasi melalui Portal (menggunakan tombol Terapkan) atau REST API, maka itu akan dieksekusi seolah-olah itu adalah tindakan otomatis, dan validasi akan dilakukan (dan indeks dapat dikembalikan secara otomatis jika ada regresi).

  3. Fitur ini terus ditingkatkan. Seperti yang telah saya katakan sebelumnya, Microsoft tidak mencoba untuk membuat kode DBA atau pengembang kehilangan pekerjaan, itu mencoba untuk mengatasi buah menggantung rendah sehingga Anda memiliki lebih banyak waktu untuk tugas dan proyek yang tidak dapat diotomatisasi secara cerdas.

    Ringkasan
    Jika Anda belum siap untuk menyerahkan kendali manajemen indeks, saya mengerti. Tetapi jika Anda memiliki Database Azure SQL minimal, Anda harus memeriksa sys.dm_db_tuning_recommendations DMV secara teratur untuk melihat apa yang direkomendasikan SQL Server, dan membandingkannya dengan data yang mungkin diambil oleh alat pemantauan pihak ketiga Anda tentang penggunaan indeks. Lagi pula, kapan terakhir kali Anda melakukan tinjauan indeks yang lengkap dan menyeluruh untuk memahami apa yang hilang, apa yang sebenarnya digunakan, dan apa yang hanya menghasilkan overhead dalam database?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kompleksitas NULL – Bagian 4, Batasan unik standar tidak ada

  2. “Apakah Ini Rahasia? Apakah Aman?” Menangani Data Sensitif dalam Pemodelan Data Anda

  3. Menggunakan Wizard Reorg Offline

  4. Tunggu Statistik dan Toko Kueri

  5. Amankan Cluster Mongo Anda dengan SSL