2009-05-05 22 views
7

Tôi đang xem xét thêm chỉ mục vào bảng Oracle, nhưng tôi muốn ước tính kích thước của chỉ mục đầu tiên sau khi nó được xây dựng (tôi không cần kích thước chính xác - chỉ là ước tính.)Làm cách nào để ước tính kích thước của chỉ mục Oracle?

Giả sử tôi có quyền truy cập vào tất cả siêu dữ liệu về bảng (số hàng, cột, kiểu dữ liệu cột, v.v.) mà tôi có thể thực hiện bất kỳ truy vấn Oracle SQL tùy ý nào để nhận thêm dữ liệu về trạng thái hiện tại của bảng và Tôi biết những gì tôi muốn định nghĩa chỉ mục được, làm thế nào tôi có thể ước tính kích thước này?

Trả lời

10

Bạn có thể sử dụng các Oracle Capacity planning and Sizing Spreadsheets này.

Đối với một cái gì đó không phải là khá toàn diện, nếu bạn chỉ muốn trở lại của các loại phong bì rough estimates for the index:

Tính kích thước trung bình của mỗi các cột tạo nên chỉ số chủ chốt và tổng hợp các cột cộng với một hàng và thêm 2 byte cho tiêu đề hàng chỉ mục để có kích thước hàng trung bình. Bây giờ thêm chỉ là một chút với giá trị PCTFREE cho chỉ số để đến với một yếu tố chi phí, có lẽ 1,125 cho PCTFREE của 10

số hàng bảng chỉ mục X trung bình hàng len X 1,125

Lưu ý - nếu chỉ mục chứa các cột có thể vô hiệu thì mỗi hàng trong bảng có thể không xuất hiện trong chỉ mục. Trên một chỉ số cột đơn lẻ trong đó 90% các cột là không có chỉ 10% sẽ đi vào chỉ mục .

So sánh ước tính với phạm vi không gian bảng phương pháp phân bổ và điều chỉnh câu trả lời cuối cùng nếu cần.

Cũng là một yếu tố chi phí lớn hơn có thể tốt hơn như chỉ số càng lớn từ dữ liệu hơn được lập chỉ mục các chi nhánh hơn khối cần thiết để hỗ trợ cấu trúc index và tính toán thực sự chỉ số liệu cho các khối lá.

2

Bạn có thể ước tính kích thước của một chỉ số bằng cách chạy một explain plan trên báo cáo kết quả tạo chỉ mục:

create table t as 
    select rownum r 
    from dual 
    connect by level <= 1000000; 

explain plan for 
    create index i on t (r); 

select * 
from table(dbms_xplan.display(null, null, 'BASIC +NOTE')); 

PLAN_TABLE_OUTPUT                               
-------------------------------------------------------------------------------------------------------------------------------------------- 
Plan hash value: 1744693673                             

---------------------------------------                          
| Id | Operation    | Name |                          
---------------------------------------                          
| 0 | CREATE INDEX STATEMENT |  |                          
| 1 | INDEX BUILD NON UNIQUE| I |                          
| 2 | SORT CREATE INDEX |  |                          
| 3 | TABLE ACCESS FULL | T |                          
---------------------------------------                          

Note                                   
-----                                  
    - estimated index size: 4194K bytes  

Nhìn vào "Lưu ý" ở phía dưới: ước tính kích thước chỉ mục: 4194K bytes

0

Bắt đầu từ phiên bản 10gR2 bạn có thể sử dụng DBMS_SPACE.CREATE_INDEX_COST

DBMS_SPACE.CREATE_INDEX_COST (
    ddl    IN VARCHAR2, 
    used_bytes  OUT NUMBER, 
    alloc_bytes  OUT NUMBER, 
    plan_table  IN VARCHAR2 DEFAULT NULL); 

Từ tài liệu: "Quy trình này xác định chi phí tạo chỉ mục trên bảng hiện có. Đầu vào là câu lệnh DDL sẽ được sử dụng để tạo chỉ mục. Quy trình sẽ xuất bộ nhớ cần thiết để tạo chỉ mục."

Xem https://docs.oracle.com/database/121/ARPLS/d_space.htm#ARPLS68101

Ví dụ (cũng tại sqlfiddle):

DECLARE 
ub NUMBER; 
ab NUMBER; 
BEGIN 
DBMS_SPACE.CREATE_INDEX_COST (
    ddl    => 'CREATE INDEX x_1 ON t1 (a,b,c) TABLESPACE users', 
    used_bytes  => ub, 
    alloc_bytes  => ab 
    ); 
DBMS_OUTPUT.PUT_LINE('Used MBytes: ' || ROUND(ub/1024/1024)); 
DBMS_OUTPUT.PUT_LINE('Alloc MBytes: ' || ROUND(ab/1024/1024)); 
END; 
/

Output:

Used MBytes: 1 
Alloc MBytes: 2 
+0

Chỉ 8 năm sau khi tôi cần nó - nhưng, tiện dụng, dù sao :) – Jared

Các vấn đề liên quan