Oracle
 sql >> база данни >  >> RDS >> Oracle

Заявка за намиране на пълни сканирания на таблицата в oracle

Много пъти производителността на базата данни ще бъде бавна. Първо трябва да разберем   дали се извършва сканиране на пълна таблица на голяма таблица.

Нека първо да проверим какво е пълно сканиране на таблица и след това ще видим заявката за намиране на пълно сканиране на таблицата в oracle

Какво е сканиране на пълна таблица

  • Пълното сканиране на таблицата е един от методите за достъп, използвани от оптимизатора. При това Всички блокове в таблицата (до HWM) се сканират и се прилагат условията за филтриране на клаузата WHERE и се връщат редове, които отговарят на условието за филтриране. Обяснете плана ще се покаже така
Execution Plan
TABLE ACCESS FULL OF HZ_PARTIES
  • Пълното сканиране на таблицата сканира таблицата с помощта на четене на множество блокове. Множество блокове, сканирани за всяко IO –> се правят по-малко операции за IO
  • db_multiblock_read_count init.ora параметърът определя броя на мултиблоковете. Последна версия, самият oracle коригира този параметър според системата и не е необходимо да го дефинирате
  • Какво е HWM – High Water Mark:Това е границата, която разделя блоковете, които съдържат или са съдържали данни, от блоковете, в които никога не са били вмъквани. Броят на блоковете под HWM може да бъде получен чрез колоната блокове на изгледа dba_tables

заявка за намиране на пълни сканирания на таблицата в 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
/

Горната заявка ще отчете всяко текущо пълно сканиране на таблицата, което се извършва в базата данни. Можете да намерите името на таблицата от заявката по-долу

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

Ако искате да видите историята на цялата текуща сесия в базата данни за пълно сканиране на таблицата, можем да използваме заявката по-долу

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
/

Ако искате да намерите целия sql, кеширан в кеша на библиотеката за изявление за пълно сканиране на таблица

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

Можете да получите пълния текст от sql_id, като използвате заявката по-долу

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

Как да избегнем пълно сканиране на таблица в Oracle

Пълното сканиране на таблицата не е необходимо зло. Оптимизаторът на Oracle избира плана въз основа на точка от данни. Ако е избрал пълно сканиране на данни, то със сигурност го е намерил за добро. Също така Доста често сканирането на индекса може да не е добро за заявката и е най-скъпо от пълното сканиране на таблицата. Така че трябва да анализираме задълбочено, преди да вземем каквото и да е решение за пълно сканиране на таблица

Следват някои от нещата, които трябва да проверите
(a) Остаряла статистика на оптимизатора:Моля, проверете дали статистическите данни на оптимизатора, налични в таблиците, са актуални и не се различават много от действителните данни
(b) Проверете индекси и индекс фактор на клъстериране:Възможно е да пропуснете правилните индекси
(c) Заявката може да използва паралелна клауза и така избира пълно сканиране на таблицата като оптимален план
(d) Неправилни настройки на параметрите за Optimizer_mode,optimizer_index_cost_adj, optimizer_index_caching

Понякога стартирането на съветника за настройка на sql в заявката помага

Сродни статии
обяснете плана в oracle :Всичко за Explain Plan в Oracle, Как да четете плана за обяснение на oracle за проблем, свързан с производителността, как да намерите плана за обяснение за заявка в курсора
какво е логично, прочетено в oracle:какво е логическо четене в oracle и физически I/O в Oracle, Кое е по-добро логически и физически I/O по отношение на производителността, заявки за намиране на физически четения
sql tuning advisor :Как да стартирате sql tuning advisor за sql_id в курсора кеш, как се създава и изпълнява задачата за настройка на sql, за да получите препоръката
намерете индекси на таблица в oracle :разгледайте тази статия, за да намерите заявки как да намерите индекси на таблица в oracle, избройте всички индекси в схемата ,index status, index column
bind променливи в oracle :Bind променлива са заместник за стойности в sqlplus и PLSQL и се заменя със стойности, когато операторът се изпълнява
как да проверите sql профил в oracle :Проверете излезте в тази публикация за това как да проверите sql профил в oracle, как да намерите съдържанието на sql prof ile, как да махна 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. Топ заявки за първичен ключ в Oracle с примери

  2. Как работи contains() в PL-SQL?

  3. Как да попълните набора от данни с C# от базата данни на Oracle

  4. Oracle, Направете датата и часа първия ден от месеца

  5. Агрегат на Oracle за свързване на низове със запетая и за писане на персонализирани агрегати