mysql查询在一段时间不活动后超时 - 我认为查询缓存问题

时间:2010-06-26 06:53:53

标签: mysql

使用最新的mysql服务器,

经过一段时间的不活动后,我的网站会超时(只有部分不是全部) 这些查询不是新编写的现有查询。

测试结果

  1. 当执行一个简单的sql(从产品中选择count(*))时,这一切都很好。
  2. 在sql

    下执行时
    SELECT products.pid
    FROM
        products INNER JOIN
        catalog ON products.cid=catalog.cid
    WHERE
        products.is_visible = 'Yes' AND (
            products.inventory_control = 'No' OR
            products.stock > 0 OR
            products.inventory_rule = 'OutOfStock' OR (
                products.inventory_control = 'AttrRuleInc' AND
                products.stock >= 0
            )
        ) AND products.is_home = 'Yes'
    GROUP BY products.pid
    
  3. 它超时(注意它不会一直超时,这会在1小时或2小时不活动后发生)

    1. 第一次执行需要30多秒才会超时,之后执行上述执行SQL 2到3次,然后执行快速执行3到5秒
    2. 在不活动1或2小时后,这种模式会重复出现。

      我没有对设置进行任何更改。

      我在这台服务器上有2个站点。

      第一台服务器在数据库中有20,000行(这个工作正常)第二个站点在数据库中有150,000行(这个有这个问题)

      所以这就是“查询超时”

      我不认为这是SQL设置上的内容,如果是,那么我应该在两个网站上都看到这种行为

      ****这里是表结构,其超时问题/需要40秒

      #this structure has 2 additional keys we created 
      #  KEY `product_id` (`product_id`),
      #  KEY `product_no` (`product_no`)
      
      # this one is having issues
      
      
      --
      -- Table structure for table `products` on lpbatt database server
      --
      
      DROP TABLE IF EXISTS `products`;
      SET @saved_cs_client     = @@character_set_client;
      SET character_set_client = utf8;
      CREATE TABLE `products` (
        `pid` int(10) unsigned NOT NULL auto_increment,
        `cid` int(10) unsigned NOT NULL default '0',
        `manufacturer_id` int(10) unsigned NOT NULL default '0',
        `is_visible` enum('Yes','No') NOT NULL default 'Yes',
        `is_hotdeal` enum('Yes','No') NOT NULL default 'No',
        `is_home` enum('Yes','No') NOT NULL default 'No',
        `is_taxable` enum('Yes','No') NOT NULL default 'Yes',
        `is_dollar_days` enum('Yes','No') NOT NULL default 'No',
        `is_google_co` enum('Yes','No') NOT NULL default 'Yes',
        `is_doba` enum('Yes','No') NOT NULL default 'No',
        `is_locked` enum('Yes','No') NOT NULL default 'No',
        `inventory_control` enum('Yes','AttrRuleExc','AttrRuleInc','No') NOT NULL default 'No',
        `inventory_rule` enum('Hide','OutOfStock') NOT NULL default 'Hide',
        `stock` int(10) NOT NULL default '0',
        `stock_warning` int(10) NOT NULL default '0',
        `weight` decimal(10,2) unsigned NOT NULL default '0.00',
        `free_shipping` enum('Yes','No') NOT NULL default 'No',
        `digital_product` enum('Yes','No') NOT NULL default 'No',
        `digital_product_file` varchar(255) NOT NULL default '',
        `cost` decimal(20,5) unsigned NOT NULL default '0.00000',
        `price` decimal(20,5) unsigned NOT NULL default '0.00000',
        `price2` decimal(20,5) unsigned NOT NULL default '0.00000',
        `price_level_1` decimal(20,5) unsigned NOT NULL default '0.00000',
        `price_level_2` decimal(20,5) unsigned NOT NULL default '0.00000',
        `price_level_3` decimal(20,5) unsigned NOT NULL default '0.00000',
        `shipping_price` decimal(20,5) unsigned NOT NULL default '0.00000',
        `tax_class_id` int(10) unsigned NOT NULL default '0',
        `tax_rate` decimal(20,5) NOT NULL default '-1.00000',
        `call_for_price` enum('Yes','No') NOT NULL default 'No',
        `priority` int(11) NOT NULL default '0',
        `attributes_count` int(11) NOT NULL default '0',
        `min_order` int(10) NOT NULL default '1',
        `max_order` int(10) unsigned NOT NULL default '0',
        `added` datetime NOT NULL default '0000-00-00 00:00:00',
        `products_location_id` int(10) unsigned NOT NULL default '0',
       `url_hash` varchar(32) NOT NULL default '',
        `url_default` varchar(128) NOT NULL default '',
        `url_custom` varchar(128) NOT NULL default '',
        `product_id` int(64) NOT NULL default '0',
        `product_sku` varchar(64) NOT NULL default '',
        `product_upc` varchar(64) NOT NULL default '',
        `case_pack` int(11) NOT NULL default '-1',
        `inter_pack` int(11) NOT NULL default '-1',
        `gift_quantity` int(10) unsigned NOT NULL default '0',
        `dimension_width` decimal(10,2) NOT NULL default '0.00',
        `dimension_length` decimal(10,2) NOT NULL default '0.00',
        `dimension_height` decimal(10,2) NOT NULL default '0.00',
        `image_location` enum('Local','Web') NOT NULL default 'Local',
        `image_url` varchar(255) NOT NULL default '',
        `image_alt_text` varchar(255) NOT NULL default '',
        `tmp_manufacturer` varchar(30) default NULL,
        `tmp_family` varchar(30) default NULL,
        `tmp_series` varchar(30) default NULL,
        `tmp_model` varchar(30) default NULL,
        `tmp_ptype` varchar(30) default NULL,
        `product_no` varchar(40) default NULL,
        `part_no` varchar(300) default NULL,
        `spec_1` varchar(7) default NULL,
        `spec_2` varchar(7) default NULL,
        `spec_3` varchar(7) default NULL,
        `spec_4` varchar(40) default NULL,
        `title` varchar(255) NOT NULL default '',
        `meta_keywords` text NOT NULL,
        `meta_title` text NOT NULL,
        `meta_description` text NOT NULL,
        `overview` text,
        `description` text,
        `zoom_option` enum('global','none','zoom','magnify','magicthumb','imagelayover') NOT NULL default 'global',
        PRIMARY KEY  (`pid`),
        KEY `cid` (`cid`),
        KEY `is_visible` (`is_visible`),
        KEY `url_hash` (`url_hash`),
        KEY `product_id` (`product_id`),
        KEY `product_no` (`product_no`)
      ) ENGINE=MyISAM AUTO_INCREMENT=1630746530 DEFAULT CHARSET=utf8;
      SET character_set_client = @saved_cs_client;
      

      下面是在另一台服务器上运行但工作正常的表结构

      #see the products table structure and catalog table structure 
      #this is fine on this server 
      
      
      # --------------------------------------------------------
      # Host:                         laptopnbparts.com
      # Database:                     laptopnbpartscom
      # Server version:               5.0.77
      # Server OS:                    redhat-linux-gnu
      # HeidiSQL version:             5.0.0.3222
      # Date/time:                    2010-06-25 18:13:33
      # --------------------------------------------------------
      
      /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
      /*!40101 SET NAMES utf8 */;
      /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
      /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
      
      # Dumping structure for table laptopnbpartscom.catalog
      CREATE TABLE IF NOT EXISTS `catalog` (
        `cid` int(10) unsigned NOT NULL auto_increment,
        `parent` int(10) unsigned NOT NULL default '0',
        `level` int(10) unsigned NOT NULL default '0',
        `priority` smallint(5) unsigned NOT NULL default '5',
        `is_visible` enum('Yes','No') NOT NULL default 'Yes',
        `list_subcats` enum('Yes','No') NOT NULL default 'No',
        `url_hash` varchar(32) NOT NULL default '',
        `url_default` varchar(128) NOT NULL default '',
        `url_custom` varchar(128) NOT NULL default '',
        `key_name` varchar(255) NOT NULL default '',
        `meta_keywords` text,
        `meta_title` text,
        `meta_description` text,
        `category_header` varchar(255) NOT NULL default '',
        `name` varchar(255) NOT NULL default '',
        `description` text,
        `description_bottom` text,
        `category_path` text,
        PRIMARY KEY  (`cid`),
        KEY `parent` (`parent`),
        KEY `level` (`level`),
        KEY `priority` (`priority`),
        KEY `url_hash` (`url_hash`)
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
      
      # Data exporting was unselected.
      
      
      # Dumping structure for table laptopnbpartscom.products
      CREATE TABLE IF NOT EXISTS `products` (
        `pid` int(10) unsigned NOT NULL auto_increment,
        `cid` int(10) unsigned NOT NULL default '0',
        `manufacturer_id` int(10) unsigned NOT NULL default '0',
        `is_visible` enum('Yes','No') NOT NULL default 'Yes',
        `is_hotdeal` enum('Yes','No') NOT NULL default 'No',
        `is_home` enum('Yes','No') NOT NULL default 'No',
        `is_taxable` enum('Yes','No') NOT NULL default 'Yes',
        `is_dollar_days` enum('Yes','No') NOT NULL default 'No',
        `is_google_co` enum('Yes','No') NOT NULL default 'Yes',
        `is_doba` enum('Yes','No') NOT NULL default 'No',
        `is_locked` enum('Yes','No') NOT NULL default 'No',
        `inventory_control` enum('Yes','AttrRuleExc','AttrRuleInc','No') NOT NULL default 'No',
        `inventory_rule` enum('Hide','OutOfStock') NOT NULL default 'Hide',
        `stock` int(10) NOT NULL default '0',
        `stock_warning` int(10) NOT NULL default '0',
        `weight` decimal(10,2) unsigned NOT NULL default '0.00',
        `free_shipping` enum('Yes','No') NOT NULL default 'No',
        `digital_product` enum('Yes','No') NOT NULL default 'No',
        `digital_product_file` varchar(255) NOT NULL default '',
        `cost` decimal(20,5) unsigned NOT NULL default '0.00000',
        `price` decimal(20,5) unsigned NOT NULL default '0.00000',
        `price2` decimal(20,5) unsigned NOT NULL default '0.00000',
        `price_level_1` decimal(20,5) unsigned NOT NULL default '0.00000',
        `price_level_2` decimal(20,5) unsigned NOT NULL default '0.00000',
        `price_level_3` decimal(20,5) unsigned NOT NULL default '0.00000',
        `shipping_price` decimal(20,5) unsigned NOT NULL default '0.00000',
        `tax_class_id` int(10) unsigned NOT NULL default '0',
        `tax_rate` decimal(20,5) NOT NULL default '-1.00000',
        `call_for_price` enum('Yes','No') NOT NULL default 'No',
        `priority` int(11) NOT NULL default '0',
        `attributes_count` int(11) NOT NULL default '0',
        `min_order` int(10) NOT NULL default '1',
        `max_order` int(10) unsigned NOT NULL default '0',
        `added` datetime NOT NULL default '0000-00-00 00:00:00',
        `products_location_id` int(10) unsigned NOT NULL default '0',
        `url_hash` varchar(32) NOT NULL default '',
        `url_default` varchar(128) NOT NULL default '',
        `url_custom` varchar(128) NOT NULL default '',
        `product_id` varchar(64) NOT NULL default '',
        `product_sku` varchar(64) NOT NULL default '',
        `product_upc` varchar(64) NOT NULL default '',
        `case_pack` int(11) NOT NULL default '-1',
        `inter_pack` int(11) NOT NULL default '-1',
        `gift_quantity` int(10) unsigned NOT NULL default '0',
        `dimension_width` decimal(10,2) NOT NULL default '0.00',
        `dimension_length` decimal(10,2) NOT NULL default '0.00',
        `dimension_height` decimal(10,2) NOT NULL default '0.00',
        `image_location` enum('Local','Web') NOT NULL default 'Local',
        `image_url` varchar(255) NOT NULL default '',
        `image_alt_text` varchar(255) NOT NULL default '',
        `tmp_manufacturer` varchar(30) default NULL,
        `tmp_series` varchar(30) default NULL,
        `tmp_model` varchar(30) default NULL,
        `tmp_ptype` varchar(30) default NULL,
        `product_no` varchar(60) default NULL,
        `part_no` varchar(60) default NULL,
        `watt_volt_amp` varchar(100) default NULL,
        `title` varchar(255) NOT NULL default '',
        `meta_keywords` text NOT NULL,
        `meta_title` text NOT NULL,
        `meta_description` text NOT NULL,
        `overview` text,
        `description` text,
        `zoom_option` enum('global','none','zoom','magnify','magicthumb','imagelayover') NOT NULL default 'global',
        PRIMARY KEY  (`pid`),
        KEY `cid` (`cid`),
        KEY `is_visible` (`is_visible`),
        KEY `url_hash` (`url_hash`)
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
      
      # Data exporting was unselected.
      /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
      /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
      /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
      

1 个答案:

答案 0 :(得分:0)

尝试在WHERE子句中使用 CASE WHEN 而不是多个 OR 语句,并在客户端进行评估。 OR 是一个众所周知的性能杀手,因为MySQL通常不会应用INDEX,并且必须检查每个语句以过滤掉行。