Oracle, sorgu için arabellek önbelleğinde hangi blokların bulunmadığına nasıl karar verir?

0

Soru

Aşağıdaki sorguyu yürüttüğümüzü varsayalım.

select * from employees where salary > 10000;

Bir süre sonra aşağıdaki sorguyu çalıştırdık.

select * from employees where salary > 500;

İkincisi daha fazla blok geri dönme eğilimindedir. Ancak, önceki sorgu nedeniyle arabellek önbelleğinde bu bloklardan bazılarına zaten sahibiz. Belki bazıları arabellek önbelleğinden silinir, ancak ilk sorgudaki blokların bazıları veya tümü hala orada bulunabilir. Yani burada, veritabanı sunucusu hangi blokların zaten var olduğunu ve ek olarak diskten hangilerinin okunacağını bilmelidir.

Sorum şu, veritabanı ek olarak diskten hangi blokların okunacağına nasıl karar veriyor ve karar veriyor?

1

En iyi cevabı

3

Oracle, LRU tekniğini kullanır ('en son kullanılan'anlamına gelir). Önbellekteki verileri yönetmek için kullanılan bir bilgisayar algoritmasıdır. Bir önbellek dolduğunda ve yeni şeyler için alana ihtiyacınız olduğunda-önce en son kullanılan öğeleri atarsınız (bir süredir kullanmadığınız ancak önbellekte yer kaplayan şeyler).

Veri bloklarına özgü değildir-ve veri blokları gerçekten bir LRU listesinde tutulmaz, bu günlerde bir dokunma sayımı ile yönetilir-ancak bu dokunma sayımı algoritması bir LRU'YA çok benzer, böylece bu şekilde düşünebilirsiniz.

Kısacası, LRU'YU duyduğunuzda, bazı verileri (herhangi bir veriyi) yöneten ve öğeleri yakın zamanda kullanılıp kullanılmadıklarına bağlı olarak önbellekten atma eğiliminde olan bir önbellek düşünün. Son zamanlarda bir şey kullanılmıştır - daha önbelleğinde kalacak.

Her bloğun bir dosya# ve # bloğundan oluşan bir DBA - veri bloğu adresi vardır. Bu, veritabanındaki bir bloğu benzersiz olarak tanımlar. Oracle, arabellek önbelleğindeki bloğu tanımlamak için bu "anahtarı" kullanır.

Bir sorguyu çalıştırırsanız, bazı bloklar önbellekte değilse, bunun nedeni LRU'NUN daha yakın zamanda kullanılan daha fazla şeyi ayırmak için bunları temizlemesidir. Bu bir garanti değildir, ancak bu tür bir garantiye ihtiyacınız varsa, arabellek önbelleğinde farklı havuzlar kullanabilirsiniz, esas olarak KEEP arabellek önbelleğinde sık erişilen segmentleri korumak için havuz.

Umarım açıklığa kavuşturur.

2021-10-28 11:08:38

@ oramas, cevap hakkında şüphen var mı ?
Roberto Hernandez

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................