生产环境中,MySQL 不经意间吃掉全部的内容,然后开始吃掉 SWAP,性能一降再降,怎么办?
可以从下面三点查看原因:
MySQL 使用内存,有两个途径。
永久占用的内容
比如全局缓冲区(Global Buffer)类别,是在服务器启动期间从 *** 作系统获得的,不会释放到任何一个别的进程。
动态请求的内存
线程缓冲区由MySQL使用,它是在处理新查询时从 *** 作系统请求的内存。在执行查询之后,该内存被释放回 *** 作系统。
这意味着 MySQL 的内存使用,是 全局缓冲区 加上 线程缓冲区 以及 允许的最大连接数 。
对于专用数据库服务器,该值需要保持在服务器内存的90%以下。在共享服务器的情况下,它应该保持在服务器内存的50%以下。
检查一下 MySQL 设置,有助于确定内存使用情况,从而为 MySQL 分配合适的值。
一个近似的公式:
当网站受到攻击时,有可能在短时间内建立异常高的连接数量。MySQL 中的 PROCESSLIST 可用于检测顶级用户并阻止对滥用连接的访问。
找出查询需要很长时间才能执行的语句,因为这些查询需要进一步优化服务器才能更好地执行,可以通过服务器查询日志进行识别。由于查询速度慢,导致磁盘读取较多,导致内存和CPU使用率较高,影响服务器性能。
最后,到了加内存条的时候了。虽然在优化数据库设置之后,服务器会不断地路由到使用交换内存,但也必须增加内存。俗话说:“巧妇难为无米之炊”,就是这个意思。
上面说的这些方向,大家可以在实际 *** 作中验证体会,希望大家在数据库优化的路上,麻溜顺畅,砥砺前行。
使用MSSQL的站长朋友都会被MSSQL数据库吃内存的能力佩服得五体投地 一个小小的网站 运行若干天之后 MSSQL就会把服务器上所有的内存都吃光 此时你不得不重新启动一下服务器或MSSQL来释放内存 有人认为是MSSQL有内存泄露问题 其实不然 微软给我们了明确说明:
在您启动 SQL Server 之后 SQL Server 内存使用量将会持续稳定上升 即使当服务器上活动很少时也不会下降 另外 任务管理器和性能监视器将显示计算机上可用的物理内存稳定下降 直到可用内存降到 至 MB 为止
仅仅出现这种状态不表示内存泄漏 此行为是正常的 并且是 SQL Server 缓冲池的预期行为
默认情况下 SQL Server 根据 *** 作系统报告的物理内存加载动态增大和收缩其缓冲池(缓存)的大小 只要有足够的内存可用于防止内存页面交换(在 至 MB 之间) SQL Server 缓冲池就会继续增大 像在与 SQL Server 分配内存位于相同计算机上的其他进程一样 SQL Server 缓冲区管理器将在需要的时候释放内存 SQL Server 每秒可以释放和获取几兆字节的内存 从而使它可以快速适应内存分配变化
更多信息
您可以通过服务器内存最小值和服务器内存最大值配置选项设置 SQL Server 数据库引擎使用的内存(缓冲池)量的上下限 在设置服务器内存最小值和服务器内存最大值选项之前 请查阅以下 Microsoft 知识库文章中标题为"内存"一节中的参考信息
HOW TO Determine Proper SQL Server Configuration Settings(确定正确的 SQL Server 配置设置)
请注意 服务器内存最大值选项只限制 SQL Server 缓冲池的大小 服务器内存最大值选项不限制剩余的未保留内存区域 SQL Server 准备将该区域分配给其他组件 例如扩展存储过程 对象 以及非共享 DLL EXE 和 MAPI 组件 由于前面的分配 SQL Server 专用字节超过服务器内存最大值配置是很正常的 有关此未保留内存区域中分配的其他信息 请单击下面的文章编号 以查看 Microsoft 知识库中相应的文章
PRB 在使用大量数据库时可能没有足够的虚拟内存
参考
SQL Server 联机图书主题 "服务器内存最小值和最大值的影响""内存体系结构""服务器内存选项""SQL Server 内存池"
下面我们就来实战如何限制MSSQL内存使用:
第一步:打开企业管理双击进入要修改的MSSQL
第二步:在左侧MSSQL上点击右键 选择属性 d出SQL Server属性(配置)对话框
第三步:点击内存选项卡
在这里 你会看到MSSQL默认设置为使用最大内存 也就是你所有的内存 根据你的需要 设置它的最大值吧
lishixinzhi/Article/program/MySQL/201311/29533
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)