【问题标题】:How reduce mysql cpu usage In the below case [closed]如何减少mysql cpu使用率在以下情况下[关闭]
【发布时间】:2013-05-21 09:38:14
【问题描述】:

我正在创建一个广告系列跟踪网站。这是有 100 张桌子。我正在为每个月创建一个新表,用于使用CREATE TABLE IF NOT EXISTS 记录我的搜索和点击(该表由 23 个字段和 9 个索引组成。)。我的客户抱怨这个查询,他们告诉它占用了大量的 CPU。它在每个请求上运行。但是如果它不存在,我会创建这个表,即每月一次。这会增加CPU使用率吗?如果是,有什么办法可以减少这种情况下的 CPU 使用率?

编辑 1

CREATE TABLE IF NOT EXISTS click_log_201305 (
                      hit_id int(10) unsigned NOT NULL auto_increment,
                      link_id int(11) NOT NULL default '0',
                      word varchar(225) NOT NULL default '',
                      ppc_engine varchar(40) NOT NULL default 'internal',
                      ppc_commission varchar(10) default NULL,
                      gross_price decimal(5,3) NOT NULL default '0.000',
                      price decimal(5,3) NOT NULL default '0.000',
                      hit_date int(11) NOT NULL default '0',
                      hit_time int(11) NOT NULL default '0',
                      affiliate varchar(50) NOT NULL default '',
                      account varchar(50) NOT NULL default '',
                      commission varchar(10) default NULL,
                      paid_flag char(3) default NULL,
                      roi_code int(11) NOT NULL default '0',
                      roi_sale int(11) default NULL,
                      debug_info varchar(100) default NULL,
                      ip varchar(15) default NULL,
                      referer varchar(200) default NULL,
                      user_agent varchar(200) default NULL,
                                          subid varchar(50) default NULL,
                                          ad_id INT(11) default NULL,
                                          group_id INT(11) default NULL,
                                          country varchar(100) default NULL,
                      PRIMARY KEY (hit_id),
                      KEY jhcl_date(hit_date),
                      KEY jhcl_src(hit_date,ppc_engine),
                      KEY jhcl_id(hit_date,link_id),
                      KEY jhcl_acct(hit_date,account),
                      KEY jhcl_aff(hit_date,affiliate),
                      KEY jhcl_word(hit_date,word),
                                          KEY jhcl_camp_id(link_id),
                                          KEY jhcl_group_id(group_id),
                                          KEY jhcl_ad_id(ad_id)
                    )

【问题讨论】:

  • “我正在为每个月创建一个新表来记录我的搜索和点击” - 这不是一个好的设计...高 CPU 通常表示大量表扫描,建议您创建适当的索引。跨度>
  • 除非您提供您遇到的问题的具体细节,例如具有特定索引的特定查询等,否则无法回答这个问题 - 我们无法读懂您的想法。
  • 是的,但是什么索引?架构?查询?
  • @mvp 当一个活动正在运行时,我正在记录其详细信息,我正在检查该月的表是否存在,如果不创建新表
  • 一个带有适当索引的大表比每月一个新表要好得多(并且允许您从代码中完全摆脱create table,因此可以更快地执行插入)...它的额外好处是允许查询跨越一个月(例如过去 3 个月,去年),如果你愿意,仍然可以按月为 partitioned

标签: php mysql performance cpu-usage


【解决方案1】:

CREATE TABLE IF NOT EXISTS 放置到一个 cron 作业/计划任务中,并每天早上 0 点运行它。然后查询每天只运行一次。当您创建一个新表时,将其添加到单独的表中(比如说 table_list),您可以在其中保存您创建的表的列表。

然后先查看table_list,看看你是否已经创建了当月的表。如果在“table_list”中找不到表,可以创建新表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2011-06-09
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多