SQL Server Mimarisinin Açıklaması: Adlandırılmış Kanallar, Optimizer, Buffer Manager

İçindekiler:

Anonim

MS SQL Server, bir istemci-sunucu mimarisidir. MS SQL Server süreci, istemci uygulamasının bir istek göndermesiyle başlar. SQL Server, isteği işlenmiş verilerle kabul eder, işler ve yanıtlar. Aşağıda gösterilen tüm mimariyi ayrıntılı olarak tartışalım:

Aşağıdaki Şemada gösterildiği gibi, SQL Server Mimarisinde üç ana bileşen vardır:

  1. Protokol Katmanı
  2. İlişkisel Motor
  3. Depolama Motoru
SQL Server Mimarisi Şeması

Yukarıdaki üç ana modülü ayrıntılı olarak tartışalım. Bu eğitimde öğreneceksiniz.

  • Protokol Katmanı - SNI
    • Paylaşılan Hafıza
    • TCP / IP
    • İsimli Borular
    • TDS nedir?
  • İlişkisel Motor
    • CMD Ayrıştırıcı
    • Optimizer
    • Sorgu Yürütücü
  • Depolama Motoru
    • Dosya türleri
    • Erişim yöntemi
    • Tampon Yöneticisi
    • Önbelleği Planla
    • Veri Ayrıştırma: Arabellek önbelleği ve Veri Depolama
    • İşlem Yöneticisi

Protokol Katmanı - SNI

MS SQL SUNUCU PROTOKOL KATMANI 3 Tip İstemci Sunucu Mimarisini destekler. MS SQL Server'ın desteklediği " Üç Tip İstemci Sunucu Mimarisi" ile başlayacağız .

Paylaşılan Hafıza

Sabah erken bir Konuşma senaryosunu yeniden ele alalım.

ANNE ve TOM - Burada Tom ve annesi aynı mantıksal yerdeydiler, yani evlerinde. Tom Kahve isteyebildi ve annem onu ​​sıcak servis edebildi.

MS SQL SUNUCUSU - Burada MS SQL sunucusu PAYLAŞILAN BELLEK PROTOKOLÜ sağlar . Burada İSTEMCİ ve MS SQL sunucusu aynı makinede çalışır. Her ikisi de Paylaşılan Bellek protokolü aracılığıyla iletişim kurabilir.

Analoji: Yukarıdaki iki senaryoda harita varlıklarına izin verir. Tom'u İstemciye, Annemden SQL sunucusuna, Evden Makineye ve Sözlü İletişimi Paylaşılan Bellek Protokolüne kolayca eşleyebiliriz.

Yapılandırma ve kurulum masasından:

Yerel DB'ye Bağlantı için - SQL Management Studio'da "Sunucu Adı" Seçeneği olabilir

"."

"localhost"

"127.0.0.1"

"Makine \ Örnek"

TCP / IP

Şimdi akşam düşünün, Tom parti havasında. Tanınmış bir Coffee Shop'tan sipariş edilen bir Kahve istiyor. Kahve dükkanı evinden 10 km uzaklıkta yer almaktadır.

Burada Tom ve Starbuck farklı fiziksel konumdadır. Tom evde ve Starbucks işlek pazar yerinde. Hücresel ağ üzerinden iletişim kuruyorlar. Benzer şekilde, MS SQL SUNUCUSU, İSTEMCİ ve MS SQL Sunucusunun birbirinden uzak olduğu ve ayrı bir makineye kurulduğu TCP / IP protokolü üzerinden etkileşim yeteneği sağlar.

Analoji: Yukarıdaki iki senaryoda harita varlıklarına izin verir. Tom'u İstemciye, Starbuck'ı SQL sunucusuna, Ev / Pazar yerini Uzak konuma ve son olarak da Hücresel ağı TCP / IP protokolüne kolayca eşleyebiliriz.

