首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将每小时1000 s的节点上传到drupal 7站点并避免死锁?

如何将每小时1000 s的节点上传到drupal 7站点并避免死锁?
EN

Drupal用户
提问于 2012-10-04 06:44:50
回答 3查看 3.3K关注 0票数 9

不久前,我在这里写了关于死锁的文章:PDOException: SQLSTATE[40001]:序列化失败:在尝试锁定时发现1213死锁;

尽管我的开发团队所做的一切,我们仍然会遇到这样的错误:

PDOException: SQLSTATE40001:序列化失败:尝试锁定时发现1213死锁;尝试重新启动事务:插入{location_instance} (nid、vid、uid、genid、lid)值(:db_insert_placeholder_0、:db_insert_placeholder_1、:db_insert_placeholder_2、:db_insert_placeholder_3、:db_insert_placeholder_4);数组( /var/www/website.com/sites/all/modules/location/location.module).的第974行)中的数组( *db_插入_占位符_0 => 1059 *db_插入_占位符_1 => 1059 *db_插入_占位符_2 => 0 *db_插入_占位符_3。 => cck:field_item_location:1059 *db_插入_占位符_4。 => 1000 )

尽管该示例中有特定的表,但我们在其他表上得到了这个错误。

这是我的情况。我参加了一个大型的大学项目。在任何时候,每天都有50,000名校园居民使用该系统。此外,我正在手动和通过自定义模块代码(从旧的大学数据迁移到这个新的Drupal 7站点)迁移1000多个内容项。

这个错误正在扼杀我们,以至于如果Drupal无法处理这种负载,我们几乎已经准备好放弃过去几年的工作,继续做一些其他的事情。

但这或多或少是我的问题- Drupal如何处理这种类型的负载?我如何组织我的工作流程,以便能够处理这么多的活动?这是Drupal的问题吗?数据库问题?

具体来说,我是运行Ubuntu,灯栈16 am内存。我愿意接受任何建议,无论是与Drupal相关的、与数据库相关的、与服务器配置相关的,还是在Drupal的能力范围内工作的不同工作流,因此,如果您有这么多活动的经验,请随时提出建议。

EN

回答 3

Drupal用户

回答已采纳

发布于 2012-10-14 01:29:09

答案是:正确配置MySQL my.cnf文件。

经过一个多星期的研究,我发现Drupal 7确实能够处理这么多并发输入流量。

这些死锁PDOExceptions与未正确优化的MySQL my.cnf文件有关。在和其他来源的帮助下,自从为MySQL实现新的配置设置以来,我们的团队还没有发生过一次死锁。我们测试了我们的批处理脚本,以模拟多达500个当前用户,没有问题地保存内容。看看这里的线。

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

特别是,Dalin建议使用向导根据服务器规范和表类型获取基本配置文件。使用后,即使没有进一步调整,死锁也停止了。下面是向导的链接(如果您想尝试的话):https://tools.percona.com/wizard

如果有人觉得my.cnf文件有帮助的话,我很乐意发布它。

虽然死锁问题不再是一个问题,但我们现在经常会收到这样的错误:

代码语言:javascript
运行
复制
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配置问题?

票数 2
EN

Drupal用户

发布于 2013-03-08 19:20:49

我在斯坦福大学工作,也一直在做类似的事情。我们必须经常地在100,000+节点上加载。我们已经为我们自己的自定义加载代码工作了两年,现在已经能够大大加快使用pcntl_fork的过程。您必须记住的唯一一件事是在调用叉之前关闭所有套接字连接。例如,您必须关闭mysql连接、memcache连接,甚至mongo连接。Drupal将在不存在的情况下自动创建新的连接。至于死锁问题,我们可以通过放置innodb_locks_unsafe_for_binlog = 1来解决这个问题。

票数 6
EN

Drupal用户

发布于 2012-10-11 13:32:11

http://dev.mysql.com/doc/refman/5.0/en/innodb-deadlocks.html这个mysql页面建议当您遇到死锁时应该做什么。

通过微调mysql配置可以帮助您解决这个问题。

票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/45617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档