İş arkadaşlarımdan biri SQL Server 2008 R2 veritabanında saklı bir prosedür belirledi sp_something
. Bunu gördüğümde hemen düşündüm: "Bu YANLIŞ!" ve neden yanlış olduğunu açıklayan bu çevrimiçi makale için yer işaretlerimi aramaya başladım , böylece iş arkadaşıma bir açıklama yapabilirdim.
Makalede ( Brian Moran tarafından ) saklı yordamın bir sp_ öneki verilmesi, SQL Server'ın derlenmiş bir plan için ana veritabanına bakmasını sağladığı açıklanmıştır . Çünkü sp_sproc
orada bulunmuyorsa, SQL Server (performans sorunlarına yol ve bunun için özel bir derleme kilidi gerekiyor) prosedürünü yeniden derlemek olacaktır.
İki örnek arasındaki farkı göstermek için makalede aşağıdaki örnek verilmiştir:
USE tempdb;
GO
CREATE PROCEDURE dbo.Select1 AS SELECT 1;
GO
CREATE PROCEDURE dbo.sp_Select1 AS SELECT 1;
GO
EXEC dbo.sp_Select1;
GO
EXEC dbo.Select1;
GO
Bunu çalıştırın, sonra Profiler'ı açın (Saklı Prosedürler -> SP:CacheMiss
olayı ekleyin ) ve saklı yordamları tekrar çalıştırın. İki saklı yordam arasında bir fark görmeniz gerekir: sp_Select1
saklı yordam saklı yordamdan bir SP:CacheMiss
olay daha oluşturur Select1
(makale SQL Server 7.0 ve SQL Server 2000'e başvurur .)
Örneği SQL Server 2008 R2 ortamımda çalıştırdığımda, SP:CacheMiss
her iki prosedür için de aynı miktarda olay elde ediyorum (hem tempdb'de hem de başka bir test veritabanında).
Bu yüzden merak ediyorum:
- Örneği yürütürken yanlış bir şey yapabilir miyim?
'Kullanıcı adı yoksproc sp_something
' adagium, SQL Server'ın daha yeni sürümlerinde hala geçerli mi?- Öyleyse, SQL Server 2008 R2'deki geçerliliğini gösteren iyi bir örnek var mı?
Bu konudaki düşünceleriniz için çok teşekkür ederiz!
DÜZENLE
Bulduğum Saklı Prosedürler (Veritabanı Altyapısı) oluşturma benim ikinci soru cevaplar SQL Server 2008 R2 için msdn üzerinde:
Sp_'yi önek olarak kullanan hiçbir saklı yordam oluşturmamanızı öneririz. SQL Server, sistem saklı prosedürlerini belirlemek için sp_ önekini kullanır. Seçtiğiniz ad gelecekteki bazı sistem prosedürleriyle çakışabilir. [...]
Orada önek kullanılmasından kaynaklanan performans sorunları hakkında hiçbir şey söylenmedi sp_
. Bunun hala geçerli olup olmadığını veya SQL Server 2000'den sonra düzelttiklerini bilmek isterim.
sp_
? Bu, bir tablonun ön eklenmesi kadar faydalıdır tbl
. Neden bu anlamsız adlandırma kuralını kullanmanıza izin vermek için, ilk önce sistem aramasını ana (önemsiz olsa da veya performans farkı olmasa da) yapalım?
dbo.sp_Author_Rename
daha iyi olduğunu açıklamalarını sağlayın dbo.Author_Rename
. Mantıklı olan tek bir şey düşünemiyorum.
sp_
sürümleri çözme konusunda biraz daha fazla yüke indirdiğim önemsiz bir performans farkı buldum (hem ana hem de kullanıcı veritabanlarını kontrol etmek gerekiyor, çünkü sistem işleminde sistem işlemlerindemaster
-> işlem yapılmıyor. procs)master
)