Chinaunix

标题: 8G内存,最大表有5.3G,最大索引有1.7G,的优化建议 [打印本页]

作者: xueleixu    时间: 2008-07-22 11:04
标题: 8G内存,最大表有5.3G,最大索引有1.7G,的优化建议
我有一台论坛的数据库服务器配置是2颗4核CPU,8G内存,目前数据库中的单个表最大为5.3G,索引最大为1.7G, 数据库的my.cnf配置如下:
wait_timeout = 5
interactive_timeout=10
key_buffer_size = 800M
max_allowed_packet = 32M
table_cache = 4096
record_buffer=400M
sort_buffer_size = 16M
net_buffer_length = 2M
myisam_sort_buffer_size = 256M
thread_cache_size = 64
read_buffer_size = 64M
read_rnd_buffer_size = 100M
query_cache_size = 64M
query_cache_type= 1
long_query_time = 4
log-slow-queries = /database/mysql/slowsql.sql
thread_concurrency=8
tmp_table_size=1000M
max_connections=1000
max_heap_table_size = 800M
skip-bdb
skip-name-resolve
join_buffer_size=64M
default-character-set = gbk
open_files_limit = 4096
请大家帮我建议建议,论坛的访问量很大,会出现每个两三天就重启(内存不够)的现象,

[ 本帖最后由 xueleixu 于 2008-7-22 22:52 编辑 ]
作者: 枫影谁用了    时间: 2008-07-22 11:08
最关键的你没有说。。

是INNODB还是MYISAM。。。
作者: 7717060    时间: 2008-07-22 11:26
什么论坛访问量这么大!
作者: yueliangdao0608    时间: 2008-07-22 13:20
max_connections=1000

太大了。当你达到这个连接数的时候,已经内存不够了
作者: yueliangdao0608    时间: 2008-07-22 13:21
看你的样子是没有使用连接池,论坛对数据库的并发连接最多也就是80个。我这边访问也挺大的。
作者: ruochen    时间: 2008-07-22 13:29
估计是myisam
LZ说明下
作者: ruochen    时间: 2008-07-22 13:30
原帖由 yueliangdao0608 于 2008-7-22 13:21 发表
看你的样子是没有使用连接池,论坛对数据库的并发连接最多也就是80个。我这边访问也挺大的。



是不是自己开发的论坛
没有即使关闭mysql的连接
作者: yueliangdao0608    时间: 2008-07-22 22:25
原帖由 ruochen 于 2008-7-22 13:30 发表



是不是自己开发的论坛
没有即使关闭mysql的连接



我们用的是DISCUZ,INNODB和MYISAM一起用的。没有出现内存泄露。
作者: xueleixu    时间: 2008-07-22 22:51
是MYISAM
作者: digitalchina    时间: 2008-07-23 08:23
tmp_table_size=10000M
max_heap_table_size = 2000M
sort_buffer_size = 64M
net_buffer_length = 16M
myisam_sort_buffer_size = 512M
作者: 枫影谁用了    时间: 2008-07-24 09:22
max_heap_table_size = 2000M

用到这么多临时表?
作者: sunnyfun    时间: 2008-07-24 10:37
web程序是用什么写的?php? java? .net?
作者: 7islands    时间: 2008-07-24 11:43
标题: 回复 #10 digitalchina 的帖子
tmp_table_size=10000M
max_heap_table_size = 2000M  

这个2个值,mysql会取他们的最小值。
作者: yueliangdao0608    时间: 2008-07-24 18:11
标题: 回复 #13 7islands 的帖子
MySQL will use its max value when need.
作者: gogo407    时间: 2008-07-25 01:54
原帖由 yueliangdao0608 于 2008-7-24 18:11 发表
MySQL will use its max value when need.

are you sure?
作者: yueliangdao0608    时间: 2008-07-25 09:08
原帖由 gogo407 于 2008-7-25 01:54 发表

are you sure?


Yeah,except there are not enough memory to allocate .
作者: luo118    时间: 2008-08-01 11:14
原帖由 yueliangdao0608 于 2008-7-25 09:08 发表


Yeah,except there are not enough memory to allocate .


按你的說法,那8G 內存如何优化比较好?

把你的建议发上来,给大家参考一下。
作者: vema    时间: 2008-08-01 21:51
open_files_limit = 4096
thread_concurrency=8
key_buffer_size = 800M
是否可以增大
log-slow-queries = /database/mysql/slowsql.sql
丢到不同的物理硬盘  包括logbin
系统的优化
作者: myfreeke    时间: 2008-08-06 14:44
谁可以提供一下标准配置?
作者: ruochen    时间: 2008-08-06 20:24
原帖由 myfreeke 于 2008-8-6 14:44 发表
谁可以提供一下标准配置?



觉得mysql的large的内存的配置的内存太小了
现在的内存很便宜了
建议mysql官方出个标准配置吧
他们的测试机器比较多
作者: yueliangdao0608    时间: 2008-08-06 23:38
原帖由 ruochen 于 2008-8-6 20:24 发表



觉得mysql的large的内存的配置的内存太小了
现在的内存很便宜了
建议mysql官方出个标准配置吧
他们的测试机器比较多



想官方给个标准配置有点悬,人家把代码都公开了。就靠这点来赚钱了,公开了公司就破产了。
作者: ruochen    时间: 2008-08-07 08:59
原帖由 yueliangdao0608 于 2008-8-6 23:38 发表



想官方给个标准配置有点悬,人家把代码都公开了。就靠这点来赚钱了,公开了公司就破产了。




我的意思是让官方修改下mysql-large.cnf文件的配置
适当调整参数值的大小

可以将large的内存目标作为8G或者16G
medum的作为2G/4G


