数据库中的 wp_woocommerce_sessions 太大 [如何修复]

正如我在其他文章中所说,WooCommerce 是一个越来越强大和灵活的模块,能够转换 WordPress 在一个 初创企业的理想在线商店.

对于一个普通的在线商店,WooCommerce 可以运行在“共享主机”上,如果使用的主题不消耗太多资源并且不滥用其他模块(插件),则可以轻松支持每天 5.000 个产品/100 个订单。

源代码优化 WP 主题、模块(WP 插件)和 数据库优化 还有两个方面我们需要非常小心。

前几天我注意到一家不起眼的网上商店正在开张 消耗大量的 RAM 资源和 CPU 在专用服务器上 慷慨的。 这种高资源消耗导致服务器上的“负载”增加以及在线商店页面的长时间加载。

当我们发现 Web 服务器上出现不合理的高负载时,最好在采取任何措施之前仔细调查原因。

在数据库中,我注意到表“wp_woocommerce_sessions“它超大。 它有超过 6 GB。 数据库中一个表的巨大容量,通常总共不超过 100 MB。

什么是 wp_woocommerce_sessions?

从他的名字我们可以猜到,这张桌子“wp_woocommerce_sessions”包含 PHP 会话 (PHP会话).
这些会话是站点用户(或网络机器人)的操作,大多数情况下他们通过 cookie 访问数据库。 在 wp_woocommerce_sessions 中存储了有关用户放入购物车的产品的数据、优惠券、运费、客户数据以及与产品订购过程相关的许多其他信息。

无论用户是否在站点上注册,都会创建这些会话,并且通常会在一段时间后自动过期并删除。

不幸的是,这些会话并不总是被删除,并且在某些情况下它们会永久存储在 wp_woocommerce_sessions 中,这使得该表非常大。

如何删除表 wp_woocommerce_sessions 从SQL?

1。 到 用户面板 →  WooCommerce →  订单状态 →  鑫安工具 (标签)。

2.向下滚动到选项“清除客户会话“。 小心! 删除客户会话意味着删除他们放入购物车的所有产品。 如果在删除这些会话时,购物车中有产品的客户将消失,并且可能无法完成在线订单。

3. 单击“清除”并确认操作。

此时“wp_woocommerce_sessions”表为空,因此所有客户购物会话都已删除。

问题远未解决。 wp_woocommerce_sessions SQL 表将再次收集其中的数据,默认情况下它会再次获得比例,这是不可取的。

我们如何阻止客户会话永久存储在 WooCommerce 中 - wp_woocommerce_sessions?

我们在上面展示了如何从数据库中清空“wp_woocommerce_sessions”表,但是在客户会话再次聚集的几天后问题将再次出现。

在 WooCommerce 2.5 之前,客户会话是通过 cookie 捕获的,然后保存到表中。 WordPress “wp_options“。
对于较大的商店,这种方法往往会导致灾难。 “wp_options“作为重要的餐桌 WordPress, 由常规选项和设置使用。 识别并手动删除存储在 wp_options 这不是一件容易的事。
WooCommerce 的性能并不是最好的,随着时间的推移可扩展性是一个敏感点。

随着 2.5 年 WooCommerce 2015 的推出,WooCommerce 开发人员引入了一个新的 WooCommerce 会话处理和存储系统,基于 WP 会话管理器. 这个系统导致了出现 wp_woocommerce_sessions. 客户端会话的专用表,在数据库中不与其他表交互。 如果出现重大错误,损失应该是最小的。

据我所知,在 WooCommerce 2.5 之前推出的在线商店随着时间的推移不断更新,在自动删除客户端会话方面存在一些问题。 很可能是出现在较新版本的 WooCommerce 2.5 或插件上的错误 WordPress / WooCommerce 没有跟上更新。

在我的情况下,它与添加到文件中的函数发生冲突 functions.php 的主题,以及 防止在会话过期后自动删除 woocommerce_sessions.
如果您遇到这样的问题,您需要仔细调查所有可能的原因。 SQL 错误、SQL 权限、Cron 作业、与其他插件冲突,最后但并非最不重要的是检查您在代码中所做的更改。

我看到 WooCommerce 提供的插件只需 29 美元 admin强调客户会议。 “清除 WooCommerce 的购物车和会话“。 当然,除了预定的会话删除之外,该模块还有几个可以帮助您的工具。

更简单的选择 预定删除“woocommerce_sessions”每隔一天, 可在以下代码中使用 functions.php:

// clean cart every day
if (!wp_next_scheduled('cron_wc_clean_cart')) {
    wp_schedule_event( time(), 'daily', 'cron_wc_clean_cart' );
}

add_action ( 'cron_wc_clean_cart', 'wc_clean_session_cart' );
function wc_clean_session_cart() {
    global  $wpdb;

    $wpdb->query( "TRUNCATE {$wpdb->prefix}woocommerce_sessions" );
    $wpdb->query( "DELETE FROM {$wpdb->usermeta} WHERE meta_key='_woocommerce_persistent_cart_" . get_current_blog_id() . "';" );
    wp_cache_flush();
}

如果您需要帮助或有其他解决方案,请发表评论。

如何以 » 调整与技巧 » 数据库中的 wp_woocommerce_sessions 太大 [如何修复]

对技术充满热情,我喜欢测试和编写有关操作系统的教程 macOS, Linux, Windows, 关于 WordPress, WooCommerce 和配置 LEMP 网络服务器 (Linux、NGINX、MySQL 和 PHP)。 我写在 StealthSettings.com 自 2006 年以来,几年后我开始撰写 iHowTo.Tips 教程和有关生态系统中设备的新闻 Apple: iPhone,iPad, Apple 手表,HomePod, iMac, MacBook、AirPods 和配件。

1 次思考“数据库中的 wp_woocommerce_sessions 太大 [如何修复]”

  1. 我无法删除重达 500mb 的数据,并且我有每分钟 1000mb 的限制来删除所有内容,再次完全填满...... .some 解决方案?

    回复

发表评论