DBMS_STATS là một gói PL/SQL trong Oracle Database được sử dụng để thu thập thống kê cho các đối tượng cơ sở dữ liệu như bảng, chỉ mục, và schema. Thống kê này rất quan trọng để Oracle Optimizer có thể tạo ra các kế hoạch truy vấn hiệu quả.
Dưới đây là các bước và ví dụ về cách sử dụng DBMS_STATS để thu thập thông tin trong Oracle Database.
1. Thu Thập Thống Kê Cho Một Bảng
Bạn có thể thu thập thống kê cho một bảng cụ thể bằng cách sử dụng thủ tục GATHER_TABLE_STATS:
BEGIN DBMS_STATS.GATHER_TABLE_STATS( ownname => 'HR', tabname => 'EMPLOYEES', cascade => TRUE ); END; /
ownname là tên của schema chứa bảng.
tabname là tên của bảng cần thu thập thống kê.
cascade nếu được đặt thành TRUE, sẽ thu thập thống kê cho cả các chỉ mục trên bảng.
2. Thu Thập Thống Kê Cho Một Schema
Bạn có thể thu thập thống kê cho toàn bộ schema bằng cách sử dụng thủ tục GATHER_SCHEMA_STATS:
BEGIN DBMS_STATS.GATHER_SCHEMA_STATS( ownname => 'HR', cascade => TRUE ); END; /
3. Thu Thập Thống Kê Cho Toàn Bộ Cơ Sở Dữ Liệu
Để thu thập thống kê cho toàn bộ cơ sở dữ liệu, bạn sử dụng thủ tục GATHER_DATABASE_STATS:
BEGIN DBMS_STATS.GATHER_DATABASE_STATS( cascade => TRUE ); END; /
4. Thu Thập Thống Kê Cho Các Chỉ Mục
Bạn cũng có thể thu thập thống kê cho một chỉ mục cụ thể bằng cách sử dụng thủ tục GATHER_INDEX_STATS:
BEGIN DBMS_STATS.GATHER_INDEX_STATS( ownname => 'HR', indname => 'EMPLOYEES_IDX' ); END; /
5. Tùy Chỉnh Thông Số Thu Thập Thống Kê
DBMS_STATS cung cấp nhiều tham số để tùy chỉnh việc thu thập thống kê. Dưới đây là một số tham số quan trọng:
estimate_percent: Tỷ lệ mẫu được sử dụng để thu thập thống kê. Giá trị từ 0 đến 100, hoặc DBMS_STATS.AUTO_SAMPLE_SIZE để Oracle tự động chọn.
method_opt: Xác định cách thu thập histogram. Ví dụ: ‘FOR ALL COLUMNS SIZE AUTO’.
degree: Số lượng song song được sử dụng khi thu thập thống kê.
Ví dụ:
BEGIN DBMS_STATS.GATHER_TABLE_STATS( ownname => 'HR', tabname => 'EMPLOYEES', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR ALL COLUMNS SIZE AUTO', degree => 4, cascade => TRUE ); END; /
6. Kiểm Tra Thống Kê Hiện Tại
Bạn có thể kiểm tra thống kê hiện tại bằng cách truy vấn các view như DBA_TAB_STATISTICS, DBA_IND_STATISTICS, và DBA_TAB_COL_STATISTICS.
Kiểm tra thống kê của bảng:
SELECT table_name, num_rows, blocks, last_analyzed FROM dba_tables WHERE table_name = 'EMPLOYEES';
Kiểm tra thống kê của chỉ mục:
SELECT index_name, num_rows, leaf_blocks, last_analyzed FROM dba_indexes WHERE index_name = 'EMPLOYEES_IDX';
7. Xóa Thống Kê
Trong một số trường hợp, bạn có thể muốn xóa thống kê đã thu thập:
Xóa thống kê của bảng:
BEGIN DBMS_STATS.DELETE_TABLE_STATS('HR', 'EMPLOYEES'); END; /
Xóa thống kê của schema:
BEGIN DBMS_STATS.DELETE_SCHEMA_STATS('HR'); END; /
Bằng cách sử dụng DBMS_STATS, bạn có thể thu thập, kiểm tra, và quản lý thống kê cho các đối tượng trong Oracle Database, giúp Oracle Optimizer tạo ra các kế hoạch truy vấn hiệu quả hơn.