本文目录:
- 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 | 云服务器网,转载请注明出处!

微信扫一扫打赏
支付宝扫一扫打赏