20 Temmuz 2007 Cuma
Büyük Havuz (Large Pool)
Büyük havuzdaki bir bellek parçası serbest bırakıldığı anda bir başka işleç (process) tarafından kullanılabilir. Büyük havuz özellikle
1) MTS tarafından UGA için,
2) İfadelerin paralel yürütülmesi (parallel execution of statements) için,
3) Yedekleme (Backup) için (RMAN disk I/O tamponları için) kullanılır.
MTS kullanırken büyük havuz kullanılması zorunlu değildir ancak kullanılaması tavsiye edilir ayrıca büyük havuz büyüklüğünün elle ayarlanması tavsiye edilir. Ayarlanmamış değer durumunuz için uygun olmayacaktır.
Java Havuzu (Java Pool)
Atanmış sunucu (dedicated server) modunda her bir java sınıfının paylaşılan kısımlarını içerir ki bunlar aslında her oturum başına kullanılırlar, her sınıf başına 4-8 KB’lık salt okunur (read-only) kısımlardır. Atanmış sunucu modunda oturum başına durum (per-session state) UGA’da tutulur.
MTS modunda Java havuzu şunları içerir: her bir java sınıfının paylaşılan kısmı ve her bir oturumun, oturum başına durumu için kullanılan UGA’nın bir kısmı. Java havuzunun toplam büyüklüğü sabittir bu yüzden uygulamaların bellek ihtiyacı ile oturum sayısının çarpımı bilinmelidir. “MTS modunda Java havuzu çok büyük hale gelebilir çünkü eşzamanlı (concurrent) kullanıcıların sayısına bağlıdır.
İŞLEÇLER (The Processes)
1) Sunucu İşleçleri (Server Processes) : Bir kullanıcının isteği üzerine çalışır; atanmış ve paylaşımlı sunucular gibi.
2) Arkaplan İşleçleri (Background Processes) : Veritabanının başlatılması ile çalışırlar ve çeşitli bakım görevleri yaparlar; blokları diske yazmak, online redo kütüğünün bakımı, bitirilen işleçlerin temizlenmesi gibi.
3) Esir İşleçler (Slave Processes) : Arkaplan işleçlerine benzerler ancak bir arkaplan veya sunucu işleci adına fazladan iş yaparlar.
Sunucu İşleçleri (Server Processes)
Atanmış ve paylaşımlı sunucular aynı işi yapar; onlara verilen SQL’i işler. Bir sorgu gönderildiğinde bunu ayrıştırır ve paylaşımlı havuza koyarlar (veya orda bulurlar). Sorgu planını bu işleç oluşturur, gerekli veriyi tampon önbellekten okur veya diskten tampon önbelleğe okur. En fazla CPU zamanını bu işleçler kullanır; sort, sum ve birleştirme (join) işlemlerini yaparlar.
Atanmış sunucu modunda kullanıcı oturumu ile sunucu işleci arasında birebir eşleme vardır; 100 oturum varsa 100 işleç olacaktır. Kullanıcı ile sunucu arasında Net8 ağ (network) yazılımı/protokolü kullanılır. Atanmış sunucular için Oracle Net8 Dinleyici İşleci (Listener Process) şart değildir ancak paylaşımlı sunucular için şarttır.
Atanmış Sunucuya Karşı Paylaşımlı Sunucu
SQL tabanlı uygulamalar Oracle veritabanına bağlanmak için en yaygın olarak atanmış sunucu modunu kullanırlar (kurması daha kolaydır, hiç/çok az konfigürasyon gerektirir, MTS ise birkaç basit basamak daha gerektirir). Kullanıcı oturumu ile sunucu arasında, atanmış sunucu modunda birebir eşleme varken MTS’de bireçok eşleme vardır; çok kullanıcıdan tek paylaşımlı sunucuya.
MTS, kısa ve sık işlemli (transaction) OLTP sistemleri için çok uygundur ancak veri depoları (data warehouse) için hiç uygun değildir, bunlarda bir sorgu 1, 3, 5 dakika ya da daha fazla sürebilir. Atanmış sunucu ve MTS, tek bir instance’da (örnek) birlikte kullanılabilir. MTS’in avantajları şunlardır:
1) İşletim sistemi (OS) işleçlerinin ve iş parçacıklarının sayısını azaltır : Çok kullanıcılı sistemlerde kullanıcıların sadece küçük bir kısmı aynı anda aktiftir (örneğin %1).
2) Eşzamanlılığın (concurrency) derecesinin suni olarak ayarlanmasına izin verir : Belli bir sınıra kadar eşzamanlı kullanıcı sayısı arttıkça işlem (transaction) sayısı da artar, sonra artış durur ve eşzamanlı kullanıcı arttığı halde işlem sayısı düşmeye başlar. En yüksek işlem hacmi (throughput) için, en yüksek eşzamanlılık bu nokta ile sınırlanmalıdır.
3) Sistemde ihtiyaç duyulan belleği azaltır: MTS kullanıldığında UGA, SGA’in içinde tutulur. MTS kullanılırken ne kadar UGA belleğe ihtiyaç duyulacağı iyice belirlenmelidir. Her bir atanmış/paylaşımlı sunucu PGA kullanır, MTS kullanıldığında ihtiyaç duyulan PGA azalır böylece daha az bellek kullanılır.
ODAKLI ARKAPLAN İŞLEÇLERİ (Focused Background Processes)
PMON – İşleç Denetleyicisi (The Process Monitor)
Anormal bir şekilde sonlandırılan bağlantıları temizlemekle sorumludur. Örneğin atanmış sunucu başarısız olursa veya öldürülürse, kullandığı kaynakların geri verilmesinden PMON sorumludur; commit edilmemiş çalışmayı geri yuvarlar (rollback), kilitleri ve SGA kaynaklarını serbest bırakır.
PMON ayrıca gerekli durumlarda diğer arkaplan işleçlerini de çalıştırır, ayrıca Net8 dinleyicisi (listener) ile bağlantı kurar. Oracle için kullanılan ayarlanmamış (default) port 1521’dir.
SMON – Sistem Denetleyicisi (The System Monitor)
Veritabanının çöp toplayıcısıdır (garbage collector). Sorumlu olduğu işlerin bazıları şunlardır:
Geçici alanların (Temporary Space) temizlenmesi – Örneğin bir index sonlandırıldığında onunla ilişkili extentleri temizler.
Çökme kurtarma (Crash Recovery)
Boş alanları birleştirme – Dizin yönetimli tabloalanlarında (dictionary-manged tablespaces) boş ve bitişik olan extentleri tek bir büyük boş extente çevirir.
Kullanılamayan dosyalara yönelik aktif işlemlerin (transactions) kurtarılması
OPS’deki başarısız düğümün (node) instance’ının kurtarılması – Oracle Paralel Sunucu konfigürasyonunda instance’ın başka bir düğümü (node) başarısız düğümün redo kütük dosyalarını açarak bütün verileri kurtarır.
OBJ$’ı temizlemek – OBJ$, düşük seviyeli bir veri dizini tablosudur (data dictionary table), hemen hemen her nesne için bir giriş içerir. SMON, silinmiş veya ulaşılamayan neselere ait satırları siler.
Rollback segmentlerinin otomatik olarak ideal büyüklüğüne döndürülmesi
Rollback segmentlerini ‘offline’ yapar – DBA, aktif işlemleri olan bir rollback segmentini ‘offline’ veya kullanılamaz yapabilir.
RECO – Dağınık Veritabanı kurtarma (Distributed Database Recovery)
İki evreli commit (two-phase commit,2PC) sırasında, çökmeden veya bağlantı kopmasından dolayı hazır durumda bırakılmış işlemleri kurtarır. 2PC, dağınık bir protokoldür, birbirinden farklı pek çok veritabanındaki değişiklikle atomik commit’e imkan verir, commit edilmeden önce dağınık başarısızlığa (failure) karşı pencereyi kapatmaya çalışır.
CKPT – Checkpoint İşleci
Checkpoint işlemi yapmaz, veri dosyalarının başlıklarını güncelleyerek checkpoint işlemine yardımcı olur.
DBWn – Veritabanı Blok Yazıcısı (Database Block Writer)
DBWn, kirli (içinde veri olan) blokları asychronous I/O kullanarak diske yazar, çok sayıda dağınık (scattered) yazım yapar oysa LGWR (Log Writer) redo kütüğüne sıralı yazım yapar. DBWn, checkpointi ilerletmek için veya yer açmak için tampon önbellekten (buffer cache) diske yazar.
Görevini yeterince hızlı yapamazsa FREE_BUFFER_WAITS veya ‘Write Complete Waits’ mesajlarını görebiliriz. 10 tane DBWn konfigüre edilebilir, bunun için init.ora parametresi DB_BLOCK_LRU_LATCHES yükseltilmelidir.
LGWR – Kütük Yazıcısı (Log Writer)
SGA’deki redo kütük tamponunun (redo log buffer) içeriğini sıralı (sequential) olarak diske yazar, bunu 3 saniyede bir yapar veya birisi commit ettiğinde vaya üçte biri dolduğunda veya veri toplamı 1 MB’a ulaştığında yapar. Bu Yüzden çok büyük bir redo kütük tamponu kullanışlı değildir.
ARCn – Arşiv İşleci (Archive Process)
ARCn işlecinin görevi, LGWR onu doldurduktan sonra, online redo kütük dosyasını başka en az iki farklı yere kopyalamaktır, bu dosyalar daha sonra ortam kurtarma (media recovery) için kullanılabilir. Online redo kütüğü bir güç kesintisinde veri dosyalarını onarmak için kullanılır, arşiv redo kütükleri ise sabit diskin bozulması durumunda veri dosyalarını onarmada kullanılır.
BSP- Blok Sunucu İşleci (Block Server Process)
Sadece Oracle Paralel Sunucu (OPS) ortamında kullanılır. OPS’de birden fazla instance aynı veritabanını açar. Bunun için SGA blok tampon önbellekleri (block buffer caches), birbirlerine karşı tutarlı durumda tutulmalıdır, BSP’nin ana amacı budur.
LMON – Kilit Denetleyici İşleç (Lock Monitor Process)
Sadece Oracle Paralel Sunucu (OPS) ortamında kullanılır. Bir başarısızlık durumuna karşı bir öbekteki (cluster) bütün instanceları denetler, başarısız olan instance’ın küresel kilitlerini kurtarır, dağınık kilit yöneticisi (distributed lock manager, DLM) ile birlikte.
LMD – Kilit Yöneticisi Daemonu (Lock Manager Daemon)
Sadece Oracle Paralel Sunucu (OPS) ortamında kullanılır. Öbekli ortamda (clustered environment) blok tampon önbelleği için küresel kilitleri ve kaynakları kontrol eder. Ayrıca küresel deadlock denetimini ve çözümlemesini (resolution) de yapar.
LCKn – Kilit İşleci (Lock Process)
Sadece Oracle Paralel Sunucu (OPS) ortamında kullanılır. İşlev olarak LMD’ye çok benzer, ancak bütün küresel kaynaklar için olan istekleri değerlendirir.
KULLANIŞLI ARKAPLAN İŞLEÇLERİ (Utility Background Processes)
SNPn – Snapshot İşleçleri (Snapshot Processes) İş Kuyrukları (Job Queues)
36 tane iş kuyruğu işleci olabilir, adları şöyle olacaktır: SNP0, SNP1,…, SNP9, SNPA, …, SNPZ. SNPn işleçleri atanmış sunucuyla paylaşımlı sunucunun karışımı gibidir. İşleri birbiri ardına yaparlar ama belleği atanmış sunucu gibi kullanırlar. Her bir iş kuyruğu her seferinde tek bir iş yapacaktır.
QMNn – Kuyruk Denetleyici İşleçler (Queue Monitor Processes)
Gelişmiş kuyrukları (Advanced Queues) denetlerler ve bir mesaj elverişli hale geldiklerinde bekleyenleri haberdar ederler. Ayrıca kuyruk oluşturulmasından da sorumludurlar. init.ora parametresi AQ_TM_PROCESS ile 10 tane oluşturulabilir; QMN0, …, QMN9.
EMNn – Olay Denetleyici İşleçler (Event Monitor Processes)
Gelişmiş kuyruk (Advanced Queue) mimarisinin bir parçasıdır, kuyruk abonelerine asynchoronous olarak mesajlar gönderir.
ESİR İŞLEÇLER (Slave Processes)
Asynchronous I/O ‘yu desteklemeyen sistemlerde (kasetler (tape) gibi), asynchoronous I/O etkisini oluşturmak için kullanılırlar. İşleç önce büyük bir miktar veriyi yığın olarak tutar ve bu yazıldıktan sonra bittiğini haber verir, böylece yavaş aygıt için I/O esirleri bekler ve işlem hacmi (throughput) artar. DBWn, LGWR ve RMAN, I/O esirlerini kullanır.
Paralel Sorgu Esirleri (Parallel Query Slaves)
SQL komutları için (örneğin SELECT, CREATE TABLE, UPDATE gibi), tek bir yürütme (execution) planı yerine pek çok yürütme planı aynı anda paralel olarak uygulanır. Her bir planın sonuçları birleştirilerek tek bir büyük sonuç elde edilir. Böylece işlem daha hızlı yapılmış olur (sıralıya (sequential) göre).
11 Temmuz 2007 Çarşamba
UTF8 ve AL16UTF16 kodlamaları
UTF8 kodlamasında her bir karakter 1, 2 veya 3 byte uzunluğunda yer tutar. Eğer çoğu karakter tek bir byte ile gösterilebilirse, bir değişkene veya bir tablo kolonuna daha fazla karakter sığdırılabilir; ancak veri, uzunluğu bytelarla sınrlı bir tampona aktarılırken budama (truncation) hataları oluşabilir.
Oracle şirketi, en yüksek çalışma zamanı güvenilirliği için, elverişli olan yerlerde AL16UTF16 kodlamasının kullanılamasını öneriyor. Ayrıca bir Unicode stringini tutmak için ne kadar yer gerektiğinin belirlenmesi gerekirse LENGTH fonksiyonu yerine LENGTHB fonksioyonunun kullanılması daha iyi olur.