0% menganggap dokumen ini bermanfaat (0 suara)
5 tayangan85 halaman

Manajemen dan Persaingan Cache Buffer Oracle

Dokumen ini membahas tentang penantian cache buffer dalam basis data Oracle. Ini menggambarkan bagaimana cache buffer menggunakan hashing, ember, dan daftar tertaut untuk secara efisien menemukan blok di memori tanpa harus memindai semua blok. Ini mengidentifikasi beberapa sumber persaingan pada cache buffer yang dapat menyebabkan penantian, seperti blok panas yang sering diakses oleh beberapa sesi. Solusi melibatkan menemukan pernyataan SQL yang menyebabkan blok panas dan mengatasinya melalui penulisan ulang, pemartisian, atau paralelisasi untuk menyebarkan beban I/O di seluruh buffer. Laporan Statspack diidentifikasi sebagai cara untuk mendiagnosis SQL spesifik yang sedang menunggu sumber daya cache buffer.

Diterjemahkan oleh

ScribdTranslations
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
5 tayangan85 halaman

Manajemen dan Persaingan Cache Buffer Oracle

Dokumen ini membahas tentang penantian cache buffer dalam basis data Oracle. Ini menggambarkan bagaimana cache buffer menggunakan hashing, ember, dan daftar tertaut untuk secara efisien menemukan blok di memori tanpa harus memindai semua blok. Ini mengidentifikasi beberapa sumber persaingan pada cache buffer yang dapat menyebabkan penantian, seperti blok panas yang sering diakses oleh beberapa sesi. Solusi melibatkan menemukan pernyataan SQL yang menyebabkan blok panas dan mengatasinya melalui penulisan ulang, pemartisian, atau paralelisasi untuk menyebarkan beban I/O di seluruh buffer. Laporan Statspack diidentifikasi sebagai cara untuk mendiagnosis SQL spesifik yang sedang menunggu sumber daya cache buffer.

Diterjemahkan oleh

ScribdTranslations
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

Tunggu Cache Buffer

#.2

Di Bagian Ini
katup: rantai buffer cache

latch: cache buffers lru chain


penguncian: pegangan buffer cache
Tunggu Buffer Gratis
Menunggu Buffer Sibuk
Tulis Tunggu Lengkap
Buffer Hapus
#.3

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

Berkas Log REDO Berkas Data


.5

Akses Buffer Cache


Manajemen Cache Buffer
Menemukan blok gratis
Menemukan blok data
Mengelola daftar LRU
Membersihkan Blok Kotor
Manajemen cache buffer dapat menyebabkan
perselisihan
Berbeda dari IO (membaca blok disk)
.6

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

Daftar Tautan Ganda


Alamat 03C38F60 03C39000 03C39478
Selanjutnya03C39000 03C39478
Sebelumnya 03C38F60 03C39000
.11

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

Pengisian Ember Hash


Blok Data
Blok Hash
file#
blok #’s
0 Hasil dalam ember#
Masukkan blok ke dalam ember

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

Pengunci Melindungi Isi Ember


Buffer
pengait Hash Blok Data
ember Header

Konten Header Buffer yang dijelaskan oleh X$BH


#.14
X$bh
Menggambarkan Konten Header Buffer
SQL> deskripsi x$bh
Name Ketik
------------ -------- ALAMAT
ADDR RAW(4) DBARFIL
NOMOR DBARFIL DBABLK
NOMOR DBABLK OBJ
NOMOR OBJ HLADDR
HLADDR RAW(4) NXT_HASH
NXT_HASH RAW(4) PRV_HASH
PRV_HASH RAW(4) …
… jauh lebih banyak Setiap header buffer berisi
Informasi tentang blok data
Ini menunjuk ke dan sebelumnya serta berikutnya
Header buffer dalam daftar terkait
.15

Cache
ALAMAT 03C38F60 03C39000 03C39478
NXT_HASH 03C39000 03C39478
PRV_HASH 03C38F60 03C39000
16

