Database memory usage is a complex topic. The MySQL Performance Blog does a good job of covering your question, and lists many reasons why it's hugely impractical to "reserve" memory.
如果你真的想强加一个硬限制,你可以这样做,但是你必须在操作系统级别上这样做,因为没有内置的设置。在 linux 中,您可以利用 ulimit,但是您可能必须修改 MySQL 的启动方式才能实现这一点。
最好的解决方案是调优服务器,这样通常的 MySQL 内存设置组合将导致 MySQL 安装通常会降低内存使用。这当然会对数据库的性能产生负面影响,但是您可以在 my.ini中调整以下一些设置:
底线是: 对于 your MySQL 设置的推荐方法,没有一般的经验法则。这完全取决于当前的使用或预测。
Settings & database
MySQL 提供了无数的变量和开关来优化它的行为。如果你遇到问题,你真的需要坐下来阅读(f‘ ing)手册。
至于数据库——一些重要的限制因素:
台式发动机(InnoDB,MyISAM,...)
尺寸
指数
用途
大多数关于堆栈溢出的 MySQL 提示会告诉你5-8个所谓的重要设置。首先,并不是所有的资源都很重要——例如,将大量资源分配给 InnoDB 而不使用 InnoDB 并没有多大意义,因为这些资源被浪费了。
或者——很多人建议增加 max_connection变量——好吧,他们不知道这也意味着 MySQL 将分配更多的资源来满足这些 max_connections——如果需要的话。更明显的解决方案可能是关闭 DBAL 中的数据库连接,或者降低 wait_timeout以释放这些线程。
If you catch my drift -- there's really a lot, lot to read up on and learn.
引擎
Table engines are a pretty important decision, many people forget about those early on and then suddenly find themselves fighting with a 30 GB sized MyISAM table which locks up and blocks their entire application.
A great start is the 调谐底漆. It's a bash script (hint: you'll need linux) which takes the output of SHOW VARIABLES and SHOW STATUS and wraps it into hopefully useful recommendation. If your server has ran some time, the recommendation will be better since there will be data to base them on.
然而,调音底漆并不是一种神奇的调味料。你还是应该研究一下它建议改变的所有变量。
读书
我真的很喜欢推荐 MysqlPerformance 博客。对于所有与 MySQL 相关的提示来说,它都是一个很好的资源。而且不仅仅是 MySQL,他们也知道很多关于正确的硬件或者为 AWS 推荐设置等等。这些人有很多年的经验。