Büyük bir masa üzerinde kümelenmiş bir dizin oluşturmak için ağrısız yol?


22

Bu yüzden ciddi yavaş performans hakkında şikayetçi olan bir müşteri sitemiz var. Bir göz attım ve sorunun açıkça görüldüğü için Somebody Else (grrrr) kümelenmiş bir indeks olmadan 20 milyondan fazla kayıt tutan bir masa tasarladı.

Şimdi o masada kümelenmiş bir dizin oluşturmak istiyorum - ancak test ortamımda komutum create indexbir saattir çalışıyor ve hala bitmedi. Müşteri sitesi 7/24 çalışan ve bir indeks oluştururken bir saat iniş yapamayan bir atölye katında.

İşi hızlı bir şekilde bitirecek dizini oluşturmanın ya da meşgulken sunucunun performansını tamamen öldürmeyecek akıllı bir şekilde yapmanın daha az kaba kuvvet yöntemi var mı?

SQL Server Enterprise Edition kullanıyoruz.

Yanıtlar:


26
  • Sql sunucunuz Enterprise + edition ise ve tablonun herhangi bir BLOB alanı yoksa - CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • Olmazsa - tabloyu aynı şema ile yan tarafta oluşturmak ve tüm INSERT / UPDATE / DELETE işlemleri de dahil olmak üzere (örneğin tetiği kullanarak) verileri akıllıca aktararak ve eski tabloyu doğru bir şekilde bırakıp yeniden adlandırmanın dışında hiçbir yol yoktur. eski ile aynı isimde yeni - eksiler: yavaş, sunucuya ve depolamaya ekstra yük ekler


12

Müşterinizin hangi SQL server sürümünü kullandığından emin değilsiniz. İşletmelerde indeksi (ONLINE = ON) ile oluşturabilirsiniz, böylece tablo indeks oluşturuluncaya kadar kullanılabilir.


8
  • Orijinaliyle aynı olan yeni bir tablo oluşturun (belli ki farklı bir isme ihtiyacınız olacaktır)
  • Yeni tabloda kümelenmiş dizin oluşturun
  • Veriyi yeni tabloya yükle
  • Orijinal tabloyu bırak
  • Orijinal adı kullanarak yeni tabloyu yeniden adlandır

Orijinalden gerekli olan izinleri uyguladığınızdan emin olun.

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.