Chúng ta có nên khóa rõ ràng các bảng MyISAM hay nó ẩn ....?


0

Các bảng MyISAM có tự động khóa một bảng cho mỗi câu lệnh chọn hoặc chèn không ....

Ý tôi là nếu tôi truy vấn cơ sở dữ liệu là select * from tablename thì công cụ MySQL trước tiên sẽ khóa nó để đọc tự động và mở khóa sau khi hiển thị kết quả hay trước tiên chúng ta phải đề cập đến khóa tablename đọc rõ ràng và sau đó đọc dữ liệu .... ??

Tôi có nghi ngờ này vì chúng tôi có một cơ sở dữ liệu thiếu một số hàng và khoảng 50 - 100 hàng được chèn hoặc cập nhật mỗi giây.Chúng tôi không bao giờ sử dụng các câu lệnh khóa trong khi chèn hoặc cập nhật và chúng tôi vẫn không có bất kỳ vấn đề tương tranh nào.

  0

Nếu INSERTS "quan trọng" xem xét sử dụng InnoDB .. lý do duy nhất MyISAM khá nhanh vì nó kích hoạt INSERTS vào bộ đệm của hệ điều hành và "quên" dữ liệu nào ở đó và cố gắng chuyển bộ đệm hoàn chỉnh của hệ điều hành vào đĩa "đôi khi". . vẫn InnoDB (được định cấu hình chính xác) sẽ tốt hơn MyISAM .. lưu ý không dành cho 'CHỌN COUNT (*) TỪ bảng', điều gì sẽ buộc quét toàn bộ bảng trên công cụ InnoDB. 04 dec. 132013-12-04 23:21:20

1

MyISAM chỉ khóa cho CHERTN, CẬP NHẬT và XÓA (còn gọi là DML)

These issue full table locks each time (See MyISAM Documentation on Locking granularity) .

CHỌN bị chặn bởi những tuyên bố đó.

Ngoại lệ là một INSERT với concurrent_insert=2 defined .

Performing an explicit lock is unnecessary, although you are free to do so .

Bạn có thể cần kiểm tra ứng dụng của mình để biết các kết nối bị lỗi hoặc lỗi DML.


0

cũng có thể tìm thấy thông tin tốt trong nhật ký mặc định của MySQL như mysqld.log, nhật ký truy vấn chậm, ghi nhật ký nhị phân và sau khi thực hiện truy vấn 'SHOW STATUS', biến (Table_locks_waited) sẽ cho biết bạn có gặp vấn đề tương tranh hay không