2011-06-17 39 views
7

Tôi có một câu hỏi rất chung:Các giao dịch lớn có chi phí hiệu suất/tài nguyên tăng theo cấp số nhân hay theo cấp số nhân không?

1.) Tôi có giao dịch (trong mysql) bao gồm sửa đổi mười- trăm nghìn hoặc thậm chí là triệu bản ghi. Những loại giao dịch này có đắt hơn so với giao dịch rất nhỏ không? Hay giao dịch lớn sẽ tiêu thụ nhiều nguồn lực hơn là một giao dịch nhỏ? (nói cách khác, phải tránh).

2.) Có đúng là khi thực hiện giao dịch lớn như vậy, tải trên mysql sau đó sẽ nhảy đến một giá trị rất cao, cho đến khi giao dịch được xử lý hoàn toàn?

Câu hỏi liên quan chủ yếu đến MySQL, nhưng nếu có máy chủ "tốt hơn", thì sẽ rất thú vị khi nghe về chúng. Và có, Máy chủ/Hệ thống có khá nhiều tải từ các quy trình khác (vì vậy nó không phải là giao dịch duy nhất được xử lý trên hệ thống = trung bình/cao tranh chấp). Và các mức cô lập là các mức cô lập "cao hơn/cao nhất" (mang lại tất cả lợi ích của các giao dịch thực).

Cảm ơn bạn rất nhiều

+0

Tôi sẽ tưởng tượng ENGINE được sử dụng cũng là một yếu tố trong một câu trả lời hay. (Có thể là tốt để thêm vào bài đăng.) –

+3

Tôi nghĩ rằng nó không chỉ phụ thuộc vào kích thước của giao dịch của bạn, mà còn phụ thuộc vào [mức cô lập] của nó (http://dev.mysql.com/doc/refman/5.0/ en/set-transaction.html) và đồng thời với các chủ đề khác nếu bạn giao dịch là * serializable * hoặc * repeatable read *. Đây là một câu hỏi hay và tôi cũng thích xem câu trả lời. – Benjamin

Trả lời

2

Đây không phải là câu trả lời hoàn chỉnh, tôi hy vọng một người nào đó sẽ cung cấp cho bạn một số gợi ý hữu ích về chủ đề đó.

Nhưng tôi có thể cung cấp cho bạn ít nhất một mẹo.

Chắc chắn với serializable mức cô lập các vấn đề lớn nhất mà bạn sẽ phải là khi giao dịch của bạn là lâu bạn đã có rất nhiều cơ hội để có nó tự động cuộn lại bởi động cơ. Trong mức cô lập tuần tự nếu bất kỳ giao dịch nào khác cam kết điều gì đó thay đổi một trong các dữ liệu bị ảnh hưởng của bạn, giao dịch của bạn bị tắt. Trong mức cô lập tuần tự hóa bạn phải nghĩ rằng giao dịch của bạn là một cái gì đó bạn sẽ có thể phải làm lại nhiều lần cho đến khi nó được ok. Vì vậy, ... nếu nó lớn và bạn không đơn độc nó sẽ có thể trở nên rất dài, hoặc có thể không thể chạy.

Nếu chúng ta nói về việc thay đổi tất cả các hàng của hàng triệu bảng trong giao dịch có thể tuần tự, bạn sẽ phải đặt khóa cấp ứng dụng hoặc semaphore, cái gì đó cao hơn giao dịch cơ sở dữ liệu tái làm một nhiệm vụ nặng nề và họ nên đợi một chút và để bạn làm nhiệm vụ quan trọng đó :-)

Nhưng nếu bạn có thể nghĩ rằng quá trình này là một nhiệm vụ bảo trì trên mỗi hàng và nó không phải là vấn đề cho môi trường của bạn một số hàng trong trạng thái mới và một số khác chưa ... sau đó thực hiện giao dịch cho mỗi hàng và không phải là một giao dịch lớn. Bạn chỉ nên thực hiện các giao dịch có thể tuần tự hóa lớn nếu thực sự quan trọng là tất cả các hàng bị ảnh hưởng phải chuyển đổi trạng thái của chúng trong cùng một thời điểm (đây là Atomicity). Rất có thể đây không phải là trường hợp, phải không?

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