2011-12-06 33 views
11

Tôi có một tập lệnh mà tôi sử dụng để tải dữ liệu của mình vào các bảng của tôi trong Oracle (bằng danh sách các câu lệnh chèn). Làm thế nào tôi có thể nhận được thời gian thực hiện của toàn bộ quá trình tải? Tôi đã thử với set timing on, nhưng điều đó mang lại cho tôi một khoảng thời gian cho mỗi câu lệnh chèn chứ không phải toàn bộ quá trình. Các kịch bản được hiển thị dưới đây:Nhận thời gian thực thi tập lệnh sql trong oracle sqlplus

spo load.log 
prompt '**** load data ****' 
set termout off 
@@inserts.sql 
commit; 
set termout on 
prompt '**** done ****' 
spo off 
exit; 

Trả lời

14

Hãy thử điều này, thêm dòng sau ngay từ đầu và nó nhớ lại thời gian hiện tại:

set serveroutput on 
variable n number 
exec :n := dbms_utility.get_time 

Thêm này ở cuối và nó sẽ tính toán thời gian đã trôi qua:

exec :n := (dbms_utility.get_time - :n)/100 
exec dbms_output.put_line(:n) 
+0

Chỉ cần đánh bại tôi với nó .... Hoặc chạy tập lệnh của bạn trong một công cụ như Nhà phát triển SQL hoặc Nhà phát triển PLSQL sẽ tự cho bạn biết thời gian đã trôi qua. – Rene

+0

đầu ra từ hàm này là 'thủ tục PL/SQL đã hoàn tất thành công.' và không phải là thời gian :), có thể sử dụng' systimestamp' để có ngày và vv không? Kịch bản sẽ mất vài giờ và chạy vào ban đêm, vì vậy ngày tháng sẽ rất quan trọng! – aweis

+0

có, ngay trước lối ra của tôi; – aweis

1

Nếu bạn đang ở trên Unix, bạn cũng có thể làm điều đó như thế:

time sqlplus @inserts.sql 

Nó sẽ in:

real 0m9.34s 
user 0m2.03s 
sys  0m1.02s 

Dòng đầu tiên cho tổng thời gian thực hiện.

+0

Vì tôi chưa thể nhận xét về bài đăng của người khác, tôi nhận xét ở đây. Tôi đã chỉnh sửa câu trả lời của PeterPeiGuo ở trên để thêm ** set serveroutput vào **. Nó sẽ hiển thị thông điệp chính xác. – Stamm

+0

Tính năng này không hoạt động đối với các tập lệnh không tự thoát. Ví dụ: với thời gian @catalog.sql, tôi phải làm điều này: 'date; echo exit | sqlplus "/ as sysdba" @ catalog.sql> ~/catalog.out; date' –

3

Những gì bạn mô tả về cơ bản là cách để kiểm tra việc thực thi tập lệnh. Cho dù đó là một thời gian trôi qua, hoặc thời gian bắt đầu và kết thúc cụ thể bạn đang nắm bắt bạn muốn đăng nhập chúng đúng cách để xem mọi thứ diễn ra tốt đẹp (hay không, tại sao không).

Đây là mẫu tương tự như những gì chúng tôi sử dụng để chụp và ghi nhật ký tất cả hoạt động cơ sở dữ liệu mà chúng tôi đang triển khai. Chúng tôi sử dụng nó qua sqlplus.exe cho tất cả các bản cập nhật DDL (ví dụ: CREATE TABLE) và để chèn vào các bảng thiết lập.

--Beginning of all SQL scripts: 
set serveroutput on feedback on echo on verify on sqlblanklines on timing on define on 
col time new_v v_time 
col name new_v v_name 
col user new_v v_user 

select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time from v$database; 

--Creates a new log file every time the script is run, and it's immediately 
--obvious when it was run, which environment it ran in, and who ran it. 
spool &v_time._&v_name._&v_user..log 

--Run the select again so it appears in the log file itself 
select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time  from v$database; 

Đặt phần thân của bạn ở đây.

--End of all SQL scripts: 
select name, USER, to_char(sysdate, 'YYYYMMDD-HH24MISS') time from v$database; 
spool off 
10

Không chắc chắn tại sao mọi người lại làm cho nó trở nên phức tạp. Đơn giản là:

SQL> set timing on 
SQL> select 1 from dual; 

     1 
---------- 
     1 

1 row selected. 

Elapsed: 00:00:00.00 
SQL> 
+5

'đặt thời gian trên' sẽ in thời gian cho mỗi câu lệnh, câu hỏi này là về việc dành thời gian cho toàn bộ tập lệnh. –

10

Câu hỏi cũ nhưng tôi đã tìm thấy cách dễ dàng để đo thời gian chạy tập lệnh bằng sqlplus. Bạn chỉ cần để thêm video này vào đầu

timing start timing_name 

Và điều này ở phần cuối của một kịch bản

timing stop 

Thông tin thêm về lệnh này có thể được tìm thấy tại Hướng dẫn SQL * Plus® của người sử dụng của Oracle và tham khảo: Collecting Timing Statistics

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