Lợi ích của khóa cấp bảng


7

Những lợi ích của việc khóa mức bảng được sử dụng bởi công cụ lưu trữ MyISAM là gì?Khóa cấp hàng có rất nhiều lợi ích như cập nhật đồng thời và đọc không khóa bảng.

Chỉnh sửaNó được xem xét rộng rãi rằng khóa cấp bảng ngăn chặn bế tắc.Nhưng làm thế nào để ngăn chặn các bế tắc với chi phí đồng thời là đáng giá?

  0

[Thảo luận này] (http://dba.stackexchange.com/questions/1/what-are-the-main-differences-b between-sinodb-and-myisam) có thể có một số thông tin liên quan cho bạn. 14 sep. 112011-09-14 20:57:50

  0

Thảo luận này là về các đặc điểm của MyISAM và InnoDB, không có gì về lợi ích của việc khóa cấp bảng. 14 sep. 112011-09-14 21:05:21

5

MyISAM không có bế tắc, nhưng bế tắc theo một cách nào đó, là một cải tiến so với khóa cấp bảng.

Khi bạn đang cố gắng XÁC NHẬN/CẬP NHẬT/XÓA từ bảng bị khóa, bạn sẽ cần đợi cho đến khi có sẵn hoặc cho đến khi bạn nhận được thời gian chờ (theo mặc định là 28800 giây).Với việc bế tắc trên công cụ khóa cấp hàng, bạn đợi một chút nếu nó không miễn phí và nếu máy chủ phát hiện một loại "vòng lặp vô hạn" - trong đó 2 kết nối sẽ không từ bỏ một hàng - thì nó sẽ từ chối cả hai kết nối một cách nhanh chóng và bế tắc

Nếu bạn đang cố gắng giải quyết bế tắc, tôi sẽ đề nghị bạn xem xét những điều sau:

  • Liệu bế tắc xảy ra trên mã xấu trong một giao dịch?có thực sự cần thiết phải "giữ" một hàng để bạn hoàn thành tính toán của mình và cập nhật nó không?
  • Có một chỉ số cho điều kiện trong tuyên bố của bạn?nếu không, InnoDB thực sự có thể đánh dấu toàn bộ bảng là chờ được cập nhật.
  • Có thể là ổ cứng trên máy chủ không cam kết thay đổi InnoDB đủ nhanh?hoạt động điểm kiểm tra trên máy chủ có gây ra sự cố/quầy hàng với InnoDB không?
  • Có phải vì khóa tự động tăng?Nếu vậy, có lẽ bạn nên xem xét mức tăng tự động tự do hơn - cài đặt http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html (cũng xem khóa cấp hàng để giải quyết một số vấn đề do những thay đổi đó gây ra)

3

Khóa bảng (như MyISAM sử dụng) không có vấn đề deadlock với deadlock .

  0

BTW +1 để trả lời đầu tiên về bế tắc !!! 14 sep. 112011-09-14 21:17:32


6

Vì mysql lên lịch các truy vấn để thực hiện theo cách này:

  • Viết yêu cầu (như CẬP NHẬT và XÓA) được ưu tiên hơn các yêu cầu đã đọc (CHỌN)
  • Máy chủ thực hiện ghi theo cách thức FIFO (theo thứ tự nhận được)

Những lợi ích là gì?

Bế tắc không bao giờ có thể xảy ra với MyISAM.Do đó, máy chủ MySQL có thể quản lý tất cả sự tranh chấp, rõ ràng (LOCK TABLE) hoặc implcit (Bất kỳ DML).

Miễn là bảng MyISAM không có bản ghi bị xóa hoặc cập nhật, việc chèn đồng thời có thể xảy ra một cách tự do mà không bị trừng phạt.Điều đó thực sự sẽ bao gồm các CHERTN trên một bảng có khóa đọc rõ ràng.

Đối với bất kỳ bảng nào có khoảng trống, việc chạy TỐI ƯU HÓA sẽ loại bỏ các khoảng trống đó và cho phép chèn đồng thời một lần nữa.

Để biết thêm thông tin, xin vui lòng đọc "MySQL 5.0 Certification Study Guide" pages 408-412 Section 29.2 .

  0

Cách bế tắc này sẽ không bao giờ xảy ra nhưng lợi ích của nó sẽ đến đâu khi so sánh với những nhược điểm của nó như không có sự tương tranh.Và trên tải cao thông lượng chậm của cơ sở dữ liệu. 14 sep. 112011-09-14 21:10:03

+2

@rickjames lợi ích của myisam không nằm ở cách nó quản lý các cập nhật.Đó là tốt nhất trong một tình huống chuyên sâu không viết. 14 sep. 112011-09-14 21:13:01

  0

Thật không may, rất nhiều người sử dụng WordPress, Drupal và MovizableTypes CMS, mặc định luôn là MyISAM.Nếu bất cứ ai có một trang web buôn bán cao, họ phải tránh xa MyISAM.Nếu không, MyISAM nên đủ. 14 sep. 112011-09-14 21:13:45

  0

@DTest đúng, nhưng ngay cả trong hệ thống đọc chuyên sâu, lợi ích của nó so với khóa cấp hàng như thế nào? 14 sep. 112011-09-14 21:14:38

  0

Ngay cả trong một hệ thống đọc hiểu, chỉ cần một câu lệnh XÓA hoặc CẬP NHẬT sẽ nhanh chóng vô hiệu hóa bất kỳ lợi ích nào MyISAM có. 14 sep. 112011-09-14 21:16:59

  0

@rickjames loại bỏ bế tắc là 'lợi ích' của khóa bảng so với khóa hàng.MyISAM có những lợi ích khác so với innodb, nhưng đây không phải là một cuộc thảo luận về điều đó (innodb có nhiều lợi ích hơn myisam!) 14 sep. 112011-09-14 21:25:24

  0

Điều này tôi sợ là rất điển hình của MySQL tổ chức.Lý do MyISAM có khóa cấp bảng chỉ đơn giản là họ không thể thực hiện khóa cấp hàng (được để lại cho bên thứ ba đã cho chúng tôi InnoDB).Nhưng họ cố gắng xoay nó như thể họ có ý nghĩa với tất cả cùng.Tôi nhớ họ từng nói rằng bạn không cần khóa ngoại, giao dịch, lưu trữ, v.v. khi thực sự họ không thể làm được.Lấy tài liệu của họ với một nhúm muối ** LỚN **. 15 sep. 112011-09-15 18:28:52


3

Hai lợi ích.

a.Khóa bảng là một ví dụ về brute-force algorithm để giải quyết vấn đề bế tắc.Brute force luôn hoạt động, cho các giá trị phù hợp của "công trình".

Ken Thompson, người đồng phát minh ra Unix, được cho là đã thốt ra epigram ngay khi nghi ngờ, hãy sử dụng vũ lực bạo lực.Có lẽ anh ta chỉ coi đây là một ha ha, nhưng sở thích của hạt nhân Unix ban đầu đối với các thuật toán đơn giản, mạnh mẽ và di động so với các thuật toán 'thông minh' dễ vỡ dường như là một yếu tố quan trọng trong sự thành công của HĐH đó.Giống như rất nhiều sự đánh đổi khác trong thiết kế phần mềm, sự lựa chọn giữa lực lượng vũ phu và sự thông minh phức tạp, tinh chỉnh thường là một điều khó khăn đòi hỏi cả sự hiểu biết kỹ thuật và phán đoán thẩm mỹ tinh tế.

b.Bạn chắc chắn sẽ đưa ra các quyết định khác nhau khi bạn có được cả sự hiểu biết về kỹ thuật và phán đoán thẩm mỹ.Điều này không ảnh hưởng đến hiệu lực của "a" ở trên.