Managing Optimizer Statistics Oracle Database | Cập nhật thống kê Statistics trong Oracle Database

Quản lý thống kê của Oracle Optimizer là một phần quan trọng trong việc đảm bảo hiệu suất tối ưu của cơ sở dữ liệu. Thống kê dữ liệu giúp Oracle Optimizer đưa ra các quyết định chính xác về cách thức thực hiện các câu lệnh SQL. Dưới đây là các bước và thực hành tốt nhất để quản lý thống kê Optimizer:

Managing Optimizer Statistics Oracle Database | Cập nhật thống kê Statistics trong Oracle Database

1. Thu thập thống kê (Gathering Statistics)

Thu thập thống kê cho một bảng

Sử dụng gói DBMS_STATS để thu thập thống kê cho một bảng cụ thể:

BEGIN
DBMS_STATS.GATHER_TABLE_STATS(
ownname => 'DUONGUSER',
tabname => 'TAB1',
cascade => TRUE
);
END;
/
  • ownname: Tên của schema chứa bảng.
  • tabname: Tên của bảng.
  • cascade: Nếu là TRUE, thu thập thống kê cho cả các chỉ mục liên quan.

Thu thập thống kê cho toàn bộ schema

Thu thập thống kê cho tất cả các bảng trong một schema:

BEGIN
DBMS_STATS.GATHER_SCHEMA_STATS(
ownname => 'DUONGUSER',
cascade => TRUE
);
END;
/

Thu thập thống kê cho toàn bộ cơ sở dữ liệu

BEGIN
DBMS_STATS.GATHER_DATABASE_STATS(cascade => TRUE);
END;
/

2. Lập lịch thu thập thống kê tự động

Oracle có một công cụ tự động để thu thập thống kê được gọi là Auto Task. Nó thường được lập lịch chạy vào thời gian ít sử dụng tài nguyên (thường là vào ban đêm).

Kiểm tra trạng thái Auto Task

SELECT client_name, status
FROM dba_autotask_client;

word image 3350 1

Kiểm tra lịch trình auto task:

SELECT * FROM dba_scheduler_windows;

word image 3350 2

Bật hoặc tắt Auto Task

BEGIN
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL
);
END;
/

Tắt Auto Task:

BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL
);
END;
/

3. Kiểm tra và xóa thống kê

Kiểm tra thống kê hiện tại

Bạn có thể kiểm tra thời gian cuối cùng thống kê được thu thập cho một bảng:

SELECT table_name, last_analyzed
FROM dba_tab_statistics
WHERE owner = 'SCHEMA_NAME';

Xóa thống kê

Xóa thống kê cho một bảng:

BEGIN
DBMS_STATS.DELETE_TABLE_STATS(
ownname => 'SCHEMA_NAME',
tabname => 'TABLE_NAME'
);
END;
/

Xóa thống kê cho toàn bộ schema:

BEGIN
DBMS_STATS.DELETE_SCHEMA_STATS(
ownname => 'SCHEMA_NAME'
);
END;
/

4. Thu thập thống kê tạm thời (Dynamic Sampling)

Dynamic Sampling có thể được sử dụng khi các thống kê không có sẵn hoặc không chính xác. Dynamic Sampling cho phép Optimizer thu thập thống kê tạm thời khi thực thi câu lệnh SQL.

Bạn có thể bật Dynamic Sampling cho một phiên làm việc bằng cách sử dụng hint DYNAMIC_SAMPLING:

SELECT /*+ DYNAMIC_SAMPLING(2) */ *
FROM emp
WHERE dept_id = 10;

Quản lý thống kê hiệu quả giúp Oracle Optimizer hoạt động tốt nhất, đảm bảo hiệu suất truy vấn tối ưu và khả năng mở rộng của cơ sở dữ liệu.

 

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận