Làm thế nào mà Oracle xử lý nhiều INSERT đồng thời trên một bảng


8

Tôi đang cố gắng để hiểu Oracle 11g chặt chẽ hơn một chút. Câu hỏi của tôi rất đơn giản: làm thế nào để Oracle xử lý hai phiên đang cố gắng chèn các bản ghi vào một bảng cùng một lúc.

Ví dụ: INSERT A chạy lúc 1:00 PM so với Bảng 1. Sẽ mất 5 phút để hoàn thành. INSERT B được thực thi lúc 1:02 PM so với Bảng 1. Sẽ mất 1 phút để hoàn thành.

Chuyện gì sẽ xảy ra? Oracle sẽ xếp hàng INSERT B để được thực thi sau khi INSERT A kết thúc? INSERT B sẽ chạy đồng thời với INSERT A?

Cảm ơn!


6
Không có gì tuyệt vời hơn khi tự mình thử xem :-)
Jack nói hãy thử topanswers.xyz

Chắc chắn rồi. Tuy nhiên, tôi không chắc chắn cách tạo một truy vấn sẽ cố tình mất 5 phút để hoàn thành.
Dustin

3
chèn nhiều dữ liệu? insert into foo(id) select level from dual connect by level<1000000(tăng số lượng số 0 một lần cho đến khi đủ chậm)
Jack nói hãy thử topanswers.xyz

Câu trả lời:


4

Các phần chèn không ảnh hưởng lẫn nhau trừ khi chúng có xung đột với các ràng buộc khóa chính hoặc duy nhất. Họ nên độc lập. Tôi tin rằng vấn đề tương tranh này là một trong những lý do tại sao chuỗi của Oracle là một đối tượng riêng biệt (được lưu trong bộ nhớ cache, tạo thế hệ PK được tách ra khỏi phần chèn).

Về mặt đó, họ hoạt động trên bảng không được cam kết như đã thấy trong phiên của họ. Hành vi này được mô tả trong bài stackoverflow dưới đây.

/programming/3194999/dml-by-multipl-users-commit-scenario-in-oracle


2

Có lẽ rất hữu ích khi xem qua Quản lý giao dịch Oracle (Khái niệm) hoặc Xử lý SQL cho nhà phát triển ứng dụng (Hướng dẫn dành cho nhà phát triển ứng dụng nâng cao)

Bạn có thể điều tra hành vi của nhà tiên tri bằng cách mở một phiên với sqlplus, giải quyết tự động bằng cách thực hiện

tắt chế độ tự động

và thực hiện một chèn

chèn vào giá trị bảngA (...) (...);

Để phiên này mở và bắt đầu một phiên sqlplus từ một cửa sổ khác, đặt chế độ tự động tắt và đưa ra một chèn khác. Cả hai giao dịch sẽ được kích hoạt cho đến khi bạn đóng chúng bằng cam kết (hoặc rollback).

Trong hầu hết các tình huống, không thực sự cần thiết phải tắt chế độ tự động vì đây là mặc định cho sqlplkus nếu bạn không thay đổi điều này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.