2011-07-14 30 views
6

Sử dụng Oracle 10g. Nhà thiết kế Oracle ban đầu cho dự án này đã chuyển sang và những người còn lại của chúng tôi là nhà phát triển hợp lý cho Oracle nhưng chúng tôi cần một số trợ giúp điều chỉnh và lập kế hoạch.Tác động của kích thước gói đến hiệu suất trong Oracle 10g

Chúng tôi có các thủ tục riêng biệt trong các gói 'thích', một số (nhiều) trong đó đã phát triển về kích thước để bao gồm nhiều (50 ish) thủ tục phức tạp khác nhau. Tại thời điểm này, một số thủ tục nhỏ (chọn ID từ Hợp đồng trong đó Item = 'xyz') trong các gói lớn hơn mất nhiều thời gian hơn dự kiến ​​'để thực thi từ bên trong một gói này (từ TOAD, SQL Developer, hoặc từ đó). NET Oracle Provider) hơn là nếu proc được biên dịch riêng của mình hoặc thành một gói nhỏ hơn. (Bảng được lập chỉ mục)

Nên có một chi phí hiệu quả cho việc sử dụng các gói lớn như vậy, ngay cả khi gọi thủ tục cá nhân tương đối đơn giản hoặc là có một số yếu tố 'khác' chúng ta nên tìm kiếm?

(lưu ý: nâng cấp lên Oracle 11 được lên kế hoạch nhưng không phải là 'sắp')

+0

@OMG, chúng tôi đã xây dựng các gói Oracle dựa trên niềm tin rằng kích thước gói -_should_- không ảnh hưởng đến hiệu suất quy trình, nhưng chúng tôi đang thấy các chỉ báo truy cập và đang điều tra khả năng này. –

Trả lời

7

Lần đầu tiên bất kỳ phương pháp trong một gói được gọi, toàn bộ gói cần được đọc vào bộ nhớ. Nói chung, đó được coi là một lợi thế trên giả định rằng nếu bạn đang gọi một phương thức trong một gói, có khả năng là nhiều phương thức liên quan sẽ được gọi bằng thủ tục mà bạn đã gọi hoặc bằng các cuộc gọi ứng dụng tiếp theo. Nhưng điều đó có nghĩa là việc thực thi đầu tiên có khả năng bị chậm lại bằng cách tải nhiều mã hơn có thể thực sự cần thiết cho hàm đơn giản. Hình phạt đó sẽ biến mất, tuy nhiên, một khi gói đã được tải vào bộ nhớ. Nó không có vẻ như bạn đang nói về một vấn đề với hiệu suất của các cuộc gọi đầu tiên của một thủ tục, mặc dù, mà sẽ có xu hướng loại trừ điều này.

Có mã nào trong khối khởi tạo của gói sẽ chạy trước khi quy trình nhỏ được thực thi có thể làm lệch kết quả không?

Bạn xác định phải mất bao lâu để gọi những quy trình nhỏ này và "lâu hơn" nghĩa là gì? Bạn có gọi cho họ một vài lần và đo một số lượng nhỏ thời gian trôi qua mili giây và thấy không, tăng 30% thời gian thực hiện? Hay bạn đang gọi họ hàng ngàn lần và thấy sự gia tăng 1000% trong thời gian thực hiện?

+0

Điều này đang xảy ra ngoài việc tải & khởi tạo để không phải là vấn đề trong trường hợp này. Hiện tại, chúng tôi đang 'quan sát' thời gian thực hiện bao lâu mà không có điểm chuẩn. Nếu chúng ta thực thi từ Toad trong một cửa sổ script hoặc như một phần của gói "nhỏ" (chỉ mục này) thì phản hồi là "tức thì" (phụ thứ hai ..) trong một gói lớn hơn, nó là 3 đến 5 giây. (sử dụng phương pháp _perfectly calibrated_ "1-Mississippi". –

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