由于woocommerce优惠券生成器插件生成了400000张优惠券,mysql服务器过载和响应缓慢,服务器响应极慢

xeufq47z  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(621)

我决定尝试优惠券生成器的woocommerce插件,并发现它的伟大。我只知道这会给我们的网站性能带来巨大的挫折。我们的网站运行在2台专用服务器上,每台服务器有16个cpu核心,分别用于Web服务器和数据库服务器。我们观察到,自从使用优惠券生成器为woocommerce插件创建了超过40万张优惠券(这是一个我不知道的错误,而且我很无知,因为我认为这不会对网站的缓慢响应造成任何挫折),网站最终变得非常缓慢。大约需要40到60秒才能做出React。加载时间很长,不到1秒。
检查时,数据库服务器。我们得到以下结果:
root@mysql ~]#顶部-h
顶部–12:34:47上升6天,11:05,2个用户,平均负载:32.71,34.69,39.46任务:总共528个,43个正在运行,485个休眠,0个停止,0个僵尸cpu: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 35065mysql 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 35127mysql 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
这是非常超载。该站点调用了超过80mb的mysql表,非常繁重。
我想问,因为,我们如何才能减少400000优惠券与你插件生成20000,因为它影响我们,我们正在支付沉重的每月主网站由于这个。除此之外,网站的响应负载也非常大。
请任何人帮忙!

zfciruhq

zfciruhq1#

使用内置功能删除优惠券 wp_delete_post( $id ); 作为商业商店的优惠券作为定制邮寄类型。
所以下面的函数会在每次初始化管理区域时运行并删除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中删除这些优惠券,但我更喜欢这种方式。

相关问题