Her biri farklı bir tabloda iki DBCC INDEXDEFRAG komutunu aynı anda çalıştırmak mümkün mü?


9

Şu anda bir SQL Server 2005 veritabanındaki her tabloda, her seferinde bir tablo bir DBCC INDEXDEFRAG gerçekleştiren bir komut dosyası çalıştırıyorum. Alan kısıtlamaları ve çalışma zamanı gereksinimleri nedeniyle INDEXDEFRAG yerine DBCC DBREINDEX kullanmak bir seçenek değildir.

Bazı tabloların birleştirilmesinin uzun zaman aldığını fark ettim. Örneğin, "sys.dm_exec_requests" dinamik yönetim görünümünü incelersem, şu INDEXDEFRAG şu anda 829610394 table_id içeren bir tablonun kümelenmiş dizininde çalkalanıyor görebilirsiniz:

DBCC INDEXDEFRAG (0, 829610394, 1)

Birleştirme işleminin tamamlanmasının uzun zaman alacağını biliyorum. Çalışmakta olan komut dosyasının sonunda tüm tabloları birleştireceği gerçeğini bir kenara bırakarak, geçerli komut yürütülürken başka bir tablonun kümelenmiş dizininde başka bir DBCC INDEXDEFRAG'ı el ile çalıştırmamın herhangi bir zararı var mı? Bunu yaparsam her iki tablo da aynı anda birleştirilecek mi?

Yanıtlar:


15

Evet, birden çok tablo için yapabilirsiniz. Aynı tabloda birden çok dizin için yapamazsınız - Bunu önlemek için yeni bir dizin kilidi alt kaynağı icat ettim. ALTER INDEX'teki aynı davranış ... 2005'te yerine koyduğum REORGANIZE.

Teşekkürler


2
Yazan kişiden daha doğru bir cevap alamazsınız! Aynı anda birden çok yeniden oluşturma veya yeniden oluşturma işlemi ile ilişkili IO yükünü unutmayın ve ileride DBCC komutu yerine ALTER INDEX kullandığınızdan emin olun.
AndrewSQL

Kabul ediyorum, bu konuda doğrudan Paul Randal'dan daha doğru bir cevap almanın nasıl mümkün olacağını bilmiyorum. Teşekkürler Paul.
RelentlessMike

6

DBCC INDEXDEFRAG ve DBREINDEX kullanımdan kaldırıldığını ve ALTER INDEX ile değiştirildiğini unutmayın:

Önemli

Bu özellik, Microsoft SQL Server'ın gelecekteki bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmayın ve şu anda bu özelliği kullanan uygulamaları en kısa zamanda değiştirin. Bunun yerine ALTER INDEX kullanın. - http://msdn.microsoft.com/tr-tr/library/ms177571(v=SQL.90).aspx

Aynı anda iki çalıştırmaya gelince, dosya düzeninize bağlıdır. Hepsi aynı disk (ler) üzerindeyse, G / Ç için birbirlerine karşı savaşacakları için her birini yavaşlatırsınız. Gerektiğinde yalnızca REORG veya REBUILD yapmak en iyisidir. Otomatik bir çözüm için Michelle Ufford'un senaryosuna buradan göz atın: http://sqlfool.com/2010/04/index-defrag-script-v4-0/


Teşekkürler Eric. Bu özel durumda, veritabanı birden çok veri dosyasına, farklı bölümlere ve bir IBM DS8300 SAN'ın üzerine yayılır. Bu yüzden sanırım G / Ç giderken iyi olacağım.
RelentlessMike
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.