Làm cách nào tôi có thể tải 1000 nút mỗi giờ lên một trang web drupal 7 trực tiếp và tránh bế tắc?


9

Cách đây không lâu, tôi đã viết về bế tắc ở đây: PDOException: SQLSTATE [40001]: Lỗi nối tiếp: 1213 Bế tắc được tìm thấy khi cố gắng khóa;

Bất chấp mọi thứ mà nhóm phát triển của tôi cố gắng thực hiện, chúng tôi vẫn gặp phải những lỗi như thế này:

PDOException: SQLSTATE [40001]: Lỗi nối tiếp: 1213 Bế tắc được tìm thấy khi cố gắng khóa; hãy thử khởi động lại giao dịch: INSERT INTO {location_instance} (nid, vid, uid, genid, nắp) VALUES (: db_insert_placeholder_0 ,: db_insert_placeholder_1 ,: db_insert_placeholder_2 ,: db_insert_place_ Mảng ( /var/www/website.com/sites/all/modules/location/location.module).

Mặc dù bảng cụ thể trong ví dụ đó, chúng tôi gặp lỗi này trên các bảng khác.

Đây là tình hình của tôi. Tôi đã thực hiện một dự án Đại học lớn. Tại bất kỳ thời điểm nào cũng có 50.000 cư dân trong khuôn viên sử dụng hệ thống này hàng ngày. Ngoài ra, tôi đang di chuyển 100 trong số 1000 mục nội dung theo cách thủ công và thông qua mã mô-đun tùy chỉnh (di chuyển từ dữ liệu đại học cũ) sang trang web Drupal 7 mới này.

Lỗi này đang giết chết chúng ta, đến mức chúng ta gần như sẵn sàng loại bỏ những công việc đáng giá trong những năm qua và đi với một thứ khác nếu Drupal không thể xử lý loại tải này.

Nhưng đó ít nhiều là câu hỏi của tôi - Làm thế nào Drupal có thể xử lý loại tải này? Làm cách nào tôi có thể tổ chức luồng công việc của mình để có thể xử lý nhiều hoạt động này? Đây có phải là một vấn đề Drupal? Một vấn đề cơ sở dữ liệu?

Cụ thể, tôi đang chạy Ubuntu, LAMP stack RAM 16GB. Tôi sẵn sàng cho bất kỳ đề xuất nào cho dù đó là liên quan đến Drupal, liên quan đến cơ sở dữ liệu, cấu hình máy chủ hoặc luồng công việc khác để hoạt động trong khả năng của Drupal, vì vậy, vui lòng đề xuất bất cứ điều gì nếu bạn có kinh nghiệm với hoạt động này.


Có một bài viết về nhập khẩu lớn dữ liệu evolvingweb.ca/story/...
kalabro

Cảm ơn vì điều đó. Thật đáng khích lệ khi thấy rằng khối lượng dữ liệu thực sự có thể được nhập gần như ngay lập tức. Tuy nhiên, những gì về vấn đề người dùng cá nhân đăng thông qua tài khoản của họ thông qua các hình thức nút? Khi tôi tìm hiểu sâu hơn về vấn đề này, những câu hỏi tu từ trong đầu tôi lớn lên, "Drupal có thể xử lý lưu lượng truy cập trực tiếp nhiều này không? Nếu không, thì vấn đề là gì?" Ngoài việc nhập khẩu, chúng tôi có một nhóm khoảng 20 người đang thêm nội dung thông thường thông qua tài khoản của họ. Drupal 'nút lưu' thực sự chỉ có thể xử lý 20 người dùng đồng thời thêm dữ liệu cùng một lúc?
blue928

Chúng tôi đã thử nghiệm trang web Drupal của chúng tôi với Apache JMeter bằng MySQL và PostgreSQL. Đối với MySQL, kết quả của chúng tôi là khoảng 20 nút. Đối với kết quả PostgreSQL tốt hơn nhiều.
kalabro

Câu trả lời:


5

Tôi làm việc cho trường đại học Stanford và đã làm những điều tương tự. Chúng tôi liên tục phải tải hơn 100.000 nút một cách thường xuyên. Chúng tôi đã làm việc với mã tải tùy chỉnh của riêng mình trong 2 năm nay và đã có thể tăng tốc quá trình khá lớn bằng pcntl_fork. Điều duy nhất bạn phải nhớ là đóng tất cả các kết nối ổ cắm trước khi gọi ngã ba. Ví dụ, bạn phải đóng kết nối mysql, kết nối memcache và thậm chí kết nối mongo. Drupal sẽ tự động tạo các kết nối mới khi không kết nối. Theo như vấn đề bế tắc, chúng tôi có thể khắc phục vấn đề đó bằng cách đặt innodb_locks_unsafe_for_binlog = 1.


bạn đang tải những thứ đó theo đợt với mã tùy chỉnh hoặc sử dụng một số hàm API của drupal như node_save? Hoặc một mô-đun loại di chuyển? Ngoài ra mã bạn đã đề cập có sẵn để xem công khai? Sẽ thật tuyệt khi thấy pcntl_fork được tích hợp với drupal như thế nào để thấy các bạn đã vượt qua trở ngại này. Cảm ơn các mẹo binlog!
blue928

2

Câu trả lời là: Định cấu hình chính xác tệp MySQL my.cnf của bạn.

Sau hơn một tuần nghiên cứu, tôi đã thấy rằng Drupal 7 thực sự có thể xử lý lưu lượng đầu vào đồng thời nhiều này.

Các PDOExceptions Deadlock này có liên quan đến tệp MySQL my.cnf không được tối ưu hóa chính xác. Với sự giúp đỡ từ nhóm Hiệu suất cao Drupal và các nguồn khác, nhóm của chúng tôi đã không có một Bế tắc nào xảy ra kể từ khi thực hiện cài đặt cấu hình mới cho MySQL. Chúng tôi đã thử nghiệm các tập lệnh bó để mô phỏng tới 500 người dùng hiện tại đang lưu nội dung mà không gặp vấn đề gì. Kiểm tra các chủ đề ở đây.

http://groups.drupal.org/node/260938

Cụ thể, Dalin đề xuất sử dụng trình hướng dẫn để lấy tệp cấu hình cơ sở dựa trên thông số kỹ thuật của máy chủ và loại bảng. Sau khi sử dụng, ngay cả khi không điều chỉnh thêm, các bế tắc đã dừng lại. Đây là một liên kết đến trình hướng dẫn nếu bạn muốn dùng thử: https://tools.percona.com/wizard

Tôi sẽ rất vui khi được đăng tải tập tin my.cnf nếu có ai thấy nó hữu ích.

Mặc dù sự cố Deadlock không còn là vấn đề nữa, nhưng hiện tại chúng tôi đang gặp phải lỗi này rất thường xuyên:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 
1305 SAVEPOINT savepoint_1 does not exist: ROLLBACK TO SAVEPOINT savepoint_1; 
Array ( ) in file_usage_add() (line 661 of /var/www/website.com/includes/file.inc).

Đây có thể là một vấn đề cấu hình mysql là tốt?


Chúng ta đang bắt đầu thấy lỗi đó. Bạn đã bao giờ tìm thấy một câu trả lời cho câu hỏi của bạn?
trimbletodd

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.