라이브 드루팔 7 사이트에 시간당 1000 개의 노드를 업로드하고 교착 상태를 피하려면 어떻게해야합니까?


9

얼마 전까지 교착 상태에 대해 썼습니다 : PDOException : SQLSTATE [40001] : 직렬화 실패 : 1213 잠금을 시도 할 때 교착 상태가 발견되었습니다.

개발팀이 시도하는 모든 작업에도 불구하고 여전히 다음과 같은 오류가 발생합니다.

PDOException : SQLSTATE [40001] : 직렬화 실패 : 1213 잠금을 시도 할 때 교착 상태가 발견되었습니다. 트랜잭션을 다시 시작하십시오. {location_instance}에 삽입 (nid, vid, uid, genid, lid) 값 (: db_insert_placeholder_0, : db_insert_placeholder_1, : db_insert_placeholder_1, : db_insert_placeholder_2, : db_insert_placeholder_3, : db_insert_placeholder_4); location_save_locations ()의 행 (974)에서 배열 ([: db_insert_placeholder_0] => 1059 [: db_insert_placeholder_1] => 1059 [: db_insert_placeholder_2] => 0 [: db_insert_placeholder_3] => cck : field_item_location : 1059 [: db_insert_placeholder_4] => 1000) /var/www/website.com/sites/all/modules/location/location.module).

이 예의 특정 테이블에도 불구하고 다른 테이블에서이 오류가 발생합니다.

여기 내 상황이 있습니다. 나는 큰 대학 프로젝트를 수행했습니다. 항상 시스템을 사용하는 캠퍼스 주민은 50,000 명입니다. 또한 수동 및 사용자 지정 모듈 코드 (이전 대학 데이터에서 마이그레이션)를 통해이 새로운 Drupal 7 사이트로 1000 개의 콘텐츠 항목 100 개를 마이그레이션하고 있습니다.

Drupal이 이러한 유형의로드를 처리 할 수없는 경우 지난 몇 년간의 작업을 폐기하고 다른 작업을 수행 할 준비가 될 정도로이 오류는 우리를 죽이고 있습니다.

그러나 그것은 다소 내 질문입니다-Drupal은 어떻게 이런 유형의 하중을 처리 할 수 ​​있습니까? 이처럼 많은 활동을 처리 할 수 ​​있도록 작업 흐름을 구성하려면 어떻게해야합니까? 이것이 드루팔 문제입니까? 데이터베이스 문제?

특히, Ubuntu, LAMP 스택 16GB RAM을 실행 중입니다. Drupal 관련, 데이터베이스 관련, 서버 구성 관련 또는 Drupal의 기능 내에서 작동하는 다른 워크 플로우인지에 대한 제안에 개방적 이므로이 많은 활동에 경험이 있으면 자유롭게 제안하십시오.


대규모 데이터 세트 evolvingweb.ca/story/…
kalabro

고마워 실제로 많은 양의 데이터를 거의 즉시 가져올 수 있다는 점이 매우 고무적입니다. 그러나 개별 사용자가 노드 양식을 통해 자신의 계정을 통해 게시하는 문제는 어떻습니까? 내가이 문제를 더 깊이 파고 들으면서, 머리 속의 수사 학적 질문이 커지고 있습니다. "Drupal은이 많은 실시간 트래픽을 처리 할 수 ​​있습니까? 그렇지 않으면 요점이 무엇입니까?" 수입품 외에도 계정을 통해 정상적으로 콘텐츠를 추가하는 약 20 명의 팀이 있습니다. Drupal '노드 저장'은 한 번에 20 명의 동시 사용자 만 데이터를 추가 할 수 있습니까?
blue928

우리는 MySQL과 PostgreSQL을 사용하여 Apache JMeter로 Drupal 사이트를 테스트했습니다. MySQL의 결과는 약 20 개의 노드였습니다. PostgreSQL의 결과는 훨씬 나았습니다.
kalabro

답변:


5

나는 스탠포드 대학에서 일하고 비슷한 일을하고 있습니다. 정기적으로 100,000 개 이상의 노드를 지속적으로로드해야합니다. 우리는 2 년 동안 우리 자신의 커스텀 로딩 코드를 연구 해 왔으며, 이제 pcntl_fork를 사용하여 프로세스 속도를 크게 높일 수있었습니다. 기억해야 할 것은 포크를 호출하기 전에 모든 소켓 연결을 닫는 것입니다. 예를 들어 mysql 연결, memcache 연결 및 mongo 연결을 닫아야합니다. Drupal은 존재하지 않는 경우 자동으로 새 연결을 만듭니다. 교착 상태 문제까지는를 넣어서 문제를 해결할 수있었습니다 innodb_locks_unsafe_for_binlog = 1.


사용자 정의 코드를 사용하거나 node_save와 같은 drupal의 API 함수를 사용하여 배치로로드합니까? 아니면 마이그레이션 유형 모듈입니까? 언급 한 코드도 공개적으로 사용할 수 있습니까? pcntl_fork가 drupal과 통합되어이 장애물을 극복 한 방법을 알게되어 기쁩니다. binlog 팁 주셔서 감사합니다!
blue928

2

대답은 다음과 같습니다. MySQL my.cnf 파일을 올바르게 구성하십시오.

일주일이 조금 넘는 연구 끝에 Drupal 7이 실제로 많은 동시 입력 트래픽을 처리 할 수 ​​있음을 발견했습니다.

이러한 교착 상태 PDOException은 MySQL my.cnf 파일이 올바르게 최적화되지 않은 것과 관련이 있습니다. Drupal High Performance 그룹 및 기타 소스의 도움을 받아 우리 팀은 MySQL에 대한 새로운 구성 설정을 구현 한 이후로 단일 교착 상태가 발생하지 않았습니다. 배치 스크립트를 테스트하여 최대 500 명의 현재 사용자가 문제없이 컨텐츠를 저장하는 것을 시뮬레이션했습니다. 여기서 스레드를 확인하십시오.

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

특히 Dalin은 마법사를 사용하여 서버 사양 및 테이블 유형을 기반으로 기본 구성 파일을 얻도록 제안했습니다. 이것을 사용한 후, 추가 조정 없이도 교착 상태가 중지되었습니다. https://tools.percona.com/wizard 를 사용하려면 마법사에 대한 링크가 있습니다.

누군가 도움이된다면 my.cnf 파일을 게시하게되어 기쁩니다.

교착 상태 문제는 더 이상 문제가되지 않지만 이제는이 오류가 매우 자주 발생합니다.

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).

이것이 MySQL 구성 문제 일 수 있습니까?


우리는 그 오류를 스스로보기 시작했습니다. 질문에 대한 답을 찾은 적이 있습니까?
trimbletodd

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.