Lời khuyên của bạn là đúng, sẽ tốt hơn nếu thực hiện tất cả các tác vụ cơ sở dữ liệu cùng một lúc. Có 2 tác động chính đến hiệu suất trong kịch bản của bạn
- Việc chuyển đổi ngữ cảnh của pro * c giữa công cụ SQL và công cụ PL / SQL để chạy các luồng của bạn nhiều lần. Thường là vấn đề lớn nhất trong nhiều lệnh gọi PL / SQL từ ứng dụng khách.
- Chi phí ngăn xếp mạng (TNS) trong giao tiếp giữa ứng dụng pro * c của bạn và công cụ cơ sở dữ liệu - đặc biệt nếu ứng dụng của bạn nằm trên một máy chủ vật lý khác.
Phải nói rằng, bạn đang tạo một nhóm kết nối ở cuối ứng dụng, trình nghe TNS cũng phải có một nhóm các quy trình bóng máy chủ kế thừa đang chờ mỗi kết nối mạng (điều này được thiết lập tại listener.ora).
Đăng nhập / đăng xuất OCI khi quá trình bóng đang chờ kết nối diễn ra rất nhanh chóng và không phải là một yếu tố lớn về độ trễ - tôi không lo lắng về điều này trừ khi một quy trình bóng mới trên máy chủ phải khởi động - thì nó có thể là một cuộc gọi rất đắt. Khi bạn đang sử dụng gộp kết nối ở phía máy khách, đây thường không phải là vấn đề mà chỉ là điều cần xem xét do luồng trong các cuộc gọi của bạn. Một khi bạn cạn kiệt nhóm các quy trình bóng máy chủ, bạn sẽ nhận thấy sự xuống cấp lớn nếu trình nghe TNS phải khởi động thêm quy trình bóng máy chủ.
Chỉnh sửa câu trả lời cho các câu hỏi mới:
-
Nó rất liên quan. Như đã chỉ ra trước đây, bạn nên giảm thiểu số lượng lệnh gọi plsql và sql trong ứng dụng C ++ của mình. Mỗi lệnh gọi PLSQL trong lệnh gọi ứng dụng C ++ của bạn sẽ gọi công cụ SQL, sau đó công cụ này sẽ gọi công cụ PLSQL cho lệnh gọi thủ tục. Vì vậy, nếu bạn chia thủ tục của mình thành 2 - bạn đang nhân đôi công tắc ngữ cảnh SQL sang PLSQL, đây là công tắc đắt tiền hơn như đã nêu trong bài báo của Tom Kyte và kinh nghiệm cá nhân của tôi.
-
Được trả lời bằng 1. Nhưng như trước đây tôi đã nói chi phí liên lạc là thứ hai trừ khi máy chủ của bạn ở trên các mạng vật lý khác nhau và loại dữ liệu bạn đang truyền. Ví dụ, các tham số đối tượng C ++ lớn và các tập kết quả Oracle lớn với nhiều lệnh gọi rõ ràng sẽ ảnh hưởng đến độ trễ truyền thông với các chuyến đi vòng. Hãy nhớ rằng với nhiều lệnh gọi PLSQL hơn, bạn cũng đang thêm nhiều lưu lượng SQLNET hơn để thiết lập cho từng kết nối và tập hợp kết quả.
-
không có câu hỏi 3.
-
PLSQL to SQL trong PLSQL engine là không đáng kể, vì vậy đừng quá lo lắng về nó. Đặt tất cả các lệnh gọi SQL của bạn trong 1 lệnh gọi PLSQL để có thông lượng hiệu suất tối đa. Đừng chia nhỏ các cuộc gọi chỉ để trở nên hùng hồn hơn với cái giá đắt của hiệu suất.