Bu SQL Server 2016 ile ilgili bir hata mı?
Evet. Kesinlikle bu doğru davranış değildir. Burada rapor ettim ve SQL Server 2016 SP2 CU9'da düzeltildi .
As Mikael Eriksson yorumlarda diyor sys.database_scoped_configurations
ve sys.dm_exec_sessions
formatta görünümleri olarak uygulanır
SELECT ...
FROM OpenRowset(TABLE xxxx)
Ancak aşağıdaki iki planı karşılaştırdığımızda bariz bir fark vardır.
DBCC TRACEON(3604);
DECLARE @database_scoped_configurations TABLE(x INT);
INSERT INTO @database_scoped_configurations
SELECT configuration_id
FROM sys.database_scoped_configurations
OPTION (QUERYTRACEON 8608, QUERYTRACEON 8615, QUERYTRACEON 8619, QUERYTRACEON 8620 );
DECLARE @dm_exec_sessions TABLE(x INT);
INSERT INTO @dm_exec_sessions
SELECT session_id
FROM sys.dm_exec_sessions
OPTION (QUERYTRACEON 8608, QUERYTRACEON 8615, QUERYTRACEON 8619, QUERYTRACEON 8620 );
Bu sorguların her ikisi için izleme bayrağı 8619 çıktısı
Kural Uygula: EnforceHPandAccCard - x0-> Makara veya Üst (x0)
SQL Server görünüşe göre TVF kaynağının da ekleme hedefi olmadığını belirleyemiyor, bu yüzden Cadılar Bayramı koruması gerektiriyor.
Seanslar durumunda bu, önce tüm satırları yakalayan bir makara olarak uygulanır. Gelen database_scoped_configurations
bir ekleyerek TOP 1
plana. TOP
Cadılar Bayramı koruması için kullanımı bu makalede ele alınmıştır . Makale ayrıca TOP
beklendiği gibi çalışmak yerine bir makarayı zorlamak için belgelenmemiş bir izleme işaretinden bahsediyor .
DECLARE @database_scoped_configurations TABLE(x INT);
INSERT INTO @database_scoped_configurations
SELECT configuration_id
FROM sys.database_scoped_configurations
OPTION (QUERYTRACEON 8692)
Bir TOP 1
makara yerine kullanmakla ilgili bariz bir sorun, eklenen satır sayısını keyfi olarak sınırlayacağıdır. Bu, yalnızca işlev tarafından döndürülen satır sayısı <= 1 olduğunda geçerli olur.
İlk not şuna benzer
Sorgu 2 için ilk notla karşılaştırın
Yukarıdakileri doğru anlarsam, ilk TVF'nin en fazla bir satır dönebileceğini düşünür ve bu nedenle yanlış bir optimizasyon uygular. İkinci sorgu için Maks 1.34078E+154
( 2^512
) olarak ayarlanır .
Bu maksimum satır sayısının nereden türetildiği hakkında hiçbir fikrim yok. Belki de DMV'nin yazarı tarafından sağlanan meta veriler? TOP(50)
Geçici çözümün yeniden yazılmaması da tuhaftır TOP(1)
çünkü TOP(50)
Cadılar Bayramı sorununun oluşmasını engellemeyecektir (ancak süresiz olarak devam etmesini durduracaktır)