Yapılandırma / kurulum masasından notlar:

  • SQL Management Studio'da - TCP \ IP üzerinden Bağlantı için, "Sunucu Adı" Seçeneği "Sunucunun Makine \ Örneği" olmalıdır.
  • SQL sunucusu, TCP / IP'de 1433 numaralı bağlantı noktasını kullanır.

İsimli Borular

Şimdi nihayet geceleri Tom, komşusu Sierra'nın çok iyi hazırladığı açık yeşil bir çay içmek istedi.

Burada Tom ve Komşusu Sierra, birbirlerinin komşusu olarak aynı fiziksel konumdadır. Intra ağ üzerinden iletişim kuruyorlar. Benzer şekilde, MS SQL SUNUCUSU , Adlandırılmış Boru protokolü aracılığıyla etkileşim yeteneği sağlar . Burada İSTEMCİ ve MS SQL SUNUCUSU LAN üzerinden bağlantı halindedir .

Analoji: Yukarıdaki iki senaryoda harita varlıklarına izin verir. Tom'u İstemciye, Sierra'dan SQL sunucusuna, Komşu'dan LAN'a ve son olarak da Intra ağını Adlandırılmış Boru Protokolüne kolayca eşleyebiliriz.

Yapılandırma / kurulum masasından notlar:

  • İsimli Boru ile Bağlantı İçin. Bu seçenek varsayılan olarak devre dışıdır ve SQL Configuration Manager tarafından etkinleştirilmesi gerekir.

TDS nedir?

Artık üç tür İstemci-Sunucu Mimarisi olduğunu bildiğimize göre, TDS'ye bir göz atmamıza izin verin:

  • TDS, Tablo Veri Akışı anlamına gelir.
  • 3 protokolün tümü TDS paketlerini kullanır. TDS, Ağ paketlerinde kapsüllenir. Bu, istemci makineden sunucu makineye veri aktarımını sağlar.
  • TDS ilk olarak Sybase tarafından geliştirilmiştir ve artık Microsoft'a aittir.

İlişkisel Motor

İlişkisel Motor, Sorgu İşlemcisi olarak da bilinir. Bir sorgunun tam olarak ne yapması gerektiğini ve en iyi nasıl yapılabileceğini belirleyen SQL Server bileşenlerine sahiptir. Depolama motorundan veri talep ederek ve döndürülen sonuçları işleyerek kullanıcı sorgularının yürütülmesinden sorumludur.

Mimari Şemada gösterildiği gibi İlişkisel Motorun 3 ana bileşeni vardır . Bileşenleri ayrıntılı olarak inceleyelim:

CMD Ayrıştırıcı

Protokol Katmanından alınan veriler daha sonra İlişkisel Motor'a aktarılır. "CMD Ayrıştırıcı" , Sorgu verilerini alan İlişkisel Motorun ilk bileşenidir. CMD Parser'ın ana işi, sözdizimsel ve anlamsal hata için sorguyu kontrol etmektir . Son olarak, bir Sorgu Ağacı oluşturur . Ayrıntılı olarak tartışalım.

Sözdizimsel kontrol:

  • Diğer tüm Programlama dillerinde olduğu gibi, MS SQL de önceden tanımlanmış Anahtar Sözcükler kümesine sahiptir. Ayrıca SQL Server, SQL sunucusunun anladığı kendi dilbilgisine sahiptir.
  • SELECT, INSERT, UPDATE ve diğerleri MS SQL önceden tanımlı Anahtar Kelime listelerine aittir.
  • CMD Parser sözdizimsel kontrol yapar. Kullanıcıların girdisi bu dil sözdizimi veya dilbilgisi kurallarına uymuyorsa, bir hata döndürür.

Örnek: Bir Rus'un bir Japon restoranına gittiğini varsayalım. Rus dilinde fast food sipariş ediyor. Ne yazık ki garson sadece Japonca anlıyor. En bariz sonuç ne olur?

Cevap şudur - garson siparişi daha fazla işleyemez.

Dilbilgisinde veya SQL sunucusunun kabul ettiği dilde herhangi bir sapma olmamalıdır. Varsa, SQL sunucusu onu işleyemez ve bu nedenle bir hata mesajı verir.

Yaklaşan eğitimlerde MS SQL sorgusu hakkında daha fazla bilgi edineceğiz. Yine de, çoğu temel Sorgu Sözdiziminin altında şu şekilde düşünün:

SELECT * from ;

Şimdi, sözdiziminin ne yaptığına dair bir algı elde etmek için, diyelim ki kullanıcı aşağıdaki gibi temel sorguyu çalıştırsın:

SELECR * from 

'SEÇ' kullanıcının yerine "SELECR" yazdığını unutmayın.

Sonuç: CMD Ayrıştırıcı bu ifadeyi ayrıştıracak ve hata mesajını atacaktır. "SELECR" önceden tanımlanmış anahtar kelime adını ve grameri takip etmediğinden. CMD Parser burada "SEÇ" bekliyordu.

Anlamsal kontrol:

  • Bu, Normalizer tarafından gerçekleştirilir .
  • En basit haliyle, Şemada sorgulanan Sütun adı, Tablo adı olup olmadığını kontrol eder. Ve varsa, onu Sorguya bağlayın. Bu, Bağlama olarak da bilinir .
  • Kullanıcı sorguları GÖRÜNÜM içerdiğinde karmaşıklık artar. Normalizer, dahili olarak depolanan görünüm tanımıyla ve çok daha fazlasını değiştirir.

Bunu aşağıdaki örnek yardımıyla anlayalım -

SELECT * from USER_ID

Sonuç: CMD Ayrıştırıcı bu ifadeyi Anlamsal denetim için ayrıştırır. Ayrıştırıcı, Normalizer mevcut olmadığı için istenen tabloyu (USER_ID) bulamayacağı için bir hata mesajı atacaktır.

Sorgu Ağacı Oluşturun:

  • Bu adım, sorgunun çalıştırılabileceği farklı bir yürütme ağacı oluşturur.
  • Tüm farklı ağaçların aynı istenen çıktıya sahip olduğunu unutmayın.

Optimizer

İyileştiricinin işi, kullanıcının sorgusu için bir yürütme planı oluşturmaktır. Kullanıcı sorgusunun nasıl yürütüleceğini belirleyen plandır.

Tüm sorguların optimize edilmediğini unutmayın. Optimizasyon, SELECT, INSERT, DELETE ve UPDATE gibi DML (Veri Değiştirme Dili) komutları için yapılır. Bu tür sorgular önce işaretlenir ve ardından optimize ediciye gönderilir. CREATE ve ALTER gibi DDL komutları optimize edilmemiştir, bunun yerine dahili bir formda derlenirler. Sorgu maliyeti; CPU kullanımı, Bellek kullanımı ve Giriş / Çıkış ihtiyaçları gibi faktörlere göre hesaplanır.

Optimize edicinin rolü, en iyiyi değil, en ucuz olanı bulmaktır .

Optimizer'ın daha teknik detayına geçmeden önce aşağıdaki gerçek hayat örneğini düşünün:

Misal:

Diyelim ki, çevrimiçi bir Banka hesabı açmak istiyorsunuz. Zaten bir hesap açmak için en fazla 2 Gün süren bir Banka biliyorsunuz. Ancak, 2 günden az sürebilecek veya sürmeyebilecek diğer 20 bankanın bir listesine de sahipsiniz. Hangi bankaların 2 günden az sürdüğünü belirlemek için bu bankalarla iletişime geçmeye başlayabilirsiniz. Şimdi, 2 Günden az süren bir banka bulamayabilirsiniz ve arama faaliyetinin kendisi nedeniyle kaybedilen ek süre olabilir. İlk bankanın kendisinde bir hesap açmak daha iyi olurdu.

Sonuç: Akıllıca seçmek daha önemlidir. Kesin olmak gerekirse, hangi seçeneğin en ucuz olanı değil en iyi olduğunu seçin .

Benzer şekilde, MS SQL Optimizer, dahili kapsamlı / sezgisel algoritmalar üzerinde çalışır. Amaç, sorgu çalıştırma süresini en aza indirmektir. Tüm Optimizer algoritmaları Microsoft'a aittir ve bir sırdır. Bununla birlikte , aşağıda MS SQL Optimizer tarafından gerçekleştirilen üst düzey adımlar verilmiştir. Optimizasyon aramaları, aşağıdaki şemada gösterildiği gibi üç aşamayı takip eder:

Aşama 0: Önemsiz Plan Arama:

  • Bu aynı zamanda Ön optimizasyon aşaması olarak da bilinir .
  • Bazı durumlarda, önemsiz plan olarak bilinen tek bir pratik, uygulanabilir plan olabilir. Optimize edilmiş bir plan oluşturmaya gerek yoktur. Bunun nedeni, daha fazla arama yapmak, aynı çalışma zamanı yürütme planının bulunmasıyla sonuçlanacaktır. Bu da, hiç gerekli olmayan, optimize edilmiş Plan Aramanın ekstra maliyetiyle.
  • Hiçbir Önemsiz planı bulundu, sonra 1 st Faz başlar.

1. Aşama: İşlem işleme planlarını arayın

  • Bu, Basit ve Karmaşık Plan aramayı içerir .
  • Basit Plan Araması: Sorguda yer alan geçmiş sütun ve Dizin Verileri, İstatistiksel Analiz için kullanılacaktır. Bu genellikle tablo başına bir Dizin içerir, ancak bununla sınırlı değildir.
  • Yine de basit plan bulunamazsa, daha karmaşık Plan aranır. Tablo başına Çoklu Dizin içerir.

Aşama 2: Paralel İşleme ve Optimizasyon.

  • Yukarıdaki stratejilerden hiçbiri işe yaramazsa, Optimizer Paralel İşleme olasılıklarını arar. Bu, Makinenin işleme yeteneklerine ve yapılandırmasına bağlıdır.
  • Bu hala mümkün değilse, son optimizasyon aşaması başlar. Şimdi, nihai optimizasyon amacı, sorguyu en iyi şekilde yürütmek için diğer tüm olası seçenekleri bulmaktır. Son optimizasyon aşaması Algoritmalar Microsoft Tescilli'dir.

Sorgu Yürütücü

Sorgu yürütücü Erişim Yöntemini çağırır . Yürütme için gerekli olan veri alma mantığı için bir yürütme planı sağlar. Veri Depolama Motorundan alındığında, sonuç Protokol katmanında yayınlanır. Son olarak veriler son kullanıcıya gönderilir.

Depolama Motoru

Depolama Motorunun işi, verileri Disk veya SAN gibi bir depolama sisteminde depolamak ve gerektiğinde verileri almaktır. Depolama motoruna derinlemesine dalmadan önce, verilerin Veritabanında nasıl depolandığına ve mevcut dosya türlerine bir göz atalım .

Veri Dosyası ve Kapsamı:

Veri Dosyası, verileri fiziksel olarak veri sayfaları biçiminde depolar, her veri sayfası 8KB boyutunda olup, SQL Server'daki en küçük depolama birimini oluşturur. Bu veri sayfaları, kapsamları oluşturmak için mantıksal olarak gruplandırılmıştır. SQL Server'da hiçbir nesneye sayfa atanmaz.

Nesnenin bakımı kapsamlar aracılığıyla yapılır. Sayfada, Sayfa Türü, Sayfa Numarası, Kullanılan Alanın Boyutu, Boş Alan Boyutu ve İşaretçi gibi sayfa ile ilgili meta veri bilgilerini bir sonraki sayfaya ve önceki sayfaya taşıyan 96 bayt boyutunda Sayfa Başlığı adlı bir bölüm vardır. , vb.

