我想知道如何在Linux服务器上设置MySQL使用的内存量上限。
现在,MySQL将继续使用每个请求的新查询来占用内存,以便最终耗尽内存。有没有办法设置一个限制,使得MySQL使用的限制不超过该数量?
最佳答案
MySQL的最大内存使用量在很大程度上取决于硬件,您的设置和数据库本身。
硬件
硬件是显而易见的部分。越多的内存越多,磁盘越快。但是不要相信那些每月或每周的新闻信。 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
一样快,并提供诸如UPDATE
上的行锁定之类的功能,而MyISAM
则在锁定整个表时将其锁定被写入。
如果您有自由在自己的基础架构上运行MySQL,您可能还想查看percona server,因为在包括Facebook和Google这样的公司(他们知道得很快)的大量贡献中,它还包括Percona自己的drop -in替代InnoDB
,称为XtraDB
。
有关Percona服务器(和-client)设置(在Ubuntu上),请参见我的要旨:http://gist.github.com/637669
尺寸
数据库的大小非常非常重要-信不信由你,Intarweb上的大多数人从未处理过很大的工作,也不编写密集的MySQL设置,但确实存在。某些人会说出类似“使用PostgreSQL !!! 111”这样的说法,但是现在让我们忽略它们。
底线是:从大小上判断,将决定硬件。您无法真正使80 GB数据库在1
GB的RAM。
指标
不是:更多,更好。仅需要设置索引,并且必须使用EXPLAIN
检查使用情况。另外,MySQL的EXPLAIN
确实很有限,但这只是一个开始。
建议配置
关于这些my-large.cnf
和my-medium.cnf
文件-我什至不知道这些文件是为谁编写的。自己动手。
调音底漆
tuning primer是一个很好的开始。这是一个bash脚本(提示:您将需要linux),它使用SHOW VARIABLES
和SHOW STATUS
的输出并将其包装为希望有用的建议。如果您的服务器已经运行了一段时间,则建议会更好,因为将有数据作为基础。
调音入门不是魔术酱。您仍然应该阅读所有建议更改的变量。
阅读
我真的很想推荐mysqlperformanceblog。对于各种与MySQL相关的技巧,这是一个很好的资源。而且不仅是MySQL,他们还对正确的硬件有很多了解,或者对AWS推荐安装等。这些人有多年的经验。
当然,另一个很棒的资源是planet-mysql。
关于mysql - MySQL最大内存使用量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39296391/