我如何判断在MySQL中使用大多数内存的是什么

时间:2011-12-20 07:42:43

标签: mysql

我的MySQL服务器物理内存不足,开始使用swap。如何判断使用最多内存的是什么?理想情况下,它将是一个特定的表或一组索引,我只能优化少量项目。

我的数据库超过100GB,我当前的机器有15GB内存。

感谢。

2 个答案:

答案 0 :(得分:4)

  

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

     

硬件

     

硬件是显而易见的部分。 RAM越多越快   磁盘 ftw 。不要相信那些每月或每周的新闻信件   虽然。 MySQL不会线性扩展 - 甚至不能在Oracle硬件上扩展。它的   比这更棘手。

     

底线是:对于什么是没有一般经验法则   推荐用于你的 MySQL设置。这一切都取决于当前   用法或预测。

     

设置&数据库

     

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

     

至于数据库 - 一些重要的限制因素:

     
      
  • 表引擎(InnoDBMyISAM,...)* size * indices * usage
  •   
     

关于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和Facebook等公司的大量贡献   谷歌(他们知道速度很快),它还包括Percona自己的插手   替换InnoDB,名为XtraDB

     

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

     

尺寸

     

数据库大小非常非常重要 - 信不信由你   Intarwebs上的人从未处理过大而且写得很激烈   MySQL设置,但那些确实存在。有些人会喋喋不休地说   像“使用PostgreSQL !!! 111”之类的东西,但我们暂时忽略它们。

     

底线是:从大小来判断,决定硬件   要做。你不能真正让1 GB的80 GB数据库快速运行   GB的RAM。

     

指数

     

不是:越多越好。只需要设置所需的索引   必须使用EXPLAIN检查使用情况。再加上那个MySQL的   EXPLAIN真的有限,但这是一个开始。

     

建议的配置

     

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

     

调谐引物

     

一个很好的开始是tuning primer。这是一个bash脚本(提示:   你需要linux),它取SHOW VARIABLES和{}的输出   SHOW STATUS并将其包含在希望有用的建议中。如果   你的服务器运行了一段时间后,建议会更好   将有数据基于它们。

     

虽然调音底漆不是神奇的酱汁。你还是应该读   它建议改变所有变量。

     

     

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

     

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

关于Mysql内存使用情况的stackoverflow上的类似问题引用了这个答案:MySQL maximum memory usage

希望这有帮助。

答案 1 :(得分:0)

查看SHOW FULL PROCESSLIST查询的结果,或启用slow query log来查明较慢的查询。