Gönderen MSDN :
" Anahtar Sütunların Artan veya Azalan Şekillerinde Ekleme İşlemleri Oluşuyor
Kimlik veya gerçek zamanlı zaman damgası sütunları gibi artan veya azalan anahtar sütunlarla ilgili istatistikler, sorgu optimize edicinin gerçekleştirdiğinden daha sık istatistik güncellemeleri gerektirebilir. Ekleme işlemleri, artan veya azalan sütunlara yeni değerler ekler Eklenen satır sayısı bir istatistik güncellemesini tetikleyemeyecek kadar az olabilir.İstatistikler güncel değilse ve sorgular en son eklenen satırlardan birini seçerse, mevcut istatistiklerin bu yeni değerler için önemlilik tahminleri olmayacaktır. yanlış kardinalite tahminleri ve yavaş sorgu performansı ile sonuçlanır.
Örneğin, istatistiklerin en son müşteri siparişi tarihleri için kardinalite tahminlerini içerecek şekilde güncellenmemesi durumunda, en son müşteri siparişi tarihlerinden seçilen bir sorguda yanlış kardinalite tahminleri bulunur.
Bakım Sonrası İşlemler
Bir tabloyu kısaltmak veya satırların büyük bir yüzdesini toplu olarak eklemek gibi veri dağıtımını değiştiren bakım prosedürlerini gerçekleştirdikten sonra istatistikleri güncellemeyi düşünün. Bu, sorgular otomatik istatistik güncellemelerini beklerken sorgu işlemede gelecekteki gecikmeleri önleyebilir. "
Sisteminizde zaman zaman "EXEC sp_updatestats" (bir süre programlanmış) kullanabilir veya tüm nesnelerde STATS_DATE işlevini kullanabilir ve istatistiklerinin son kez ne zaman güncellendiğini ve o zamandan beri çok fazla zaman olup olmadığını görebilirsiniz. İSTATİSTİK o nesne için. Deneyimlerime göre, Otomatik istatistikler etkinleştirilmiş olsa bile, otomatik güncellemeyi tetiklemeyen ekleme işlemleri nedeniyle istatistikleri zaman zaman güncellemeye zorlanıyoruz.
Kişisel kodumu eklemek için (istatistik güncellemesi için dinamik ifadeler oluşturan haftalık bir işte kullanılır):
select distinct
'update statistics [' + stats.SchemaName + '].[' + stats.TableName + ']'
+ case when stats.RowCnt > 50000 then ' with sample 30 percent;'
else
';' end
as UpdateStatement
from (
select
ss.name SchemaName,
so.name TableName,
so.id ObjectId,
st.name AS StatsName,
STATS_DATE(st.object_id, st.stats_id) AS LastStatisticsUpdateDate
, si.RowModCtr
, (select case si2.RowCnt when 0 then 1 else si2.RowCnt end from sysindexes si2 where si2.id = si.id and si2.indid in (0,1)) RowCnt
from sys.stats st
join sysindexes si on st.object_id = si.id and st.stats_id = si.indid
join sysobjects so on so.id = si.id and so.xtype = 'U' --user table
join sys.schemas ss on ss.schema_id = so.uid
) stats
where cast(stats.RowModCtr as float)/cast(stats.RowCnt as FLOAT)*100 >= 10 --more than 10% of the rows have changed
or ( --update statistics that were not updated for more than 3 months (and rows no > 0)
datediff(month, stats.LastStatisticsUpdateDate, getdate()) >= 3
and stats.RowCnt > 0
)
Burada, istatistiklerin 3 aydan daha uzun süre güncellenmediği veya son istatistik güncellemesinden bu yana satırların% 10'undan fazlasının değiştiği tüm nesneleri alıyorum.
where col=(cast @var...)) ve@varolabilir'%'. Bir iki hafta önce miras aldım ve yerine geçene kadar temelde çalışmaya devam etmeliyim. Bağlantı için teşekkürler, bir koşuşturma vereceğim.