mysql creat table as_CREATE TABLE AS SELECT杀死MySQL

我们在功能强大的硬件(具有8个Xeon内核,8Gb RAM和RAID10的HP DL360)上运行具有中等负载(200-300 QPS)的MySQL服务器.所有表都是innodb,活动数据集适合分配的innodb_buffer_pool_size.

我们的数据库已规范化,为了减少联接的数量,我们使用实例化视图来展平数据集.由于一天要分几次添加数据,因此将使用CREATE TABLE AS SELECT而不是使用复杂的触发器来动态更新MV:s.

问题是,有时在运行这些CREATE查询时(每个查询需要5到50秒的时间),其他与服务器无关的查询似乎在CREATE查询之后排队,导致数据库无响应.

为了(重新)生成MV:我们使用如下代码:

BEGIN TRANSACTION;

DROP TABLE IF EXISTS TableName_TMP;

CREATE TABLE TableName_TMP ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci AS

SELECT about100columns, and10Expressions

FROM Table1

JOIN Table2 ON Table1.fk = Table2.pk

/* join up to 13 other tables */

WHERE ((removed IS NULL OR removed = 0))

ORDER BY created DESC, id ASC;

ALTER TABLE TableName_TMP ADD PRIMARY KEY(id), INDEX(created);

DROP TABLE IF EXISTS TableName;

ALTER TABLE TableName_TMP RENAME TO TableName;

COMMIT;

SELECT的EXPLAIN产生类似以下内容:

+----+-------------+------------------+-------------+---------------+------------+---------+------------------------------+-------+-----------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+------------------+-------------+---------------+------------+---------+ ------------------------------+-------+-----------------------------+

| 1 | SIMPLE | Table1 | ref_or_null | removed | removed | 5 | const | 76093 | Using where; Using filesort |

| 1 | SIMPLE | Table2 | eq_ref | PRIMARY | PRIMARY | 4 | Table1.fk1 | 1 | |

| 1 | SIMPLE | Table3 | eq_ref | PRIMARY | PRIMARY | 4 | Table1.fk2 | 1 | |

/* More of the same */

| 1 | SIMPLE | TableN | eq_ref | PRIMARY | PRIMARY | 4 | TableM.fk | 1 | Using index |

| 1 | SIMPLE | TableX | eq_ref | PRIMARY | PRIMARY | 4 | TableY.fk | 1 | |

/* More of the same */

+----+-------------+------------------+-------------+---------------+------------+---------+------------------------------+-------+-----------------------------+

有什么想法为什么CREATE TABLE AS会使我们的服务器完全过载,又如何防止它过载?

问候,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值