X$BH menggambarkan Header


Buffer
pengunci Hash Blok Data
ember Kepala
HLADDR
ADDR ALAMAT

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

11. Hash alamat blok


22. Ambil pengait ember
33. Cari header
44. Ditemukan, membaca blok dalam cache

55. Tidak Ditemukan Baca blok dari disk


Rantai Buffer Cache
#.18

pengait Hash
Sessions Ember Blok
Header Data
Blok
s5

s4 Rantai Buffer Cache

s3

s2

s1

Persaingan jika terlalu banyak akses pada sebuah bucket


#.19

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?)

Loop bersarang, mungkin


Partisi Hash
Menggunakan Hash Join

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

Bagaimana Anda menemukan SQL?


CBC: Statspack 9i .21

Top 5 Timed Events


~~~~~~~~~~~~~~~~~~ % Total
Acara Waits Time (s) Ela Time
---------------------------- ------------ ----------- --------
Rincian tidur latch untuk DB: Instance CDB: cdb Snaps: 1 -2
-> diurutkan berdasarkan misses desc

Latch Name Permintaan Kelebihan Tidur Tidur 1->4


-------------------- ---------- ------- ------ ------------
rantai buffer cache 12.123.500 608.415 15.759 0/0/0/0/0
pin cache pustaka 12,027,599 173,446 2,862 172694/743/8/1/0
cache perpustakaan 12.072.503 98.065 2.373 97739/279/47/0/0
simulator kunci lru 606 436 434 6/426/4/0/0
Gagal menemukan SQL
#.22

CBC: Statspack 10g

5 Acara Terbaik Berdasarkan Waktu Rata-rata %Total

~~~~~~~~~~~~~~~~~~ tunggu Panggil


Tunggu Acara Waktu (d) (ms) Time
---------------------------------- ----------- ------ ------
Waktu CPU 35 54.3
kait: rantai buffer cache 46 11 243 17,6
latch: library cache pin 35 8 229 12.6
latch: library cache 27 6 231 9.8
baca berurutan file log 15 1 60 1.4

Gagal menemukan SQL


CBC: ASH
#.23

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(*)

CNT SQL_ID OBJN TIPE FN BLOCKN


---- ------------- -------- ------ --- ------
84 a09r4dwjpv01q MYDUAL TABEL 1 93170
.24

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

PARAMETER1 PARAMETER2 PARAMETER3


---------- ---------- ----------
nomor alamat coba

CATATAN: _db_block_hash_buckets = # dari ember hash


_db_blocks_per_hash_latch = # of hash latches
.27

CBC: apa blok panasnya


Bisa didapat dari ASH
File_saat_ini#
Current_block#
Di mana event='latch: rantai cache buffers'
Terkadang file dan blok = 0
Sepertinya terjadi untuk Loop Bersarang
Dapatkan blok panas secara real time
Gunakan Alamat Hash Latch
Ash.p2 = x$[Link]
#.28

Blok Panas: X$[Link]


Diperbarui saat blok dibaca
Diperbarui tidak lebih dari 1 setiap 3 detik
Dapat digunakan untuk menemukan blok yang 'panas'

Catatan: setel kembali ke nol saat siklus blok


melalui cache buffer
#.29
CBC – Waktu Nyata
pilih
hitung(*),
lpad(replace(to_char(p1,'XXXXXXXXX'),' ','0'),16,0) laddr
dari v$active_session_history

dimana acara='latch: rantai buffer cache'


HITUNG(*) ALAMAT
kelompokkan berdasarkan p1;
---------- ----------------
4933 00000004D8108330
pilih [Link], [Link], [Link], [Link]
from x$bh bh, obj$ o
dimana tch > 100
dan hladdr='00000004D8108330'
NAMA DBARFIL DBABLK TCH
dan [Link]#=[Link]
----------- ------- ------ ----
pesan oleh tch
EMP_CLUSTER 4 394 120
#.30

