免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6187 | 回复: 12
打印 上一主题 下一主题

Mysql内存表select问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-02 15:22 |只看该作者 |倒序浏览
在测试Mysql内存表的过程中,insert10万条记录后,再一条条delete掉,相当于表里没记录,执行10次select操作,很慢,需要1000秒左右的时间,如果表里有记录,执行10万次,只要几十秒就执行完了。在测试过程中,如果往内存表里插入1条记录,select性能就会提高很多。
不知道大家有没有碰到过,目前操作主要就一张表,同时在线数大致也就10万最多了,select,insert,update操作并发很多,目前mysql有点支撑不住,想换内存表,现在做了些内存表测试,感觉有些地方怪怪的,内存表是否有哪些需要注意的,哪位熟悉的讲下。

论坛徽章:
0
2 [报告]
发表于 2009-07-02 15:42 |只看该作者
对比过status,主要就Handler_read_rnd_next  这个参数变化很大,根据查的资料,说扫描次数太多,需要优化sql本身,利用explain分析,表里没数据的时候
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                                               |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
|  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Impossible WHERE noticed after reading const tables

有数据的时候就可以看到把索引利用起来,速度就很快

论坛徽章:
0
3 [报告]
发表于 2009-07-02 15:46 |只看该作者
利用profile分析,主要慢在statistics
+--------------------+-----------+
| Status             | Duration  |
+--------------------+-----------+
| (initialization)   | 0.0000032 |
| Opening tables     | 0.0000117 |
| System lock        | 0.000004  |
| Table lock         | 0.0000097 |
| init               | 0.0000267 |
| optimizing         | 0.0000215 |
| statistics         | 0.012672  |
| preparing          | 0.0000287 |
| executing          | 0.000093  |
| end                | 0.0000097 |
| query end          | 0.0000077 |
| freeing items      | 0.0000297 |
| closing tables     | 0.0000117 |
| logging slow query | 0.0000037 |
+--------------------+-----------+

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
4 [报告]
发表于 2009-07-02 20:55 |只看该作者
我刚才重复了下楼主描述的操作(10w数量级),没有能够重现楼主所说的情况。
lz最好再详细说下你的过程是怎样的?那10个select的语句是啥?

从你的描述来看应该跟mysql内存中驻留的信息有关,大量的删除后,mysql不会及时的对表空间进行清理,或者没有update缓存的index。
insert一条记录后,进行了清理,从而解决了问题。

不过只是我的猜测。。。

论坛徽章:
0
5 [报告]
发表于 2009-07-02 22:36 |只看该作者
内存表,不知道说什么好。。。。锁表问题的存在,性能好不到哪儿去

论坛徽章:
0
6 [报告]
发表于 2009-07-02 23:52 |只看该作者
内存表我一直也在用,没遇到这种奇怪的现象。在线用户我们存到内存表中,基本也在10W以上了。

论坛徽章:
0
7 [报告]
发表于 2009-07-03 08:28 |只看该作者
不知道各位的内存表是怎么实现数据同步的呢?我马上的几个项目都要用上内存表了!

论坛徽章:
0
8 [报告]
发表于 2009-07-03 08:53 |只看该作者

回复 #4 cenalulu 的帖子

楼主是不是在做并发操作,同时几十个一起select一个表?大家有没有这样试试?

论坛徽章:
0
9 [报告]
发表于 2009-07-04 23:41 |只看该作者

回复 #4 cenalulu 的帖子

while(i<=100000)
{
delete from table where name='' limit 1;
i++;
}

插入的时候也是用10万次循环插入到表中
10万次Insert后,调用10万次select 50秒左右,然后10万次delete后,内存表里没有记录,然后再执行10万次select,这个时候要消耗1000秒左右的时间。
测试了几次都是这样,在对空表执行10万次select过程中,如果插入1条记录,速度就会快起来。
过程分析的一些在上面列出的

论坛徽章:
0
10 [报告]
发表于 2009-07-04 23:42 |只看该作者

回复 #8 urapple 的帖子

不是并发,其实是串行的,只有执行好一次select后才会调用下一次select
while
select
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP