云服务器网:购买云服务器和VPS必上的网站!

mysql内存不释放(mysql内存不释放缓慢升高)

本文目录:1、如何解决mysql占内存2、为什么我的mysql 不消耗内存3、PHP+mysql插入上千万条数据,导致内存不足,寻求释放内存方法4、MYSQL 内存排查5、MYSQL服务器内存不释放如何解决mysql占内存服务器内存占用过高的解决方法:1,首先通过任务管理器进行进程排序,查找占用内存

本文目录:

  • 1、如何解决mysql占内存
  • 2、为什么我的mysql 不消耗内存
  • 3、PHP+mysql插入上千万条数据,导致内存不足,寻求释放内存方法
  • 4、MYSQL 内存排查
  • 5、MYSQL服务器内存不释放

如何解决mysql占内存

服务器内存占用过高的解决方法:

1,首先通过任务管理器进行进程排序,查找占用内存较大的程序进程。一般占用内存较大的进程有W3WP、sqlserver、mysqld-nt.exe;

2, 站点进程w3wp 可以在cmd命令行中通过 iisapp 命令来对应是那个网站占用内存较大。可以通过设置回收时间、内存最大使用值或共用进程池来减少内存的占用,但是如果要保证网站的访问质量,还是建议升级至更高型号来解决;

3,数据库 sql server 也可以通过数据库的企业管理器来设置最大内存占用,但是如果网站程序必须要占用较大内存的话,设置后会发生页面报错、打不开等问题;

4,MYSQL本身会占用较大虚拟内存,如果不使用mysql数据库的话,可以将其停止。

为什么我的mysql 不消耗内存

我也遇到了MYSQL应用程序批量插数据时,程序内存一直增长!搞了两天,终于发现,不是My.ini的调参的问题,而是在执行插入后,声明的MySqlCommand对象没有明确析构的问题。

public override int ExecuteNonQuery(string commandText)

{

MySqlConnection conn = null;

MySqlCommand sqlcommand = null;

try

{

using (conn = new MySqlConnection(ConnectionString))

{

conn.Open();

sqlcommand = new MySqlCommand(commandText, conn) ;

int res = sqlcommand.ExecuteNonQuery();

return res;

}

}

catch (Exception ex)

{

MessageBox.Show(string.Format(“数据库连接或查询失败!\r\n{0}”, ex.Message), “错误”, MessageBoxButtons.OK,

MessageBoxIcon.Error);

return -1;

}

finally

{

if (sqlcommand != null) sqlcommand.Dispose();//缺少这句话,内存会一直增长!

if (conn != null) conn.Close();

}

}

PHP+mysql插入上千万条数据,导致内存不足,寻求释放内存方法

一次性插入1000条数据比一条一条的插入速度会提升N倍,主要技巧就是在写SQL的上面

insert into table1 value (v1, v2, v3), (x1,x2,x3),….

而不是

insert into table1 value (v1, v2, v3);

insert into table1 value (x1, x2, x3);

MYSQL 内存排查

1.查参数配置

目前积累的使用经验中,存储过程函数触发器视图 在MySQL场景下是不适合的。性能不好,又容易发现内存不释放的问题,所以建议尽量避免.

2.存储过程函数

3.视图

4.触发器

5.1 总内存使用

5.2 分事件统计内存

5.3 账号级别统计

5.4 线程对应sql语句,内存使用统计

5.5 打开所有内存性能监控,会影响性能,需注意

5.6 系统表内存监控信息

6.top 命令

8.ps命令

9.pmap 命令

pmap是Linux调试及运维一个很好的工具,查看进程的内存映像信息

用法1:执行一段时间记录数据变化,最少20个记录,下面69265是MySQL pid

用法2:linux 命令pmap MySQL pid导出内存,下面69265是MySQL pid

RSS就是这个process实际占用的物理内存。

Dirty: 脏页的字节数(包括共享和私有的)。

Mapping: 占用内存的文件、或[anon](分配的内存)、或[stack](堆栈)。

writeable/private:进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小。

1.首先使用/top/free/ps在系统级确定是否有内存泄露。如有,可以从top输出确定哪一个process。

2.pmap工具是能帮助确定process是否有memory leak。确定memory leak的原则:writeable/private (‘pmap –d’输出)如果在做重复的操作过程中一直保持稳定增长,那么一定有内存泄露

MYSQL服务器内存不释放

检查数据库中数据表索引是否建立,索引是否合理被使用。

SQL语句中是否存在SELECT * FROM 这种一次就读取所有数据的情况。

另外就是数据库连接是否很多? 或者应用程序连接SQL后长时间没断开?

本文来源:https://www.yuntue.com/post/81309.html | 云服务器网,转载请注明出处!

关于作者: yuntue

云服务器(www.yuntue.com)是一家专门做阿里云服务器代金券、腾讯云服务器优惠券的网站,这里你可以找到阿里云服务器腾讯云服务器等国内主流云服务器优惠价格,以及海外云服务器、vps主机等优惠信息,我们会为你提供性价比最高的云服务器和域名、数据库、CDN、免费邮箱等企业常用互联网资源。

为您推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注