Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn tìm bản quét toàn bảng trong oracle

Đôi khi, hiệu suất của cơ sở dữ liệu sẽ bị chậm.

Đầu tiên chúng ta hãy xem Quét toàn bảng là gì và sau đó Chúng ta sẽ thấy truy vấn để tìm quét toàn bảng trong oracle

Quét toàn bảng là gì

  • Quét toàn bộ bảng là một trong những phương pháp truy cập được Trình tối ưu hóa sử dụng. Trong phần này Tất cả các khối trong bảng (tối đa HWM) được quét và các điều kiện lọc mệnh đề WHERE được áp dụng và các hàng thỏa mãn điều kiện lọc được trả về. Giải thích kế hoạch sẽ hiển thị như thế này
Execution Plan
TABLE ACCESS FULL OF HZ_PARTIES
  • Quét toàn bộ bảng đã quét bảng bằng cách đọc nhiều khối. Nhiều khối được quét cho mỗi IO -> ít thao tác IO được thực hiện hơn
  • db_multiblock_read_count Tham số init.ora quyết định số lượng nhiều khối. Phiên bản gần đây, oracle tự điều chỉnh thông số này theo Hệ thống và bạn không cần xác định nó
  • HWM là gì - Dấu nước cao:Là giới hạn phân tách các khối chứa hoặc đã chứa dữ liệu khỏi các khối chưa bao giờ được chèn vào. Số lượng khối bên dưới HWM có thể nhận được thông qua cột khối của chế độ xem dba_tables

truy vấn để tìm bản quét toàn bộ bảng trong 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
/

Truy vấn trên sẽ báo cáo mọi quá trình quét toàn bộ bảng hiện tại đang diễn ra trong cơ sở dữ liệu. Bạn có thể tìm thấy tên bảng từ truy vấn bên dưới

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

Nếu bạn muốn xem lịch sử của tất cả phiên hiện tại trong cơ sở dữ liệu để quét toàn bộ bảng, chúng tôi có thể sử dụng truy vấn dưới đây

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
/

Nếu bạn muốn tìm tất cả sql được lưu trong bộ đệm ẩn Thư viện cho câu lệnh quét toàn bảng

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

Bạn có thể lấy toàn bộ văn bản từ sql_id bằng truy vấn dưới đây

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

Cách tránh quét toàn bộ bảng trong Oracle

Quét toàn bộ bảng không phải là điều ác cần thiết. Trình tối ưu hóa Oracle chọn kế hoạch dựa trên điểm dữ liệu. Nếu nó đã chọn quét toàn bộ dữ liệu, thì nó chắc chắn thấy nó tốt. Ngoài ra Quét chỉ mục thường xuyên có thể không tốt cho truy vấn và nó tốn kém nhất sau đó quét toàn bộ bảng. Vì vậy, chúng tôi cần phân tích kỹ lưỡng trước khi đưa ra bất kỳ quyết định nào về việc quét toàn bộ bảng

Sau đây là một số điều cần kiểm tra
(a) Thống kê của Trình tối ưu hóa Cũ:Vui lòng kiểm tra xem thống kê của trình tối ưu hóa có sẵn trên các bảng có hiện tại và không khác nhiều so với dữ liệu thực tế hay không
(b) Kiểm tra chỉ mục và chỉ mục yếu tố phân cụm:Bạn có thể thiếu các chỉ mục phù hợp
(c) Truy vấn có thể đang sử dụng mệnh đề song song và do đó chọn Quét toàn bộ bảng làm phương án tối ưu
(d) Cài đặt tham số không chính xác cho Optimizer_mode, Optimizer_index_cost_adj, Optimizer_index_caching

Đôi khi chạy cố vấn điều chỉnh sql trên truy vấn sẽ giúp ích

Các bài viết có liên quan
giải thích kế hoạch trong oracle:Tất cả về Giải thích kế hoạch trong Oracle, Cách đọc kế hoạch giải thích của oracle cho vấn đề liên quan đến hiệu suất, cách tìm kế hoạch giải thích cho truy vấn trong con trỏ
lôgic đọc trong oracle là gì:là gì đọc logic trong oracle và I / O vật lý trong Oracle, I / O vật lý và logic nào tốt hơn về mặt hiệu suất, truy vấn để tìm các lần đọc vật lý
cố vấn điều chỉnh sql:Cách chạy cố vấn điều chỉnh sql cho sql_id trong Cursor cache, tác vụ điều chỉnh sql được tạo và thực thi như thế nào để nhận đề xuất
tìm chỉ mục trên bảng trong oracle:hãy xem bài viết này để tìm các truy vấn về cách tìm chỉ mục trên bảng trong oracle, liệt kê tất cả chỉ mục trong lược đồ , trạng thái chỉ mục, cột chỉ mục
biến ràng buộc trong oracle:Biến Bind là trình giữ chỗ cho các giá trị trong sqlplus và PLSQL và nó được thay thế bằng các giá trị khi câu lệnh được thực thi
cách kiểm tra hồ sơ sql trong oracle:ra bài này về cách kiểm tra hồ sơ sql trong oracle, cách tìm nội dung của hồ sơ sql ile, cách bỏ hồ sơ 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. Cách sử dụng Oracle SQL * Plus

  2. cách viết truy vấn sql

  3. Tương đương với các bảng bên ngoài Oracle trong SQL Server

  4. Cách điền tập dữ liệu với C # từ cơ sở dữ liệu oracle

  5. ORA-01830:hình ảnh định dạng ngày kết thúc trước khi chuyển đổi toàn bộ chuỗi đầu vào / Chọn tổng trong đó truy vấn ngày