Dosya türleri

  1. Birincil dosya
  • Her veritabanı bir Birincil dosya içerir.
  • Bu, tablolar, görünümler, Tetikleyiciler vb. İle ilgili tüm önemli verileri depolar.
  • Uzantı. mdf genellikle ancak herhangi bir uzantıda olabilir.
  1. İkincil dosya
  • Veritabanı birden fazla İkincil dosya içerebilir veya içermeyebilir.
  • Bu isteğe bağlıdır ve kullanıcıya özel veriler içerir.
  • Uzantı. ndf genellikle ancak herhangi bir uzantıda olabilir.
  1. Log dosyası
  • Önden yaz günlükleri olarak da bilinir.
  • Uzantı. ldf
  • İşlem Yönetimi için kullanılır.
  • Bu, istenmeyen durumlardan kurtarmak için kullanılır. Taahhüt edilmeyen işlemlere geri dönme önemli görevini gerçekleştirin.

Depolama Motorunun 3 bileşeni vardır; onlara detaylı bir şekilde bakalım.

Erişim yöntemi

Sorgu yürütücüsü ile Buffer Manager / Transaction Logs arasında bir arayüz görevi görür.

Erişim Yönteminin kendisi herhangi bir yürütme yapmaz.

İlk eylem, sorgunun şu olup olmadığını belirlemektir:

  1. İfade Seçin (DDL)
  2. Seçilmemiş İfade (DDL ve DML)

Sonuca bağlı olarak, Erişim Yöntemi aşağıdaki adımları gerçekleştirir:

  1. Sorgu DDL , SELECT deyimiyse , sorgu daha ileri işlemler için Buffer Manager'a geçirilir.
  2. Ve eğer DDL, SEÇİLMEYEN ifadesi sorgulanırsa, sorgu İşlem Yöneticisine iletilir. Bu çoğunlukla UPDATE ifadesini içerir.

Tampon Yöneticisi

Tampon yöneticisi, aşağıdaki modüller için temel işlevleri yönetir:

  • Önbelleği Planla
  • Veri Ayrıştırma: Arabellek önbelleği ve Veri depolama
  • Kirli Sayfa

Bu bölümde Plan, Tampon ve Veri önbelleğini öğreneceğiz. İşlem bölümünde Kirli sayfaları ele alacağız.

Önbelleği Planla

  • Mevcut Sorgu planı: Tampon yöneticisi, yürütme planının depolanan Plan Önbelleğinde olup olmadığını kontrol eder. Evet ise, sorgu planı önbelleği ve ilişkili veri önbelleği kullanılır.
  • İlk önbellek planı: Mevcut Plan önbelleği nereden geliyor?

    İlk kez sorgu yürütme planı çalıştırılıyorsa ve karmaşıksa, Plane önbelleğinde saklamak mantıklıdır. Bu, bir dahaki sefere SQL sunucusu aynı sorguyu aldığında daha hızlı kullanılabilirlik sağlayacaktır. Yani, ilk kez çalıştırılıyorsa, Plan yürütmesinin depolandığı sorgudan başka bir şey değil.

Veri Ayrıştırma: Arabellek önbelleği ve Veri Depolama

Tampon yöneticisi, gerekli verilere erişim sağlar. Veri önbelleğinde verilerin bulunup bulunmadığına bağlı olarak aşağıdaki iki yaklaşım mümkündür:

Buffer Cache - Yumuşak Ayrıştırma:

Buffer Manager, Veri önbelleğinde Tampondaki Verileri arar. Varsa, bu Veriler Query Executor tarafından kullanılır. Bu, Veri depolamasından veri getirmeye kıyasla önbellekten veri alırken G / Ç işlemi sayısı azaldığından performansı artırır.

Veri Depolama - Sert Ayrıştırma:

Buffer Manager'da veri mevcut değilse, gerekli Veriler Veri Depolamasında aranır. Ayrıca verileri ileride kullanmak üzere veri önbelleğinde saklar.

Kirli Sayfa

Transaction Manager'ın bir işleme mantığı olarak saklanır. İşlem Yöneticisi bölümünde detaylı olarak öğreneceğiz.

İşlem Yöneticisi

Erişim yöntemi Sorgunun Seçilmeyen bir ifade olduğunu belirlediğinde İşlem Yöneticisi çağrılır.

