Mysql使用内存限制

时间:2013-11-08 12:44:26

标签: php mysql database-performance

我有数据库(仅30mb),这个数据库使用4gb ram!我的网站在线最多10人。我认为这很糟糕cnf.my。

mysql> show variables like '%size%';


+---------------------------------+----------------------+
| Variable_name                   | Value                |
+---------------------------------+----------------------+
| binlog_cache_size               | 32768                |
| bulk_insert_buffer_size         | 8388608              |
| delayed_queue_size              | 1000                 |
| innodb_additional_mem_pool_size | 1048576              |
| innodb_buffer_pool_size         | 8388608              |
| innodb_log_buffer_size          | 1048576              |
| innodb_log_file_size            | 5242880              |
| join_buffer_size                | 4194304              |
| key_buffer_size                 | 268435456            |
| key_cache_block_size            | 1024                 |
| large_page_size                 | 0                    |
| max_binlog_cache_size           | 18446744073709547520 |
| max_binlog_size                 | 1073741824           |
| max_heap_table_size             | 268435456            |
| max_join_size                   | 18446744073709551615 |
| max_long_data_size              | 1048576              |
| max_relay_log_size              | 0                    |
| myisam_data_pointer_size        | 6                    |
| myisam_max_sort_file_size       | 9223372036853727232  |
| myisam_mmap_size                | 18446744073709551615 |
| myisam_sort_buffer_size         | 8388608              |
| preload_buffer_size             | 32768                |
| profiling_history_size          | 15                   |
| query_alloc_block_size          | 8192                 |
| query_cache_size                | 268435456            |
| query_prealloc_size             | 8192                 |
| range_alloc_block_size          | 4096                 |
| read_buffer_size                | 131072               |
| read_rnd_buffer_size            | 262144               |
| sort_buffer_size                | 20971520             |
| sql_max_join_size               | 18446744073709551615 |
| thread_cache_size               | 4                    |
| tmp_table_size                  | 41943040             |
| transaction_alloc_block_size    | 8192                 |
| transaction_prealloc_size       | 4096                 |
+---------------------------------+----------------------+
35 rows in set (0.00 sec)

和my.cnf:

 [mysqld]

    local-infile=0
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    long_query_time=1
    log-slow-queries=/var/log/mysql/log-slow-queries.log
    interactive_timeout=180
    wait_timeout=180
    max_connections=100
    innodb_buffer_pool_size=256M
    query_cache_size=256M
    key_buffer_size=256M
    sort_buffer_size=20M
    innodb_flush_log_at_trx_commit=0
    innodb_flush_method=O_DIRECT
    query_cache_type=1
    query_cache_limit=2M
    table_cache=1024
    join_buffer_size=4M
    thread_cache_size=4
    tmp_table_size=40M
    max_heap_table_size=256MB

    user=mysql
    symbolic-links=0
    #bind-address=127.0.0.1

    [mysqld_safe]

    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid 

在我的vps中,我有5.7 gb ram

如何减少内存使用量?

2 个答案:

答案 0 :(得分:0)

我怀疑sort_buffer_size和join_buffer_size是这里过多内存使用的主要原因。首先在配置中注释掉这些内容,以便使用默认值。

这些值会对与工作负载相关的内存使用产生影响。

对您的系统知之甚少,看起来您的key_buffer_size和innodb_buffer_pool_size似乎仍然是所需的两倍(并且一个或另一个可能完全不必要,具体取决于您使用的是哪个存储引擎),而您的query_cache_size是可能是必要的2到16倍。与上面提到的设置不同,这可以改变工作负载对内存的影响,这些设置将减少服务器使用的基准内存量,无论工作负载如何。

下次您的系统内存使用率高于预期时,SET GLOBAL THREAD_CACHE_SIZE = 0;可能也会感兴趣,然后观察服务器的内存分配是否随着客户端断开连接而重新连接。

答案 1 :(得分:0)

my.cnf正在要求

innodb_buffer_pool_size=256M

但是大小列表表明你的ibps只有8M。 需要找出为什么你没有256M,检查日志。

max_heap_table_size=256MB    needs to be
max_heap_table_size=40M # from 256MB to correct MB and match tmp_table_size