正如我在其他文章中所说的, WooCommerce 它是一个日益强大和灵活的模块,能够转变 WordPress 在一个 初创企业的理想在线商店.
对于一个中等规模的在线商店来说, WooCommerce 它也可以在“共享主机”上运行,如果使用的主题不消耗太多资源并且您不滥用其他模块(插件),则能够轻松支持每天 5.000 个产品/100 个订单。
源代码优化 WP 主题、模块(WP 插件)和 数据库优化 还有两个方面我们需要非常小心。
前几天我注意到一家小型网上商店正在启动 消耗大量的 RAM 资源和 CPU 在专用服务器上 慷慨的。 这种高资源消耗导致服务器上的“负载”增加以及在线商店页面的长时间加载。
当我们发现 Web 服务器上出现不合理的高负载时,最好在采取任何措施之前仔细调查原因。
在数据库中,我注意到表“wp_woocommerce_sessions
“它超大。 它有超过 6 GB。 数据库中一个表的巨大容量,通常总共不超过 100 MB。
内容
wp_是什么woocommerce_会话?
从他的名字我们可以猜到,这张桌子“wp_woocommerce_sessions
”包含 PHP 会话 (PHP会话).
这些会话是网站用户(或网络机器人)的操作,大多数时候他们通过 cookie 到达数据库。 在wp_中woocommerce_sessions 存储用户在购物车中放置的产品的数据、优惠券、运费、客户数据以及与产品订购过程相关的许多其他信息。
无论用户是否在站点上注册,都会创建这些会话,并且通常会在一段时间后自动过期并删除。
不幸的是,这些会话并不总是被删除,在某些情况下,它们仍然永久存储在 wp_woocommerce_sessions,这使得这个表达到了相当大的体积。
如何删除表 wp_woocommerce_sessions
从SQL?
1。 到 數據表 → WooCommerce → 状态 → 工具 (标签)。
2.向下滚动到选项“清除客户会话“。 小心! 删除客户会话意味着删除他们放入购物车的所有产品。 如果在删除这些会话时,购物车中有产品的客户将消失,并且可能无法完成在线订单。
3. 单击“清除”并确认操作。
此时表“wp_woocommerce_sessions”为空,因此所有客户购物会话均已删除。
问题还远没有解决。 SQL 表 wp_woocommerce_sessions 会再次收集其中的数据,默认情况下会再次获取比例,这是不可取的。
我们如何阻止客户端会话永久存储在 WooCommerce – wp_woocommerce_sessions
?
我上面已经展示了表“wp_woocommerce_sessions”,但几天后客户端会话再次收集时问题将再次出现。
前 WooCommerce 2.5、通过cookie捕获客户端会话,稍后保存在表中 WordPress “wp_options
“。
对于较大的商店,这种方法往往会导致灾难。 “wp_options“作为重要的餐桌 WordPress, 由常规选项和设置使用。 识别并手动删除存储在 wp_options
这不是一件容易的事。
性能 WooCommerce 它们不是最好的,随着时间的推移,可扩展性是一个敏感点。
通过推出 WooCommerce 2.5 2015年,开发商 WooCommerce 引入了新的会话处理和存储系统 WooCommerce,基于 WP 会话管理器. 这个系统导致了出现 wp_woocommerce_sessions
. 客户端会话的专用表,在数据库中不与其他表交互。 如果出现重大错误,损失应该是最小的。
据我观察,之前推出的网上商店 WooCommerce 2.5 随着时间的推移不断更新,在自动删除客户端会话方面存在一些问题。 这很可能是较新版本上出现的错误 WooCommerce 2.5 或插件 WordPress / WooCommerce 没有跟上更新。
在我的情况下,它与添加到文件中的函数发生冲突 functions.php
的主题,以及 防止在会话过期后自动删除 woocommerce_sessions
.
如果您遇到这样的问题,您需要仔细调查所有可能的原因。 SQL 错误、SQL 权限、Cron 作业、与其他插件冲突,最后但并非最不重要的是检查您在代码中所做的更改。
我看到了 WooCommerce 只需 29 美元即可提供能够管理客户会话的插件。 ”清除购物车和会话 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();
}
如果您需要帮助或有其他解决方案,请发表评论。
我无法删除重达 500mb 的数据,并且我有每分钟 1000mb 的限制来删除所有内容,再次完全填满...... .some 解决方案?