SQL Server’a üzerinde çalıştırılan bir SELECT
sorgu hangi aşamalardan geçip, sonuca nasıl ulaşıldığına göz atalım.
SQL Server Database Engine üzerinde bulunan bileşenler
- Query Optimizer: Mantıksal sorgu gereksinimi için verimli fiziksel bir execution plan bulmaktan sorumlu bileşendir.
- Language Processing: Sorgunun syntax olarak doğruluğunu kontrol eder, sorguda geçen tabloları ve varsa GROUP BY ‘ı ya da gerekliliğini inceler.
- Query Executor: Query Optimizer’ın bulduğu planı çalıştırmakla yükümlüdür.
- Storage Engine: Fiziksel depolama alanına, lock ve trasaction servislerine erişimi sağlar.
- SQL-OS: İş parçacıkları, memory yönetimi ve zamanlanmış görevlerin yönetildiği kısımdır.
SELECT Deyiminin Çalıştırılması
SQL Server’a gönderilen bir SELECT deyimi aşağıdaki adımların uygulanmasının ardından sonucu döndürmektedir.
- Query Parse; Yazım kullarına uygunluğu denetlenir ve SELECT deyimi logical parçalara ayrılır.
- Query Tree; Ayrılan logical parçaları, sonuç kümesini sağlayacak şekilde bir ağaç yapısı oluşturur.
- Execution Plan; Query Tree’yi kullanarak Query Optimizer kaynak tablo(lar)dan dataya erişebileceği birden fazla yolu tespit eder, her birine estimate cost değeri atar ve en az cost’a sahip olan plan seçilir.
- Relational Engine – Query Executor: Seçilen Execution Plan’ı çalıştırır ve ilgili adımlardaki istenen data’ları Storage Enginden talep eder. Storage Engine tarafından gönderilen dataları result set olacak şekilde formatlar ve result set’i client’a iletir.
Not : Plan oluşturulup sorgu sonucu dönüldükten sonra, SQL Server kullanılan Execution Plan’ı Plan Cache adı verilen bellekte saklar ve bir sonraki kullanım için hazırda bekletmektedir.