Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale, boyutu TokenAndPermUserStore büyüdükçe sorgu performansıyla ilgili sorunları gidermenize yardımcı olur. Ayrıca çeşitli nedenler ve geçici çözümler sağlar.
Özgün KB numarası: 927396
Belirtiler
Microsoft SQL Server'da aşağıdaki belirtilerle karşılaşırsınız:
Genellikle hızlı çalışan sorguların tamamlanması daha uzun sürer.
SQL Server işlemi için CPU kullanımı normalden daha fazladır.
Geçici bir sorgu çalıştırdığınızda performansın düşmesiyle karşılaşırsınız. Ancak, veya
sys.dm_os_waiting_tasksdinamik yönetim görünümlerini sorgularsanızsys.dm_exec_requests, sonuçlar geçici sorgunun herhangi bir kaynağı beklediğini göstermez.Önbelleğin
TokenAndPermUserStoreboyutu sabit bir hızda büyür.Önbelleğin
TokenAndPermUserStoreboyutu birkaç yüz megabayttır (MB).Bazı durumlarda, veya
DBCC FREESYSTEMCACHEkomutunu çalıştırmakDBCC FREEPROCCACHEgeçici bir rahatlama sağlar.
Neden
Yüksek CPU ve artan bellek kullanımı gibi performans sorunları, önbellekteki TokenAndPermUserStore aşırı girişlerden kaynaklanabilir. Varsayılan olarak, bu önbellekteki girdiler yalnızca SQL Server iç bellek baskısına işaret ettiğinde temizlenir. Çok fazla RAM'e sahip sunucularda, iç bellek baskısı sık tetiklenmeyebilir. Bu önbellek büyüdükçe, yeniden kullanılacak mevcut girdileri aramak daha uzun sürer. Bu önbelleğe erişim bir spinlock tarafından denetlenir. Aramayı aynı anda yalnızca bir iş parçacığı yapabilir. Bu davranış sonunda sorgu performansının düşmesine ve daha fazla CPU kullanımı oluşmasına neden olur.
Önbelleğin TokenAndPermUserStore boyutunu izlemek için aşağıdaki sorguya benzer bir sorgu kullanabilirsiniz:
SELECT SUM(pages_kb) AS
"CurrentSizeOfTokenCache(kb)"
FROM sys.dm_os_memory_clerks
WHERE name = 'TokenAndPermUserStore'
TokenAndPermUserStore Önbellek aşağıdaki güvenlik belirteci türlerini korur:
- LoginToken
- Sunucu düzeyi sorumlusu başına bir oturum açma belirteci.
- TokenPerm
- UserToken ve SecContextToken için güvenli hale getirilebilir nesnenin tüm izinlerini kaydeder.
- Bu önbellekteki her girdi, belirli bir güvenli hale getirilebilir üzerinde tek bir izindir. Örneğin, t1 tablosunda u1 kullanıcısına verilen seçme izni.
- Bu belirteç girdisi, Erişim Denetimi Sonuçları (ACR) önbelleğindeki girdilerden farklıdır. ACR girişleri çoğunlukla bir kullanıcının veya oturum açmanın sorgunun tamamını çalıştırma izni olup olmadığını belirtir.
- UserToken
- Oturum açma için veritabanı başına bir kullanıcı belirteci.
- Üyelik hakkındaki bilgileri veritabanı düzeyindeki rollerde depolar.
- SecContextToken
- Sunucu düzeyi sorumlusu başına oluşturulan bir SecContextToken.
- Bir sorumlu için sunucu genelinde güvenlik bağlamı depolar.
- Kullanıcı Belirteçlerinin karma tablo önbelleğini içerir.
- Üyelik hakkındaki bilgileri sunucu düzeyindeki rollerde depolar.
- TokenAccessResult
- TokenAccessResult girdilerinin farklı sınıfları vardır.
- Erişim Denetimi, belirli bir veritabanındaki belirli bir kullanıcının birden çok nesne içeren bir sorguyu çalıştırma izni olup olmadığını gösterir.
- Microsoft SQL Server 2008'in öncesinde, ACR güvenlik önbellekleri tek bir önbellekte depolanıyordu.
TokenAndPermUserStore - SQL Server 2008'de ACR önbellekleri ayrılmış ve ACR önbellek girişleri kendi kullanıcı depolarında izlenmiştir. Bu ayrım performansı geliştirdi ve önbellekler için daha iyi demet sayısı ve kota denetimi sağladı.
TokenAndPermUserStoreŞu anda veACRCacheStoreskullanılan tek güvenlik önbelleği türleridir. ACR önbellekleri hakkında daha fazla bilgi için bkz . Erişim denetimi önbelleği Sunucu Yapılandırma Seçenekleri.
Farklı önbellekler ve bunların tek tek boyutları hakkında bilgi almak için aşağıdaki sorguyu çalıştırabilirsiniz:
SELECT type, name, pages_kb
FROM sys.dm_os_memory_clerks
WHERE type = 'USERSTORE_TOKENPERM'
içinde büyüyen belirteç türlerini belirlemek için aşağıdaki sorguyu TokenAndPermUserStoreçalıştırabilirsiniz:
SELECT [name] AS "SOS StoreName",[TokenName],[Class],[SubClass], count(*) AS [Num Entries]
FROM
(SELECT name,
x.value('(//@name)[1]', 'varchar (100)') AS [TokenName],
x.value('(//@class)[1]', 'varchar (100)') AS [Class],
x.value('(//@subclass)[1]', 'varchar (100)') AS [SubClass]
FROM
(SELECT CAST (entry_data as xml),name
FROM sys.dm_os_memory_cache_entries
WHERE type = 'USERSTORE_TOKENPERM')
AS R(x,name)
) a
GROUP BY a.name,a.TokenName,a.Class,a.SubClass
ORDER BY [Num Entries] desc
Geçici çözüm
SQL Server, kotasını TokenAndPermUserStore yapılandırmak için kullanılabilecek iki izleme bayrağı sunar (Varsayılan olarak, kota yoktur. Bu, bu önbellekte herhangi bir sayıda girdi olabileceği anlamına gelir).
- TF 4618 - içindeki
TokenAndPermUserStoregirdi sayısını 1024 ile sınırlar. - TF 4618+TF 4610 - giriş
TokenAndPermUserStoresayısını 8192 ile sınırlar.
4618'in çok düşük giriş sayısı diğer performans endişelerine neden oluyorsa, 4610 ve 4618 izleme noktalarını birlikte kullanın.
İzleme bayrakları 4610 ve 4618, Kitaplar Çevrimiçi konusu olan DBCCC TRACEON - İzleme Bayrakları bölümünde belgelenmiştir.
Bu izleme bayrakları, ilişkisiz büyümenin TokenAndPermUserStore sunucu için çok büyük olduğu senaryolar için kullanılmalıdır. Bu genellikle iki tür ortamda oluşur:
Sunucu için kullanılabilir belleğin büyük bir kısmını kaplayan
TokenAndPermUserStoreve yeni giriş oluşturma oranının önbellek çıkarma hızı kadar hızlı veya daha hızlı olduğu düşük uç veya orta uç donanım. Bu, sunucunun diğer bölümleri (örneğin, proc önbelleği) için bellek çekişmesi ve daha sık önbellek geçersiz kılınmasına neden olabilir.Çok fazla belleği olan üst düzey bilgisayarlar (örneğin, 1 TB'tan fazla RAM içeren son destek olayları). Bu ortamlarda önbellek deposu herhangi bir bellek baskısı yaşamadan önce büyüyebilir. Bu, uzun demet zincirlerinden veya yürüyüşlerden kaynaklanan performans düşüşlerine neden olabilir.
Geçici bir azaltma olarak, aşağıdaki yöntemi kullanarak bu önbelleği düzenli aralıklarla temizleyebilirsiniz:
- Girdileri önbellekten boşaltın
TokenAndPermUserStore.
Notlar:
Bunu yapmak için aşağıdaki komutu çalıştırın:
DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')Sorunlar görünmeye başladığında önbellek boyutunun
TokenAndPermUserStoreeşiğini gözlemleyin.Aşağıdaki eylemleri gerçekleştiren zamanlanmış bir SQL Server Aracısı işi oluşturun:
Önbelleğin
TokenAndPermUserStoreboyutunu denetleyin. Boyutu denetlemek için aşağıdaki komutu çalıştırın:SELECT SUM(pages_kb) AS "CurrentSizeOfTokenCache(kb)" FROM sys.dm_os_memory_clerks WHERE name = 'TokenAndPermUserStore'Önbellek boyutu gözlemlenen eşikten büyükse aşağıdaki komutu çalıştırın:
DBCC FREESYSTEMCACHE ('TokenAndPermUserStore')