由于使用woocommerce优惠券生成器插件生成了40万张优惠券,并且MySQL服务器过载和响应缓慢,因此服务器响应速度极慢

时间:2018-10-02 09:27:07

标签: mysql database performance woocommerce overloading

我决定试用适用于WooCommerce插件的Coupon Generator,发现它很棒。我只知道这会给我们的网站性能带来巨大的挫折。 我们的网站在2台专用服务器上运行,每个Web服务器和DATABASE服务器都有16个CPU CORES。我们必须观察到,自从使用Coupon Generator for WooCommerce插件创建了超过400,000张优惠券(这是我不知道并且很无知的错误,因为我认为这不会对网站的响应速度造成任何挫折),所以网站最终成为了极端慢。响应大约需要40到60秒。加载时间非常长,不到1秒。

在检查时,数据库服务器。我们得到以下结果:

root @ mysql〜]#top -H

顶部– 12:34:47最多6天,11:05、2个用户,平均负载:32.71、34.69、39.46 任务:总计528,运行43,睡眠485,停止0,丧尸0 Cpu(s):86.1%us,12.3%sy,0.0%ni,0.0%id,0.0%wa,0.0%hi,1.5%si,0.0%st 内存:总计10120336k,已使用7859684k,免费2260652k,182484k缓冲区 掉期:总计4095996k,已使用0k,免费4095996k,已缓存6448320k

PID用户PR NI VIRT RES SHR S%CPU%MEM TIME +命令 35108 mysql 20 0 1898m 703m 12m R 19.9 7.1 0:01.74 mysqld 35104 MySQL 20 0 1898m 703m 12m R 19.3 7.1 0:01.71 mysqld 35117 MySQL 20 0 1898m 703m 12m R 19.3 7.1 0:00.79 mysqld 35111 mysql 20 0 1898m 703m 12m R 18.9 7.1 0:01.65 mysqld 35080 mysql 20 0 1898m 703m 12m R 18.6 7.1 0:02.25 mysqld 35065 mysql 20 0 1898m 703m 12m R 18.3 7.1 0:01.68 mysqld 35134 MySQL 20 0 1898m 703m 12m R 18.3 7.1 0:00.73 mysqld 35053 mysql 20 0 1898m 703m 12m R 18.0 7.1 0:04.17 mysqld 35121 mysql 20 0 1898m 703m 12m R 18.0 7.1 0:01.79 mysqld 35133 MySQL 20 0 1898m 703m 12m R 18.0 7.1 0:00.76 mysqld 35126 mysql 20 0 1898m 703m 12m R 17.6 7.1 0:00.71 mysqld 35127 MySQL 20 0 1898m 703m 12m S 17.6 7.1 0:01.07 mysqld 35136 MySQL 20 0 1898m 703m 12m R 17.6 7.1 0:00.65 mysqld 35141 MySQL 20 0 1898m 703m 12m R 17.6 7.1 0:00.76 mysqld 35094 mysql 20 0 1898m 703m 12m R 17.3 7.1 0:01.71 mysqld

这是非常超负荷的。该网站称MYSQL TABLE OF超过80MB,这是非常沉重的。

我想问一下,因为如何影响您使用插件生成的400,000张优惠券,将其减少到20,000张,因为它影响了我们,因此我们每月要付出巨额费用维护网站。除此之外,该网站的响应负荷非常大。

请任何人帮助!

1 个答案:

答案 0 :(得分:1)

要使用内置功能删除优惠券,您可以将wp_delete_post( $id );用作WooCommerce将优惠券存储为自定义帖子类型。

因此,以下功能将在每次初始化管理区域时运行并删除100张优惠券,并且您可以根据需要增加限额

add_action( 'admin_init', 'count_coupon' );

function count_coupon() {
    global $wpdb;

    if ( ! is_user_logged_in() ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    global $wpdb;
    $copuns = $wpdb->get_results( "SELECT ID FROM {$wpdb->prefix}posts WHERE post_type = 'shop_coupon' LIMIT 100" );
    foreach ( $copuns as $copun ) {

        wp_delete_post( $copun->ID );

    }
}

您可以直接从mysql删除那些优惠券,但我更喜欢这种方式。