2010-12-13 29 views
5

Tôi đã đọc this post trên blog hiệu suất MySQL.Tối ưu hóa InnoDB - "sử dụng giao dịch khi thực hiện cập nhật" - tại sao?

Dưới ứng dụng chỉnh nó nói:

Trước tiên hãy chắc chắn rằng bạn đang sử dụng các giao dịch khi thực hiện cập nhật

Tôi hiện chỉ sử dụng các giao dịch ở những nơi có nhiều chèn hoặc cập nhật tại cùng một lúc. tức là nhiều hơn một bảng.

Do đó, tôi có nên thay đổi mọi UPDATE để thay đổi giao dịch thành giao dịch không?

prepare sql 
bind params 
commit 

và::

sự khác biệt giữa là gì

begin transaction 
prepare sql 
bind params 
execute statement 
commit transaction 

về những gì xảy ra ở cấp cơ sở dữ liệu, mà làm cho một nhanh hơn so với người kia?

Trả lời

6

InnoDB chạy theo chế độ tự động theo mặc định. Điều đó có nghĩa là mọi truy vấn đều chạy trong giao dịch riêng của nó và được cam kết cùng một lúc. Trong InnoDB, điều này có nghĩa là ghi dữ liệu vào hai nơi trên đĩa (không hỏi tôi để biết chi tiết - tôi viết từ bộ nhớ những gì tôi đã đọc tại MySQL Performance Blog một lần;)).

Bây giờ, nếu bạn thực hiện một lần cập nhật/chèn/xóa cùng một lúc, sẽ không có nhiều hiệu suất để đạt được. Tuy nhiên, nếu bạn thực hiện một số lần cập nhật/chèn/xóa liên tục, bạn có thể tiết kiệm thời gian đĩa cứng bằng cách nhóm chúng vào giao dịch và sau đó cam kết tất cả cùng một lúc.

+2

+1. Phân tích kỹ thuật hơn: có một bộ đệm làm chậm quá trình ghi vào nhật ký (innodb_log_buffer_size) cần phải được xóa thường xuyên hơn nếu bạn cam kết mọi lúc, dẫn đến hiệu suất kém hơn. Bộ đệm cũng tự động xả mỗi 1 giây. –

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