Reducing memory consumption of mysql on ubuntu@aws micro instance

前端 未结 4 673
-上瘾入骨i
-上瘾入骨i 2021-01-30 03:13

I have recently started on a PoC project wherein we are developing a small web app. The initial setup is done on a micro instance from AWS. We are on rails+mysql stack.

相关标签:
4条回答
  • 2021-01-30 03:40

    I have a server with only 500mb ram and found that mysql started using a lot of ram as my tables got larger. After playing with a bunch of the settings, what reduced memory usage for me was to convert all my tables to MyISAM. If you dont need the features of innodb converting tables to MyISAM helps quite a bit. You can convert tables like this :

    ALTER TABLE test.mytable ENGINE=MyISAM;
    

    After this change I found that memory usage decreased by 20%. To get a further reduction in memory usage you can convert ALL of your tables to MyISAM and then turn off innodb support in mysql altogether. This reduced my memory usage by 50%.

    You can do this by adding :

    [mysqld]
    default_storage_engine=myisam
    innodb=OFF
    

    and then restarting mysql.

    0 讨论(0)
  • 2021-01-30 03:46

    In your /etc/my.cnf file:

    performance_schema = 0
    

    And restart MySQL. This should chop memory usage dramatically if you previously had it on.


    Edit: For MySQL versions between 5.7.8 and 8.0.1 (not required from 8.0.1 onwards), the above is not enough to free your memory of performance schema data:

    As of MySQL 5.7.8, even when the Performance Schema is disabled, it continues to populate the global_variables, session_variables, global_status, and session_status tables.

    (source)

    To prevent this behaviour, set show_compatibility_56 to 1 in addition to performance_schema. That is to say, your my.cnf changes should look like:

    performance_schema = 0
    show_compatibility_56 = 1
    
    0 讨论(0)
  • 2021-01-30 03:54

    Just to add to the other answer. I recently had this problem myself with the Amazon micro instance (not Ubuntu). The my.cnf file is almost empty so what I did was this:

    cp /etc/my.cnf /etc/my.cnf.orig
    cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
    

    Edit my.cnf and enable the innodb lines if applicable. Restart mysqld.

    Also the micro instance has no swap, that might be a problem..

    SWAPFILE=/mnt/swapfile.swap
    dd if=/dev/zero of=$SWAPFILE bs=1M count=512
    mkswap $SWAPFILE
    swapon $SWAPFILE
    

    Then in /etc/rc.local add:

    swapon /mnt/swapfile.swap

    To save memory in ruby you might want to use ruby enterprise:

    bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
    gpasswd -a root rvm
    source /etc/profile.d/rvm.sh
    rvm get head
    rvm reload
    rvm install ree
    rvm --default use ree
    
    0 讨论(0)
  • 2021-01-30 03:55

    Change this setting in the MySQL configuration file (my.cnf)

    key_buffer              = 8M 
    max_connections         = 30 # Limit connections
    query_cache_size        = 8M # try 4m if not enough 
    query_cache_limit       = 512K
    thread_stack            = 128K
    
    0 讨论(0)
提交回复
热议问题