mysql的经济来源还有赞助,培训和现场服务呀,现在还有商业版本的授权
现在被sun收购,不知道还有社区的捐助没
作者: yueliangdao0608    时间: 2008-08-07 09:15
原帖由 ruochen 于 2008-8-7 08:59 发表




我的意思是让官方修改下mysql-large.cnf文件的配置
适当调整参数值的大小

可以将large的内存目标作为8G或者16G
medum的作为2G/4G


mysql的经济来源还有赞助,培训和现场服务呀,现在还有商业版 ...



他推荐的配置都是基于32位的。不过也就够了。因为在64位下自己只要适当调整一下参数就行了
作者: sunnyfun    时间: 2008-08-07 09:20
原帖由 yueliangdao0608 于 2008-7-24 18:11 发表
MySQL will use its max value when need.


我记得是取小的那个啊?

http://bugs.mysql.com/bug.php?id=18875

另外内部临时表不是共享的,那意味着每增加一个连接就可能产生一堆临时表,不限制一下数量或者大小的话很容易出问题的。
作者: ruochen    时间: 2008-08-07 12:04
原帖由 yueliangdao0608 于 2008-8-7 09:15 发表



他推荐的配置都是基于32位的。不过也就够了。因为在64位下自己只要适当调整一下参数就行了


推荐的内存配置参数中large的是2GB
当内存增加时,有的参数并不是能成倍的修改的
作者: yueliangdao0608    时间: 2008-08-07 12:38
原帖由 ruochen 于 2008-8-7 12:04 发表


推荐的内存配置参数中large的是2GB
当内存增加时,有的参数并不是能成倍的修改的


这些参数要根据你实际的业务以及并发访问程度来设置的,一成不变肯定是不可能的。
作者: wangbin    时间: 2008-08-07 23:32
同样的问题,关注!!!
作者: myfreeke    时间: 2008-08-09 14:25
继续关注!
作者: tspy007    时间: 2008-08-25 16:16
真的是服了你们呀
作者: 小胡他爹    时间: 2008-08-25 22:50
我一直对论坛数据库存放大量帖子内容这个事情感到不解,

其实本人一直认为数据库还是用来存放索引最好。(特别是记录数千万。上亿的时候)

帖子的内容可以保存为XML形式。多好啊。又省时间。读取时直接PHP操作XML文件,省得去查询。
作者: gogo407    时间: 2008-08-26 00:25
原帖由 小胡他爹 于 2008-8-25 22:50 发表
我一直对论坛数据库存放大量帖子内容这个事情感到不解,

其实本人一直认为数据库还是用来存放索引最好。(特别是记录数千万。上亿的时候)

帖子的内容可以保存为XML形式。多好啊。又省时间。读取时直接PH ...

支持,但是这样是不是同时在增加应用设计的难度呢:)
作者: 小胡他爹    时间: 2008-08-26 09:40
标题: 回复 #31 gogo407 的帖子
应用设计也花费不了多少精力,但是带来的好处应该是巨大的。特别像数据库巨大的时候。DISCUZ,8G的数据库我估计都要有7G是帖子内容。如果把这7G的内容提出来。只有1G的帖子标题加索引,效率会怎样呢。没有实验过。 不过本人一个表180万的记录。才220M多,效率自然不用说了。
作者: vyouzhi    时间: 2008-08-26 10:04
其实可以考虑用一下memcache之类的工具,或slave之类的主从,可能会比直接一台mysql优化来得更好
作者: ruochen    时间: 2008-08-26 10:08
原帖由 vyouzhi 于 2008-8-26 10:04 发表
其实可以考虑用一下memcache之类的工具,或slave之类的主从,可能会比直接一台mysql优化来得更好



有这样的环境和硬件最好了
还有技术的储备
作者: yueliangdao0608    时间: 2008-08-26 12:17
原帖由 vyouzhi 于 2008-8-26 10:04 发表
其实可以考虑用一下memcache之类的工具,或slave之类的主从,可能会比直接一台mysql优化来得更好



But make sure the data is saving at first.
作者: gogo407    时间: 2008-08-26 17:30
memcache也不是万能的
作者: includeyu    时间: 2008-08-27 11:44
mysql的性能如何优化确实是个问题,现在也搞的我头都大了.
我现在的MYSQL数据库装在一个老P4机器上,1G的内存.LINUX 9,MYSQL 5.1,引擎是INNODB,数据库用来MRP系统的,非WEB用.最大的单表是500万多条记录.(我的数据库是从SQL SERVER转来的)
目前查询对表一定要建立索引,否则查询超慢.但如果有涉及多表查询及子查询牵套的,就连索引都没办法了,比如我查进出库的台帐,要好几分钟才出来.但在SQL SERVER上就几乎没多大延迟.

看来这MYSQL的优化还得下工夫啊.
听说可以对表建立分区.还没测试.看以后是否能加快速度.

不知各位都有什么好办法.
作者: fivebull    时间: 2008-08-28 12:47
标题: 回复 #32 小胡他爹 的帖子
原帖由 小胡他爹 于 2008-8-26 09:40 发表
应用设计也花费不了多少精力,但是带来的好处应该是巨大的。特别像数据库巨大的时候。DISCUZ,8G的数据库我估计都要有7G是帖子内容。如果把这7G的内容提出来。只有1G的帖子标题加索引,效率会怎样呢。没有实验过 ...



实际应用没困扰?或是有某些限制?

现在我们正打算从文件走回不用文件。因为发现,用文件1)备份麻烦(小文件多) 2)分布式布署时比较麻烦 3)因为用了缓存等方式,数据库暂时也不是最大的瓶颈。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2