2010-06-18 34 views
8

Tôi có một số bảng trong môi trường Oracle mà tôi đã tìm thấy có thể hưởng lợi từ các chỉ mục mới. Tuy nhiên, chúng là các bảng lớn, từ đăng ký 1M đến 300M, vì vậy trước tiên tôi sẽ thử ước tính thời gian cần thiết để tạo chỉ mục, vì vậy tôi sẽ biết ít nhất thứ tự độ lớn cần thiết (giờ, ngày, tuần)?Ước tính thời gian tạo chỉ mục trong oracle

Có một số chẩn đoán/chức năng oracle/quy tắc của ngón tay cái có thể giúp tôi giải quyết vấn đề này?

Trả lời

7

Có quá nhiều yếu tố cần xem xét, chẳng hạn như tốc độ máy, bộ nhớ, v.v. có thể ảnh hưởng đến thời gian tạo. Ngoài ra, bản chất của dữ liệu có thể có ảnh hưởng đáng kể đến thời gian tạo.

Điều tôi sẽ làm là chọn một trong các bảng lớn hơn, tạo chỉ mục trên đó và xem mất bao lâu. Sau đó, dành thời gian cần thiết và chia cho số hàng trong bảng và điều đó sẽ cho bạn một số liệu thô cho những gì mong đợi. Lưu ý một lần nữa, điều này sẽ không chính xác, nhưng nó chỉ là một quy tắc nhỏ mà bạn có thể sử dụng. Nó sẽ thay đổi rất nhiều vì một số bảng có nhiều cột hơn, giá trị cột thưa thớt ít hơn, v.v., nhưng đó là điểm bắt đầu.

Ex. It takes 3600 seconds to create a index on table X, which has 3 million rows. 
So the metric is 3600/3,000,000 = 0.0012 seconds per row. 

So if table Y has 8 million rows, you could expect 
.0012 * 8,000,000 = 9600 seconds (or 160 minutes) to create the index. 
+0

điểm tốt để bắt đầu lý do. – kurast

5

Oracle có thể ước tính thời gian tạo chỉ mục và kích thước chỉ mục với EXPLAIN PLAN lệnh:

Schema mẫu

--Create a table with 1 million rows. 
drop table table1; 
create table table1(a number); 
insert into table1 select level from dual connect by level <= 1000000; 
--Gather statistics. 
begin 
    dbms_stats.gather_table_stats(user, 'table1'); 
end; 
/
--Estimate index creation and size. 
explain plan for create index table1_idx on table1(a); 
select * from table(dbms_xplan.display); 

Kết quả

Plan hash value: 290895522 

------------------------------------------------------------------------------------- 
| Id | Operation    | Name  | Rows | Bytes | Cost (%CPU)| Time  | 
------------------------------------------------------------------------------------- 
| 0 | CREATE INDEX STATEMENT |   | 1000K| 4882K| 683 (2)| 00:00:10 | 
| 1 | INDEX BUILD NON UNIQUE| TABLE1_IDX |  |  |   |   | 
| 2 | SORT CREATE INDEX |   | 1000K| 4882K|   |   | 
| 3 | TABLE ACCESS FULL | TABLE1  | 1000K| 4882K| 254 (5)| 00:00:04 | 
------------------------------------------------------------------------------------- 

Note 
----- 
    - automatic DOP: skipped because of IO calibrate statistics are missing 
    - estimated index size: 24M bytes 

Ghi chú

Thời gian tạo thực tế trên hệ thống của tôi là 2,5 giây, so với ước tính 10 giây. Nhưng điều đó vẫn đủ tốt nếu bạn chỉ đang tìm kiếm một thứ tự ước tính độ lớn. Độ chính xác phụ thuộc vào việc có thống kê bảng chính xác cũng như tốt system statistics. (Nhưng hãy cẩn thận trước khi bạn thu thập số liệu thống kê hệ thống, nó có thể ảnh hưởng đến rất nhiều kế hoạch thực hiện!) Bạn có thể fiddle thêm với các thiết lập bằng cách sửa đổi thủ công sys.aux_stats$. Đó là một trong số ít các bảng SYS mà bạn có thể sửa đổi, mặc dù bạn vẫn cần phải cẩn thận.

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