Memasukkan ke dalam satu Kuery


pilih
name, file#, dbablk, obj, tch, hladdr Ini bisa menyesatkan, karena
dari x$bh bh TCH disetel ke 0 setiap rap
, obj$ o sekitar LRU dan itu hanya
di mana
[Link]#(+)=[Link] dan
diperbarui setiap 3
hladdr di detik, jadi dalam kasus ini DUAL
( apakah tabel masalah saya tidak
pilih ltrim(to_char(p1,'XXXXXXXXXX')) MGMT_EMD_PING
dari v$active_session_history
di mana acara seperti 'latch: cache%'
NAMA FILE# DBABLK OBJ TCH HLADDR
kelompokkan menurut p1
------------- ----- ------ ------ --- --------
memiliki count(*) > 5 BBW_INDEX 1 110997 66051 17 6BD91180
) IDL_UB1$ 1 54837 73 18 6BDB8A80
dan tch > 5 TAMPILKAN$ 1 6885 63 20 6BD91180
pesan oleh tch LIHAT$ 1 6886 63 24 6BDB8A80
DUAL 1 2082 258 32 6BDB8A80
DUAL 1 2081 258 32 6BD91180
MGMT_EMD_PING 3 26479 50312 272 6BDB8A80
.31

Blok Baca Konsisten

Keduanya memiliki nomor file yang sama


Saat ini Konsisten dan blok# dan hash
Blok Baca ke ember yang sama
Klon
(XCUR) & (CR)
Batalkan

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

Tuntutan: Terlalu Banyak Buffer di Ember


.33
Salinan Bacaan Konsisten
pilih
hitung(*)
, name
, berkas#
, dbablk CNT NAME FILE# DBABLK HLADDR
, hladdr
dari x$bh bh --- ---------- ------ ------- --------
, obj$ o 14 MYDUAL 1 93170 2C9F4B20
di mana
[Link]#(+)=[Link] dan
hladdr dalam
(
pilih ltrim(to_char(p1,'XXXXXXXXXX'))
dari v$active_session_history
di mana acara seperti 'latch: cache%'
kelompokkan berdasarkan p1

)
kelompokkan berdasarkan nama, file#, dbablk, hladdr

memiliki count(*) > 1


pesan berdasarkan jumlah(*)
#.34

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

Latch: pengendali buffer cache


Buffer dapat dipasang
Kemungkinan meningkat
_db_handles_cached 5
Tidak Didukung
Digunakan saat menyematkan header blok untuk
penggunaan kembali yang diharapkan
#.36

Tunggu Buffer Gratis


Cache Blok Data kekurangan buffer gratis
Melodi oleh
Tingkatkan blok data
Cobalah untuk menyetel DBWR

Meningkatkan SQL yang Tidak Efisien


meminta sejumlah besar blok
#.37

Tunggu Buffer Gratis


Mencari Blok Gratis

Jika blok data tidak ada di cache


Dapatkan blok dan header gratis di cache buffer
Baca dari disk
Perbarui header gratis
Baca blok ke dalam cache buffer

Butuh Blok Gratis untuk Membaca di Blok Data Baru


#.38

Menemukan Blok Gratis


Ketika sebuah sesi membaca sebuah blok

Ke dalam cache buffer bagaimana


it find aFREEspot? Bayangan
Proses
.39

Mencari Blok Gratis


Buffer
pengait Hash Blok Data
ember Header

1. Susun Header Buffer ke dalam Daftar LRU


2. Pindai LRU untuk blok kosong
.40

Buffer Cache LRU

= 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

NXT_REPL 03C39478 03C38638 03C385F4


PRV_REPL 03C38514 03C38620 03C38554
.43

Daftar LRU Buffer Cache


#.44
Daftar LRU Buffer Cache
Rantai Header Buffer LRU
Cache Buffer
.45

Latch Cache Buffers LRU


