Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Permintaan untuk menemukan pemindaian tabel lengkap di Oracle

Sering kali kinerja database menjadi lambat. Pertama-tama kita harus mencari tahu  apakah ada pemindaian tabel penuh yang sedang berlangsung.

Mari kita periksa dulu apa itu Pemindaian tabel penuh dan kemudian Kita akan melihat kueri untuk menemukan pemindaian tabel lengkap di oracle

Apa itu Pemindaian tabel Lengkap

  • Pemindaian tabel lengkap adalah salah satu metode akses yang digunakan oleh Pengoptimal. Dalam hal ini, Semua blok dalam tabel (hingga HWM) dipindai dan kondisi filter klausa WHERE diterapkan dan baris yang memenuhi kondisi filter dikembalikan. Jelaskan rencananya akan tampil seperti ini
Execution Plan
TABLE ACCESS FULL OF HZ_PARTIES
  • Pemindaian tabel penuh memindai tabel menggunakan pembacaan beberapa blok. Beberapa blok dipindai untuk setiap IO –> lebih sedikit operasi IO yang dilakukan
  • db_multiblock_read_count parameter init.ora menentukan jumlah multiblok. Versi terbaru, Oracle sendiri menyesuaikan parameter ini sesuai Sistem dan Anda tidak perlu mendefinisikannya
  • Apa itu HWM – High Water Mark :Batas yang memisahkan antara blok yang berisi atau berisi data dari blok yang belum pernah dimasukkan. Jumlah blok di bawah HWM dapat diperoleh melalui kolom blok tampilan dba_tables

kueri untuk menemukan pemindaian tabel lengkap di oracle

col event format a25
col module format a50
col File format 9999
col Block format 9999999
set lines 130
set trimspool on
select sessw.SID, sessw.EVENT, sessw.p1 "File",sessw.p2 "Block", s.MODULE
from v$session_wait sessw, v$session sess
where sessw.sid = sess.sid
and sessw.event like '%scattered%'
order by 1
/

Kueri di atas akan melaporkan pemindaian tabel lengkap saat ini yang ada di database. Anda dapat menemukan nama tabel dari kueri di bawah

select segment_name
from dba_extents
where file_id = &fileid
and &block between block_id and block_id + blocks - 1
;

Jika Anda ingin melihat riwayat semua sesi saat ini dalam database untuk pemindaian tabel lengkap, kita dapat menggunakan kueri di bawah ini

column user_process heading "Name |SID" format a20;
column long_scans heading "Long Scans" format 999,999,999;
column short_scans heading "Short Scans" format 999,999,999;
column rows_retreived heading "Rows Retrieved" format 999,999,999;
set linesize 1000
set timing on
select ss.username||'('||se.sid||') ' "USER_PROCESS",
sum(decode(name,'table scans (short tables)',value)) "SHORT_SCANS",
sum(decode(name,'table scans (long tables)', value)) "LONG_SCANS",
sum(decode(name,'table scan rows gotten',value)) "ROWS_RETRIEVED"
from v$session ss, v$sesstat se, v$statname sn
where se.statistic# = sn.statistic#
and (name like '%table scans (short tables)%'
or name like '%table scans (long tables)%'
or name like '%table scan rows gotten%' )
and se.sid = ss.sid
and ss.username is not null
group by ss.username||'('||se.sid||') '
order by LONG_SCANS desc
/

Jika Anda ingin menemukan semua sql yang di-cache di cache Library untuk pernyataan pemindaian tabel lengkap

select sql_id,object_owner,object_name from V$SQL_PLAN where
operation='TABLE ACCESS' and
options='FULL' and
object_owner <> 'SYS';

Anda bisa mendapatkan teks lengkap dari sql_id menggunakan kueri di bawah ini

SELECT sql_text, parsing_schema_name, module
FROM v$sql
WHERE sql_id = '&1'

Cara Menghindari Pemindaian tabel penuh di Oracle

Pemindaian tabel penuh tidak perlu jahat. Pengoptimal Oracle memilih paket berdasarkan titik data. Jika telah memilih pemindaian data lengkap, maka itu pasti bagus. Juga Cukup sering pemindaian indeks mungkin tidak baik untuk kueri dan paling mahal daripada pemindaian tabel penuh. Jadi kita perlu menganalisa secara menyeluruh sebelum mengambil keputusan apapun pada Full table scan

Berikut adalah beberapa hal yang perlu diperiksa
(a) Statistik Pengoptimal Kedaluwarsa:Harap periksa apakah statistik pengoptimal yang tersedia di tabel adalah terkini dan tidak jauh berbeda dari data sebenarnya
(b) Periksa indeks dan indeks faktor pengelompokan :Anda mungkin kehilangan indeks yang tepat
(c) Kueri mungkin menggunakan klausa paralel sehingga memilih Pemindaian tabel lengkap sebagai rencana optimal
(d) Pengaturan parameter salah untuk Optimizer_mode,optimizer_index_cost_adj, optimizer_index_caching

Terkadang menjalankan sql tuning advisor pada kueri membantu

Artikel Terkait
menjelaskan rencana di oracle :Semua tentang Menjelaskan Rencana di Oracle, Cara membaca Oracle menjelaskan rencana untuk masalah terkait kinerja, bagaimana menemukan rencana penjelasan untuk kueri di kursor
apa yang logis dibaca di oracle :apa itu pembacaan logis di Oracle dan I/O Fisik di Oracle,Mana I/O logis dan fisik yang lebih baik dalam hal kinerja,kueri untuk menemukan pembacaan fisik
sql tuning advisor :Cara menjalankan sql tuning advisor untuk sql_id di Kursor cache, bagaimana tugas penyetelan sql dibuat dan dijalankan untuk mendapatkan rekomendasi
menemukan indeks pada tabel di oracle :lihat artikel ini untuk menemukan pertanyaan tentang cara menemukan indeks pada tabel di oracle, daftar semua indeks dalam skema ,status indeks, kolom indeks
variabel ikat di Oracle :Variabel ikat adalah pengganti nilai dalam sqlplus dan PLSQL dan diganti dengan nilai saat pernyataan dijalankan
cara memeriksa profil sql di Oracle :Periksa keluar posting ini tentang cara memeriksa profil sql di oracle, cara menemukan konten sql prof ile, cara menghapus profil sql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rangkaian Uji Pengaturan AOL/J

  2. Oracle 12.2.0.1 datang pada tahun 2016

  3. hapus baris duplikat dari Oracle

  4. Apa arti kesalahan Oracle berikut:indeks kolom tidak valid?

  5. ORA-00054:sumber daya sibuk dan dapatkan dengan SEKARANG ditentukan atau batas waktu kedaluwarsa