SQL Server'da neden dizinleri yeniden oluşturmamız ve yeniden yapılandırmamız gerekiyor?


28

İnterneti aradıktan sonra nedenini bulamadım

  1. SQL Server'da neden dizinleri yeniden oluşturup yeniden düzenlememiz gerekiyor?

  2. Yeniden inşa edip yeniden düzenlediğimizde şirket içinde ne olur?

Bir sitede bir makale diyor ki:

Dizin parçalanması% 40'tan büyük olduğunda dizin yeniden oluşturulmalıdır. İndeks parçalanması% 10 ila% 40 arasında olduğunda indeks yeniden düzenlenmelidir. Endeks oluşturma işlemi daha fazla CPU kullanır ve veritabanı kaynaklarını kilitler. SQL Server geliştirme sürümü ve Enterprise sürümü, Index yeniden oluşturulduğunda açılabilen ONLINE seçeneğine sahiptir. ÇEVRİMİÇİ seçeneği, yeniden yapılanma sırasında endeksi mevcut tutacak.

Bunu anlayamadım, bunu WHENyapmak için söylese de , WHYindeksleri yeniden inşa etmemiz ve düzenlememiz gerektiğini bilmek istiyorum.


1
Bu neden ile ilgili bir soru ve işte ne zaman ile ilgili soru .
Nick Chammas, 8

Yanıtlar:


28

Eklemeler güncellemeleri ve silme işlemlerini gerçekleştirdikçe, dizinleriniz hem dahili hem de harici olarak parçalanır.

Dahili parçalanma, dizin sayfalarınızda yüksek bir boş alan yüzdesine sahip olmanızdır; bu, SQL Server'ın dizini tararken daha fazla sayfa okuması gerektiği anlamına gelir.

Dış parçalanma, dizinin sayfaları artık sıralı olmadığında, bu yüzden SQL Server, özellikle dizini okumak için IO terimlerinde daha fazla iş yapmak zorunda.

Dizinleriniz çok fazla parçalanmışsa, en iyi ihtimalle, sorgularınız daha az verimli olur ancak en kötüsü, SQL Server, dizinleri bir arada kullanmaya son verir; bu, neredeyse tüm sorguların bir tablo taraması veya kümelenmiş dizin taraması yapması gerektiği anlamına gelir. Bu, performansınıza çok fazla zarar verecek!

Bir dizini yeniden düzenlediğinizde, SQL Server mevcut dizin sayfalarını kullanır ve sadece bu yaşlardaki verileri karıştırır. Bu, iç parçalanmayı azaltacaktır ve az miktarda dış parçalanmayı da kaldırabilir. Yeniden yapılanmadan daha hafif bir işlemdir ve her zaman çevrimiçidir.

Bir dizini yeniden oluşturduğunuzda, SQL Server aslında dizinin verilerini kullanır ve yeni bir dizin sayfası kullanır. Bu, açıkça hem iç hem de dış parçalanmayı azaltacaktır, ancak daha ağır bir işlemdir ve SQL Server sürümünüze ve ayarlarınıza bağlı olarak çevrimiçi bir işlem olarak gerçekleştirilse de, varsayılan olarak dizinin çevrimdışı kalmasına neden olur.

Ancak bir Rebuild'den sonra 0 parçalanma beklemeyin. Bir MAXDOP sorgu ipucu kullanmazsanız, SQL Server yeniden oluşturma işlemini paralel hale getirecek ve daha fazla işlemci ne olursa olsun, her işlemci veya çekirdeğin kendi bölümlerini veya parçalarını bağımsız bir şekilde yeniden oluşturacakları için, daha fazla parçalanma olabilir. herbiri. Bu, en iyi parçalanma seviyeleri ile endeksi yeniden oluşturmak için geçen zaman arasındaki bir takastır. 0'a yakın parçalanma için, MAXDOP 1 kullanın ve sonuçları TempDB'de sıralayın.


Harika...! Basitçe açıklar ...!
DineshDB

0

Veritabanı düzeyinde yavaşlık / uzun süre çalışan sorgular vb. Gibi sorunlara neden olan parçalanmayı gidermek için

Parçalanma ve dizinlerin yeniden oluşturulması ve yeniden düzenlenmesi (veya dizin sayfalarının yeniden düzenlenmesi) ile ilgili ayrıntılı bilgi edinmek için aşağıdaki bağlantıya bakın: https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation


1
Bu bilgi görüntülendikten sonra (kısmen) eski hale gelmiştir. Neden Endeks Fragmentasyonu Önemli Değildir
John aka hot2use,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.