Header Buffer
MRU Latch LRU LRU

Panas Dingin
LRU = Least Recently Used
MRU = Most Recently Used

Satu Kunci LRU melindungi daftar terkait selama perubahan pada


daftar
#.46
Sesi Mencari Gratis
Blok
MRU Header Buffer LRU

1. Pergi ke ujung LRU dari blok data


2. Cari blok non-kotor pertama
3. Jika mencari terlalu banyak pos DBWR untuk dibuat
gratis Session
4. Tunggu Buffer Gratis Bayangan
#.47

Solusi Tunggu Buffer Gratis


Nada oleh
Tingkatkan blok data
Coba sesuaikan DBWR
ASYNC
Jika tidak ada ASYNC, gunakan I/O Slaves (dbwr_io_slaves)

Multiple DBWR (proses_penulis_db)


I/O Langsung
Menyesuaikan SQL yang Tidak Efisien

meminta jumlah blok yang besar


.48
Sesi Mencari Blok Gratis
Pengunci LRU
MRU LRU

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

Daftar Kotor Header Buffer LRUW

Latch LRU juga mencakup


Daftar blok kotor DBWR
DBWR
.50

Cache Buffers LRU Latch


MRU LRU

Titik Tengah
Penyisipan

Oracle Melacak jumlah sentuhan blok.


blok didorong ke ujung LRU, jika jumlah sentuhnya
adalah 3 atau lebih, itu dipromosikan ke ujung MRU
.51
Solusi: Beberapa Set
Set 1

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

Result : lots of buffer cache churn


Diharapkan untuk mendapatkan "latch: rantai buffer cache"
LRU
#.54

simulator kunci lru


.55
CBC – Penyelidikan Lebih Lanjut
pilih * dari v$event_name
di mana nama = 'bebas kunci'
PARAMETER1 PARAMETER2 PARAMETER3
---------- ---------- ----------
pilih p2, hitung(*) nomor alamat mencoba

dari v$active_session_history
di mana acara='bebas kunci'
P2 HITUNG(*)
kelompokkan berdasarkan p2 ---------- ----------
127 3556

pilih * dari v$latchname di mana latch#=127


LATCH# NAME
---------- --------------
127 simulator lru latch
#.56
db_cache_advice
Ubah sistem set db_cache_advice=off;

Grup "lain" adalah


sangat kecil
dibandingkan dengan I/O
waktu tunggu – bukan sebuah

masalah
#.57

Cache Buffers LRU Latch :


Solusi Lain
Tingkatkan Ukuran Buffer Cache
Menggunakan beberapa buffer cache
Simpan, daur ulang

Kemungkinan meningkatnya _db_block_lru_latches


Tidak didukung
.58

Menunggu Sibuk Buffer

Pengguna 1 mencoba mengubah header buffer


Pengguna 2 memiliki header buffer "terkunci" (terpaku)

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;

OBJ OTYPE SQL_ID KELAS


------ ------ ------------- ------------------
TOTO1 TABEL 8gz51m9hg5yuf blok data
TOTO1 TABEL 8gz51m9hg5yuf blok data
TOTO1 TABEL 8gz51m9hg5yuf header segmen
TOTO1 TABEL 8gz51m9hg5yuf blok data
#.66
Alternatif untuk ASH: AWR
pilih
to_char(BEGIN_INTERVAL_TIME,'DD-MON HH:MI')
[Link]
s.BUFFER_BUSY_WAITS_DELTA
dari dba_hist_seg_stat s,
dba_hist_snapshot sn,
obj$ o
di mana
BUFFER_BUSY_WAITS_DELTA > 100
dan sn.snap_id = s.snap_id
dan [Link]# = [Link]#;
TO_CHAR(NAMA BEGI DELTAN_BUFFER_BUSY_WAITS
------------ ----- ----------------------
11-JAN 10:21 TOTO1 58447
#.67

Contoh: BBW dengan Sisipkan


Penyisipan bersamaan akan memasukkan ke dalam yang sama
blok
Setiap sesi harus menunggu sesi sebelumnya
untuk menyelesaikannya adalah menulis

Biasanya cukup cepat


Ketegangan meningkat pada aplikasi yang sangat bersamaan
Lack of Free Lists
Tidak Menggunakan ASSM (Ruang Segmen Otomatis)
Manajemen
.68

Kekurangan Daftar Gratis

4 Sesi sedang berjalan


Masukkan ke dalam toto
nilai (null, 'a');
Komit
S1 S2 S3 S4
OBJN OTYPE FILE BLOCKN SQL_ID BLOCK_TYPE
----------- ------ ------ ------ ------------- ------------
TABEL TOTO1 54962 16 45012 8gz51m9hg5yuf blok data
54962 TOTO1 TABEL 16 161 8gz51m9hg5yuf header segmen
#.69

Solusi1: Daftar Gratis

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

Bitmap Level 2 Data


Blok
Blok

Tingkat 1 Tingkat 1 Tingkat 1


.72
Tablespace Types : ASSM
pilih
tablespace_name,
manajemen_jangkauan LOKAL,
TABLESPACE_NAME LOCAL EXTENTS ASSM
--------------- ---------- --------- ------
SISTEM LOKAL DOKUMEN SISTEM
dariUNDOTBS1
dba_tablespaces LOKAL PANDUAN SISTEM
SYSAUX LOKAL SISTEM OTOMATIS
TEMP UNIFORM LOKAL MANUAL
SISTEM buat tablespace data2
USERSLOCAL MOBIL
SISTEM datafile '/d3/kyle/data2_01.dbf'
LOKAL CONTOH OTOMATIS
SISTEM ukuran 200MDATALOKAL MANUAL
manajemen ruang segmen otomatis;
#.73

BBW: ASSM
Pertimbangkan untuk menggunakan Freelists daripada ASSM

Biasanya menunggu pada blok ASSM harusnya


terlalu kecil untuk pantas menggunakan Freelists
ASSM lebih mudah, dikelola secara otomatis

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

Sesi 1 Indeks yang meningkat


kunci membuat panas
Sesi 2 tepat di depan
daun indeks
Session 3
.75

BBW pada Indeks : Rekomendasi ADDM

Juga pertimbangkan untuk "membalikkan" kunci


#.76

Contoh: BBW di RBS


JIKA BBW terjadi pada RBS gaya lama
Kelas# > 18
Beralih ke UNDO
Gaya lama RBS, DBA harus menentukan jumlah RBS
Segmen
Dengan UNDO, itu dikelola secara otomatis

ubah sistem set undo_management=otomatis lingkup=spfile;


.77
BBW dan RBS Segs
Pilih CURRENT_OBJ#||' '||o.object_name objn,
o.object_type otype,
FILE_SEKARANG# filen
BLOK_SAAT_IN# blockn,
ash.SQL_ID
[Link] ||' '||to_char(ash.p3) jenis_bagian
dari v$active_session_history ash,
(pilih rownum class#, kelas dari v$waitstat) w,
semua_objek o
dimana acara='buffer busy waits'
dan [Link]#(+)=ash.p3
dan o.object_id (+)= ash.CURRENT_OBJ#
Urutkan berdasarkan sample_time;
OBJN OTYPE FILEN BLOCKN SQL_ID TIPE_BLOK
----------- ------ ------ ------ ------------- ------------
54962 TOTO1 MEJA 16 45012 8gz51m9hg5yuf blok data
54962 TOTO1 MEJA 16 161 8gz51m9hg5yuf header segmen
0 14 9 8gz51m9hg5yuf 87
0 14 9 8gz51m9hg5yuf 87
#.78

Investigasi Lebih Lanjut RBS


Old Style RBS if Class# > 18

P1 P2 P3 SQL_ID HITUNG(*) KELAS


-- ------ -- ------------- --------
------------------
14 9 87 72wa5hjpzr0by 1
14 9 87 72wa5hjpzr0by 1
14 9 87 3gkmtvxzu6p2m
pilih nama_segmen,
14 9 87 3gkmtvxzu6p2msegment_type
6 561325 1 7zx1krfcgn88t dari dba_extents
14 9 87 8s29zyzr55z2t
di mana file_id = P1
SEGMENT_NAME SEGMENT_TYPE dan P2 antara
-------------- -------------- block_id dan block_id + blocks - 1;
R2 ROLLBACK
.79

ADDM menemukan gaya lama RBS


.80
BBW: Header File
Menanyakan ASH, pastikan
P1=berkas_saat_ini#
P2=blok_saat_ini#
Jika tidak, gunakan p1, p2 dan tidak current_object#
Time P1 P2 OBJN OTYPE FN BLOCKN BLOCK_TYPE
----- --- --- ---- ----- -- ------ -----------------
11:44 202 2 -1 0 0 blok header file
11:44 202 2 TOTO TABEL 1 60218 blok header file
11:44 202 2 TOTO TABEL 1 60218 blok header file
11:44 202 2 TOTO TABEL 1 60218 blok header file
11:44 202 2 TOTO TABEL 1 60218 blok header file

PILIH A.OBJECT_ID DARI SEMUA_OBJEK A,


(PILIH * DARI SEMUA_OBJEK DI MANA ROWNUM < 1000) B
ORDER BY A.OBJECT_NAME
#.81
BBW : Header Berkas
Time P1 P2 OBJN OTYPE FN BLOCKN BLOCK_TYPE
----- --- --- ---- ----- -- ------ -----------------
11:44 202 2 TOTO TABEL 1 60218 blok header file

ADDM tidak banyak bicara

Solusi adalah membuat extent awal dan selanjutnya lebih besar di Temp Table Space
.82

tulis tunggu lengkap

Biasanya terjadi bersamaan dengan buffer gratis


Diperbaiki oleh

Tingkatkan cache blok data


Terjadi karena bayangan ingin mengakses blok
yang saat ini sedang ditulis ke disk oleh DBWR
juga pernah melihatnya terjadi ketika ada banyak penulisan untuk disortir
penantian berada di blok 2 dari file ruang tabel sementara
#.83
Tulis Tunggu Lengkap
LRU

Daftar Kotor Header Buffer LRUW

Sesi
DBWR
n
.84
Penghapus Buffer
Cache buffer diperbesar secara dinamis

Ubah sistem set db_cache_size=50M;

V$SGA_DYNAMIC_COMPONENTS menampilkan informasi


tentang komponen SGA dinamis. Tampilan ini merangkum
informasi berdasarkan semua operasi pengubahan ukuran SGA yang telah selesai sejak
penyalaan instans.
V$SGA_CURRENT_RESIZE_OPS menampilkan informasi
tentang operasi pengubahan ukuran SGA yang saat ini sedang berlangsung. Sebuah
operasi dapat menjadi pertumbuhan atau penyusutan dari komponen SGA dinamis.

V$SGA_DYNAMIC_FREE_MEMORY menampilkan informasi


tentang jumlah memori SGA yang tersedia untuk SGA dinamis di masa depan
operasi pengubahan ukuran.
.85

Ringkasan Tunggu Cache Buffer


1. latch: rantai buffer cache - temukan SQL
Hilangkan titik panas
pengait: rantai lru buffer cache - meningkatkan set
Tunggu Buffer Gratis - tingkatkan ukuran cache
Tunggu Sibuk Buffer
Indeks : mengurangi titik panas, membagi
Data DML : tambahkan daftar gratis atau gunakan ASSM

Header Segmen File: melihat pada tingkat tinggi


alokasi
5. Tulis Tunggu Lengkap - tingkatkan ukuran cache

Anda mungkin juga menyukai