有几个问题:
1、每10分钟有次统计过程,统计过后,mysql进程的内存会增长10M左右,且增长十分稳定,这个增长Mysql去做什么了?有无办法遏制这个增长?2、随着增长,当Mysql占用内存达到1.8G左右的时候,会出现Out of memory的错误,个人怀疑是32位系统的2G内存限制导致此状况?3、我想手动在线的释放Mysql进程的内存,不知道有没有此类维护语句?总而言之,现在因为内存这块原因导致系统在线不稳定。有没有好的维护方法?机器为4G,32位操作系统,5.1.45社区版的Mysql没有innodb表,全部是myisam表和部分memory表下面是我的My.ini配置文件:
default-character-set=gbk
default-storage-engine=myisam
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=500
query_cache_size=0
table_cache=8196
open_files_limit=16000
tmp_table_size=1024M
max_heap_table_size=1024M
thread_cache_size=8
innodb_thread_sleep_delay=40
wait_timeout=20
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=64M
key_buffer_size=256M
read_rnd_buffer_size=256K
sort_buffer_size=1Minnodb_additional_mem_pool_size=2M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=47M
innodb_log_file_size=24M
innodb_thread_concurrency=18解决以后追加200分

解决方案 »

  1.   

    出现OUT OF MEMORY是由于你的参数设置的过大。
    tmp_table_size=1024M
    max_heap_table_size=1024M 搞小!
      

  2.   

    而且这个量还不好确定,我这个1G给的是个上限,如果超过这个上限,我会建议扩容,现在的话最大一张memory表应该在200M左右,但是这个200M可能会增长,谁都说不好啊
      

  3.   


    但是如果mysql内存不增长,不会报这个错,当达到一个门阀值的时候才会出现out of memory。解决之道在于遏制内存增长或者让内存释放?
      

  4.   

    有意思。你统计过程中间是不是用了temporay table 或者 heap table ? 用完没有释放?
      

  5.   


    这两者都用了,temporay的我写语句drop掉了,heap的因为要保留表结构,使用的是truncate语句。再讲temporary应该随着线程的释放而释放掉了吧?
      

  6.   


    是用了内存表,该drop的都写语句drop了,该truncate的也truncate了,然后?
      

  7.   

    三个问题不是都给你回答了吗参数起的作用不大! 主要是你的语句要优化的彻底! 
    对于你第三个问题, 如果你想整理内存的话,调小参数,RELOAD MYSQLD就OK。
      

  8.   

    RELOAD MYSQLD重启吗?好歹是个线上的,不可能说重启就重启……
      

  9.   

    语句优化肯定要做但是不论如何优化,我甚至是最简单的一行数据select也能造成内存的上涨 ,这个才是最重要的,如何把占用的内存释放出来?链接已经释放,但内存持续增长,这属于bug?
      

  10.   

    "链接已经释放,但内存持续增长,这属于bug?"当然是bug.再问一下,你每次执行完SQL语句后,强制提交一次试试。会不会数据缓存起来了,没提交?你给的信息太少
      

  11.   

    flairsky
    (随便逛逛)
    楼主是怎么解决这个问题的?请分享一下
    国外论坛是怎么解释这个现象的啊 
    我的MYSQL也出现这个问题,急啊