Arka plan:
Çok sayıda VIEW ve çok sayıda SYNONYM içeren çok sayıda veritabanım var. Örneğin, bir db 10k'den fazla VIEW ve 2+ milyon SYNONYM'ye sahiptir.
Genel Sorun: (ve genel olarak sistem tablolarını)
içeren sorgular sys.objects
yavaş olma eğilimindedir. İçeren sorgular sys.synonyms
buzuldur. Performansı artırmak için neler yapabileceğimi merak ediyorum.
Özel Örnek
Bu komut bir üçüncü taraf aracı tarafından çalıştırılır. Hem uygulamada hem de SSMS'de yavaş:
exec sp_tables_rowset;2 NULL,NULL
Sorum :
Bu çalışmayı nasıl daha hızlı yapabilirim?
Ne Denedim ettik :
Ben Eğer SET STATISTICS IO ON
bu çıktıyı almak:
(2201538 satır etkilendi)
Tablo 'sysobjrdb'. Tarama sayısı 1, mantıksal okuma 28, fiziksel okuma 0, okuma öncesi okuma 0, lob mantıksal okuma 0, lob fiziksel okuma 0, lob okuma öncesinde 0 okuma
. Tablo 'sysschobjs'. Tarama sayısı 1, mantıksal okuma 53926, fiziksel okuma 0, okuma öncesi okuma 0, lob mantıksal okuma 0, lob fiziksel okuma 0, lob okuma önceden okuma 0.
Temel sistem tablolarındaki istatistikleri güncelleyebildim. Bu benim SQL 2008 R2 veya daha yeni ortamlarda çalıştı:
UPDATE STATISTICS sys.sysobjrdb WITH FULLSCAN
UPDATE STATISTICS sys.sysschobjs WITH FULLSCAN
Ayrıca dizin bakımı da yapabildim. Bu benim SQL 2012 veya daha yeni ortamlarda çalışır. Örneğin çalışan sp_help 'sys.sysschobjs'
tablodaki dizinleri tanımlar ve oradan bu komutları oluşturup çalıştırırım:
ALTER INDEX clst ON sys.sysschobjs REORGANIZE
ALTER INDEX nc1 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc2 ON sys.sysschobjs REORGANIZE
ALTER INDEX nc3 ON sys.sysschobjs REORGANIZE
İstatistikleri güncellemek ve dizinleri yeniden düzenlemek yardımcı olur, ancak çok fazla değil.