Günlük Yöneticisi

  • Günlük Yöneticisi, İşlem Günlükleri'ndeki günlükler aracılığıyla sistemde yapılan tüm güncellemelerin kaydını tutar.
  • Günlüklerde İşlem Kimliği ve Veri Değiştirme Kaydı ile birlikte Günlük Sıra Numarası bulunur .
  • Bu, Taahhüt Edilen İşlem ve İşlem Geri Alma işlemlerini takip etmek için kullanılır .

Kilit Yöneticisi

  • İşlem sırasında, Veri Depolamasındaki ilişkili veriler Kilit durumundadır. Bu işlem Kilit Yöneticisi tarafından yürütülür.
  • Bu süreç, veri tutarlılığını ve izolasyonunu sağlar . ACID özellikleri olarak da bilinir.

Yürütme Süreci

  • Günlük Yöneticisi günlüğe kaydetmeye başlar ve Kilit Yöneticisi ilişkili verileri kilitler.
  • Verinin kopyası Tampon önbelleğinde tutulur.
  • Güncellenmesi gereken verilerin kopyası Günlük arabelleğinde tutulur ve tüm olaylar verileri Veri arabelleğinde günceller.
  • Verileri depolayan sayfalar, Kirli Sayfalar olarak da bilinir .
  • Kontrol Noktası ve İleri Yazma Günlüğü: Bu işlem, Kirli Sayfalardan Diske kadar tüm sayfayı çalıştırır ve işaretler, ancak sayfa önbellekte kalır. Sıklık dakikada yaklaşık 1 çalışmadır, ancak sayfa önce Buffer log'dan log dosyasının Veri sayfasına gönderilir. Bu, İleriye Yazma Günlüğü olarak bilinir .
  • Tembel Yazar: Dirty sayfası bellekte kalabilir. SQL sunucusu büyük bir yük gözlemlediğinde ve yeni bir işlem için Arabellek belleğine ihtiyaç duyulduğunda, Dirty Pages'ı önbellekten kurtarır. LRU - Sayfayı arabellek havuzundan diske temizlemek için en son kullanılan Algoritma üzerinde çalışır .

Özet:

  • Üç Tip İstemci Sunucu Mimarisi mevcuttur: 1) Paylaşılan Bellek 2) TCP / IP 3) Adlandırılmış Borular
  • Sybase tarafından geliştirilen ve şimdi Microsoft'a ait olan TDS, istemci makineden sunucu makineye veri aktarımı için Ağ paketleri içinde kapsüllenmiş bir pakettir.
  • İlişkisel Motor üç ana bileşen içerir:

    CMD Ayrıştırıcı: Bu, Sözdizimsel ve Anlamsal hatalardan sorumludur ve sonunda bir Sorgu Ağacı oluşturur.

    Optimizer: Optimizer rolü, en iyiyi değil, en uygun maliyetli yürütme planını bulmaktır.

    Sorgu Yürütücü: Sorgu yürütücü, Erişim Yöntemini çağırır ve yürütme için gerekli olan veri alma mantığı için yürütme planı sağlar.

  • Üç tür dosya vardır Birincil dosya, İkincil dosya ve Günlük dosyaları.
  • Depolama Motoru: Aşağıdaki önemli bileşenlere sahiptir

    Erişim Yöntemi: Bu Bileşen Sorgunun Seçilmiş mi yoksa Seçilmemiş İfadesi mi olduğunu belirler. Buna göre Buffer ve Transfer Manager'ı çağırır.

    Tampon Yöneticisi: Tampon yöneticisi, Plan Önbelleği, Veri Ayrıştırma ve Kirli Sayfa için temel işlevleri yönetir.

    İşlem Yöneticisi: Kayıt ve Kilit Yöneticilerinin yardımıyla Seçilmeyen İşlemleri yönetir. Ayrıca, Write Ahead günlük kaydı ve Tembel yazarların önemli uygulamasını kolaylaştırır.