Manajemen dan Persaingan Cache Buffer Oracle
Manajemen dan Persaingan Cache Buffer Oracle
#.2
Di Bagian Ini
katup: rantai buffer cache
Cache Buffer
Kunci
Buffer
Lakukan Perpustakaan
Lagi
Cache Cache
Jaringan
IO
#.4
Struktur Memori Oracle
SGA
Log Buffer
Perpustakaan
Buffer Cache Cache
DBWR
LGWR
Pengguna1
Pengguna2
Pengguna3
Kueri
Pilih ename dari emp di mana empno = 12;
0. Pernyataan analisis
2. Temukan informasi objek dalam kamus data
3. Hitung rencana eksekusi
4. Jika pemindaian tabel penuh
Lihat semua blok tabel
5. Jika indeks menemukan akar indeks dan mengikuti kunci
6. Kamus Data akan memiliki informasi tentang tabel atau blok indeks
Berkas #
Blok #
7. Setelah Anda mengetahui block DBA (file# + block#) ...
.7
Apakah Blok ada di cache?
Sekarang Anda memiliki file# dan blok#
Bagaimana Anda tahu jika sebuah blok adalah
cached?
Bayangan
Proses
?
Apakah Anda mencari semua blok?
Bisa jadi 1000-an blok untuk dicari.
Cache buffer berada di multi
Pertunjukan
.8
Cache Buffer
Cari blok dengan:
1) Hash dari Apa itu nilai hash
Apa itu Buckets
Berkas data #
Apa itu linked list?
Blok#
2) Result = Bucket #
3) Mencari daftar terhubung untuk itu
ember #
.9
Konsep
Untuk memahami persaingan di cache buffer,
perlu memahami :
3. Daftar Terhubung
4. Hashing
5. Ember
.10
Fungsi Hashing
Hash sederhana bisa menjadi fungsi Mod
1 mod 4 = 1
2 mod 4 = 2
3 mod 4 = 3
4 mod 4 = 0
5 mod 4 = 1
6 mod 4 = 2
7 mod 4 = 3
8 mod 4 = 0
Menggunakan "mod 4" sebagai fungsi hash menciptakan 4 "ember"
untuk menyimpan barang
.12
1 Blok Hash
1 file#
2 blok 437
#’s
3
(1+437) mod 4
=2
Setelah beberapa saat, ember-ember menjadi terisi dengan blok.
#.13
Cache
ALAMAT 03C38F60 03C39000 03C39478
NXT_HASH 03C39000 03C39478
PRV_HASH 03C38F60 03C39000
16
NXT_HASH
x$bh PRV_HASH
ADDR
DBARFIL
DBABLK
OBJ DBARFIL
HLADDR
NXT_HASH DBABLK
PRV_HASH OBJ
Untuk Menemukan Sebuah Blok #.17
HashBuffer
kunci pengaman Blok Data
bucketHeaders
Bayangan
Proses
2 3 4 5
pengait Hash
Sessions Ember Blok
Header Data
Blok
s5
s3
s2
s1
Contoh
1. Lihat Tabel
S1 S2 S3 S4
t1 t2
Indeks_t2
2. Loop Bersarang
Pilih [Link], [Link]
dari t1, t2
di mana t1.c1 = {value}
dan [Link] = [Link];
#.20
Solusi CBC
Temukan SQL (Mengapa aplikasi mengalami blok begitu keras?)
Kluster hash
Cari tabel (“pilih bahasa dari lang_table di mana...”)
Ubah aplikasi
Gunakan fungsi plsql
Sebarkan data untuk mengurangi kontensi
Pilih dari dual
Kemungkinan menggunakan x$dual
pilih
hitung(*),
sql_id,
nvl(o.object_name,ash.current_obj#) objn,
substr(o.object_type,0,10) otype,
FILE_SAAT_IN# fn,
Pernyataan SQL:
CURRENT_BLOCK# blockn
dari v$active_session_history ash
Sukses
, semua_objek o
di mana peristiwa seperti 'latch: rantai buffer cache'
dan o.object_id (+)= ash.CURRENT_OBJ# Ekstra: Blok panas
kelompokkan berdasarkan sql_id, current_obj#, current_file#,
current_block#, o.object_name,o.object_type
urutan berdasarkan hitung(*)
CBC: OEM
.25
CBC: ADDM
Masalah
Pernyataan SQL
Solusi?
#.26
CBC – Penyelidikan Lebih Lanjut
pilih * dari v$event_name
di mana nama = 'latch: rantai buffer cache'
EVENT# NAME
---------- ----------------------------
58 kait: rantai cache buffer
s1 s2
Update Pilih
#.32
CBC: Blok Bacaan Konsisten
Hash Blok
kunci Ember Headers
s5
Rantai Buffer Cache
s4
s3
Panjang maksimum :
s2 _db_block_max_cr_dba
10g = 6
s1
)
kelompokkan berdasarkan nama, file#, dbablk, hladdr
CBC : Solusi
Temukan SQL yang menyebabkan masalah
Change Application Logic
pilih
Hilangkan titik panas ash.sql_id
hitung(*),
Tabel pencarian
sql_text
Menggunakan fungsi pl/sql dari v$active_session_history ash,
Minimalkan data per blok v$sqlstats sql
Kemungkinan menggunakan x$dual alih-alih dual dimana
Indeks Loop Bersarang event='latch: cache buffers chains'
dan sql.sql_id(+)=ash.sql_id
Gabungan hash kelompokkan berdasarkan ash.sql_id, sql_text;
Indeks partisi hash
Hah Kluster
Pembaruan, penyisipan, pilih untuk memperbarui pada blok saat membaca yang itu
blok
Penyebab salinan ganda
.35
= entri di x$bh
#.41
X$bh
Menjelaskan Header Buffer
SQL> deskripsi x$bh
Name Ketik
---------------------- ---------
ALAMAT MENTAH(4)
DBARFIL NOMOR
DBABLK NOMOR
OBJ NOMOR
HLADDR Cache DASAR(4)
NXT_HASH penyangga MENTAH(4)
PRV_HASH MENTAH(4)
NXT_REPL MENTAH(4)
LRU
PRV_REPL MENTAH(4)
.42
LRU Chain
ALAMAT 03C38F60 03C39000 03C39478
NXT_HASH 03C39000 03C38F60
PRV_HASH 03C38F60 03C39000
Panas Dingin
LRU = Least Recently Used
MRU = Most Recently Used
Ujung Panas
Titik Tengah
Temukan Gratis
Penyisipan
Blok
Dapatkan LRU Latch
Sisipkan Header
Lepaskan Kunci LRU
sesi
.49
DBWR mengeluarkan Blok Kotor
MRU Header Buffer LRU LRU
pengait
Titik Tengah
Penyisipan
Latch LRU 1
Set 2
Latch LRU 2
_db_block_lru_latches = 8
10gR2 dengan cpu_count = 2
X$KCBWDS – set deskriptor
#.52
Set Kerja
pilih
ds.set_id
ds.blk_size
SET_ID BLK_SIZE BUFFERS NAME
[Link] ---------- ---------- -------- -------
nvl([Link], 'tidak terpakai') 16 32768
15 32768
dari 14 16384
x$kcbwds ds, 13 16384
12 8192
v$buffer_pool bp
11 8192
di mana 10 4096
9 4096
ds.set_id >= bp.lo_setid (+) dan
8 2048
ds.set_id <= bp.hi_setid (+) 7 2048
/ 6 8192 4972 DEFAULT
5 8192 4972 DEFAULT
4 8192
3 8192
2 8192
1 8192
.53
Kasus Uji
8 Sesi
membaca tabel terpisah
Tabelnya terlalu besar untuk disimpan dalam cache
pilihan cache diatur pada setiap tabel
dari v$active_session_history
di mana acara='bebas kunci'
P2 HITUNG(*)
kelompokkan berdasarkan p2 ---------- ----------
127 3556
masalah
#.57
3
Pengguna2
Pengguna1
.59
Jalur Solusi BBW
Ada blok panas,
hilangkan blok panas
1. Temukan jenis Blok Jenis Blok:
Selesaikan jika mungkin Batalkan Header
gunakan AUM (atau tambahkan lebih banyak RBS)
2. Sesuaikan SQL
Batalkan Blok – titik panas di UNDO
Temukan SQL Data
Seberapa sering itu dipanggil index – hot spot, partition
Oleh berapa banyak Pengguna tabel - daftar gratis, ASSM, partisi
Segment header– free lists
3. Hilangkan Blok Panas blok data tabel -> daftar bebas
Temukan Objek Blok daftar gratis - kelompok daftar gratis
Temukan Jenis Blok Blok Header File – lihat ekstensinya
alokasi
#.60
BBW: Statspack
5 Acara Terbaik yang Terukur Rata-rata %Total
~~~~~~~~~~~~~~~~~~ tunggu Panggil
Acara Waits Time(s) (ms) Time
------------------------ ----- ------- ----- ------
penantian sibuk buffer 5.832 263 45 28.2
tulisan paralel file log 248 125 505 13.4
dibaca oleh sesi lain Waits Wait Time (s) Avg Time (ms)
Kelas
tulis paralel file db
------------------ ----- ------------- -------------
baca berurutan file db
blok header file 264 203 769
blok data 6,070 162 27
batalkan header 355 0 1
header segmen 1
gagal menemukan Objek
#.61
BBW: ASH
Menemukan
Objek
Tipe Blok
Pernyataan SQL
CNT OBJ OTYPE SQL_ID BLOCK_TYPE TBS
--- --------------- ----- ------------- ----------------- --------
2 BBW_INDEX_VAL_I INDEKS 635xhydd6fzgg header segmen SISTEM
2 0 635xhydd6fzgg usn 5 header UNDOTBS1
3 0 1hsb81ypyrfs5 blok header file UNDOTBS1
32 BBW_INDEX_VAL_I INDEKS 1hsb81ypyrfs5 blok data SISTEM
33 BBW_INDEX_VAL_I INDEKS 6avm49ys4k7t6 blok data SISTEM
34 BBW_INDEX_VAL_I INDEKS 5wqps1quuxqr4 blok data SISTEM
BBW: OEM .62
Solusi .63
#.64
Jenis Blok BBW
pilih rownum
n,[Link]
dari v$waitstat;
pilih * dari v$event_name KELAS N
di mana nama = 'buffer busy waits'
--- ------------------
1 blok data
NAME P1 P2 P3 2 blok urut
----------------- ----- ------ ----- 3 simpan batal blok
menunggu buffer sibuk file# blok# kelas# 4 header segmen
5 simpan batalkan header
6 daftar gratis
7 peta jangkauan
Catatan: Sebelum 10g, P3 adalah tipe BBW
8 level pertama bmb
Jika P3 dalam 100,110,120,130 maka baca 9 level kedua bmb
10 bmb tingkat 3
Sekarang "dibaca oleh sesi lain" 11 blok bitmap
12 blok indeks bitmap
Selain Menulis, P3 dalam 200,210,220,230 13 blok header file
231 14 tidak terpakai
15 header pembatalan sistem
16 blok pembatalan sistem
17 undo header
#.65
Bergabung dengan ASH dengan v$waitstat
pilih
o.nama_objek obj,
o.object_type otype,
ash.SQL_ID
[Link]
dari v$active_session_history ash,
( select rownum class#, class from v$waitstat ) w,
semua_objek o
di mana acara='menunggu sibuk buffer'
dan [Link]#(+)=ash.p3
dan o.object_id (+)= ash.CURRENT_OBJ#
Urutkan berdasarkan sample_time;
S1 S2 S3 S4
4 Sesi berjalan
Sisipkan ke dalam toto nilai (null, 'a');
Komit;
.70
Solusi 2: ASSM
Beberapa Blok Bitmap Melacak Ruang Kosong
Tidak diformat
Hingga 25% Gratis
Hingga 50% Gratis
Hingga 75% Gratis
Penuh
Blok gratis yang dipilih oleh ID Proses
Kemungkinan nomor instance untuk RAC
#.71
Solusi 2: ASSM
Header
BBW: ASSM
Pertimbangkan untuk menggunakan Freelists daripada ASSM
tingkat 1 bmb
bmb tingkat 2
bmb tingkat 3
.74
BBW pada Indeks
Gunakan indeks kunci terbalik
Indeks pemindaian putus
Indeks Partisi Hash
Lebih banyak IO per akses indeks
OBJN OTYPE FILEN BLOCKN SQL_ID BLOCK_TYPE
--------- ----- ----- ------- ------------- ------------
BBW_INDEX_INDEX 1 113599 97dgthz60u28d blok data 1
Indeks
Solusi adalah membuat extent awal dan selanjutnya lebih besar di Temp Table Space
.82
Sesi
DBWR
n
.84
Penghapus Buffer
Cache buffer diperbesar secara dinamis