当前位置:  开发笔记 > 编程语言 > 正文

MySQL最大内存使用量

如何解决《MySQL最大内存使用量》经验,为你挑选了4个好方法。

我想知道如何设置MySQL在Linux服务器上使用的内存量的上限.

现在,MySQL会在每次请求的新查询中继续占用内存,以便最终耗尽内存.有没有办法设置一个限制,以便MySQL不使用这个数量?



1> Till..:

MySQL的最大内存使用量在很大程度上取决于硬件,设置数据库本身.

硬件

硬件是显而易见的部分.更好的RAM,更快的磁盘ftw.不要相信那些每月或每周的新闻信件.MySQL不会线性扩展 - 甚至不能在Oracle硬件上扩展.这有点棘手.

底线是:有经验的,什么是推荐不一般的规则的MySQL安装.这一切都取决于当前的使用情况或预测.

设置和数据库

MySQL提供无数变量和开关来优化其行为.如果遇到问题,你真的需要坐下来阅读(f'ing)手册.

至于数据库 - 一些重要的约束:

台发动机(InnoDB,MyISAM,...)

尺寸

指数

用法

stackoverflow上的大多数MySQL技巧都会告诉你5-8所谓的重要设置.首先,并非所有这些都很重要 - 例如,为InnoDB分配大量资源而不使用InnoDB并没有多大意义,因为这些资源被浪费了.

或者 - 很多人建议改变max_connection变量 - 好吧,他们知道它也意味着MySQL会分配更多的资源来满足那些max_connections- 如果需要的话.更明显的解决方案可能是关闭DBAL中的数据库连接或降低wait_timeout释放这些线程.

如果你抓住了我的漂移 - 那里真的很多,很多东西可以阅读和学习.

引擎

表引擎是一个非常重要的决定,许多人在早期就忘记了这些,然后突然发现自己正在与一个30 GB大小的MyISAM表进行斗争,这些表会锁定并阻止它们的整个应用程序.

我并不是说MyISAM很糟糕,但InnoDB可以调整几乎或几乎一样快地响应MyISAM并提供行锁定等功能,UPDATEMyISAM在写入时锁定整个表.

如果您可以自己在自己的基础架构上运行MySQL,您可能还想查看percona服务器,因为其中包括来自Facebook和Google等公司的很多贡献(他们知道速度很快),它还包括Percona自己的drop-替换InnoDB,称为XtraDB.

请参阅我的要点,了解percona-server(和-client)设置(在Ubuntu上):http://gist.github.com/637669

尺寸

数据库大小非常非常重要 - 不管你信不信,Intarwebs上的大多数人从来没有处理过大而且编写强烈的MySQL设置,但这些确实存在.有些人会说"使用PostgreSQL !!! 111"之类的东西,但现在让我们忽略它们.

底线是:从尺寸来判断,有关硬件的决定.您无法在1 GB的RAM上快速运行80 GB的数据库.

指数

它不是:越多越好.只需要设置所需的索引,并且必须检查使用情况EXPLAIN.除此之外,MySQL EXPLAIN的确是有限的,但它是一个开始.

建议的配置

关于这些my-large.cnfmy-medium.cnf文件 - 我甚至不知道是谁写的.滚动你自己.

调整底漆

一个很好的开始是调整底漆.这是一个bash脚本(提示:你需要的Linux),这需要的输出SHOW VARIABLES,并SHOW STATUS和它包装成希望有用的建议.如果您的服务器运行了一段时间,建议会更好,因为将有数据基于它们.

虽然调音底漆不是神奇的酱汁.您仍应阅读它建议更改的所有变量.

我真的很想推荐mysqlperformanceblog.它是各种MySQL相关技巧的绝佳资源.它不仅仅是MySQL,他们也知道很多关于正确的硬件或推荐AWS的设置等.这些人有多年的经验.

当然,另一个很棒的资源是planet-mysql.



2> Ignacio Pasc..:

我们使用这些设置:

etc/my.cnf
innodb_buffer_pool_size = 384M
key_buffer = 256M
query_cache_size = 1M
query_cache_limit = 128M
thread_cache_size = 8
max_connections = 400
innodb_lock_wait_timeout = 100

对于具有以下规范的服务器:

Dell Server
CPU cores: Two
Processor(s): 1x Dual Xeon
Clock Speed: >= 2.33GHz
RAM: 2 GBytes
Disks: 1×250 GB SATA


我认为你(和你链接到的作者)有错误的方式查询query_cache_size和query_cache_limit.你告诉MySQL:分配1MB缓存,但不要在其中放入任何大于128MB的查询.http://dev.mysql.com/doc/refman/5.0/en/query-cache-configuration.html

3> zombat..:

数据库内存使用是一个复杂的主题.在MySQL性能博客做涵盖你的问题的一个很好的工作,并列出许多原因,这是巨大的不切实际的"储备"的记忆.

如果你真的想要施加硬限制,你可以这样做,但你必须在操作系统级别这样做,因为没有内置设置.在linux中,你可以使用ulimit,但你可能不得不修改MySQL启动的方式来强加它.


最好的解决方案是调低服务器,以便通常的MySQL内存设置的组合将导致MySQL安装的内存使用率降低.这当然会对数据库的性能产生负面影响,但您可以调整的一些设置my.ini是:

key_buffer_size
query_cache_size
query_cache_limit
table_cache
max_connections
tmp_table_size
innodb_buffer_pool_size

我会从那里开始,看看你是否能得到你想要的结果.有很多 文章有关调整MySQL的内存设置在那里.


编辑:

请注意,在较新的5.1.x版本的MySQL中,某些变量名称已更改.

例如:

table_cache

就是现在:

table_open_cache


嗨!感谢您的回答.我注意到人们引用的等式如下:key_buffer_size +(read_buffer_size + sort_buffer_size)*max_connections =总内存.我设置了以下内容:key_buffer_size = 128M,read_buffer_size = 1M,sort_buffer_size = 2M,max_connections = 120,服务器上的总内存为512M.但是,在经过多次查询之后,可用内存已经低至12M,并且可能会继续进一步使用.是否有这样的原因并且可以预防?谢谢!

4> Sarvar Nisho..:

mysqld.exe在RAM中使用480 MB.我发现我将此参数添加到my.ini中

table_definition_cache = 400

将内存使用量从400,000+ kb减少到105,000kb

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有