我有一个在多层层次结构中包含15k+术语的词汇表。最近我注意到,有了这么多的数据,当我试图保存一个更高级别的术语(父级到多个)时,需要花费大量的时间来保存。
我查看了webprofiler模块,发现大约有10k个查询在运行这样一个术语,包括它正在为它的子级运行的查询。我不知道这是否可以预期,但是否有办法加快这一进程?这些查询包括缓存、path_alias、taxonomy_term_data、taxonomy_term_revision、key_value等表。
我尝试了应用memcached,这大大减少了查询,特别是来自缓存表的查询,但是子术语查询仍然在运行,减慢了进程。
我还考虑过在后台运行进程,但在这种情况下,应该占用相同数量的服务器资源。这个问题非常严重,以至于当我通过drush命令更新某些术语时,整个应用程序都处于暂停状态(有时不可用)。
有什么帮助吗?
发布于 2021-07-11 00:43:35
我找到了问题的根源所在。它来自路径自动模块,该模块有一个实体更新挂钩,每次保存分类法术语时都会加载所有的子级。这样做是为了更新孩子的别名以及要保存的父级。我正在考虑在他们的发行队列中开一张票。这样做的目的应该是,只有当子别名是父属性的依赖项时才更新它们。比如/term/父项名称/子项名称。不仅如此,理想情况下,它应该在具有事务锁的队列工作器中处理。希望这能帮上忙。
https://drupal.stackexchange.com/questions/304020
复制相似问题