目前积累的使用经验中,存储过程&函数&触发器&视图 在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 在内的大多数数据库系统而言性能问题的排查主要有以下方向:
1. 需求的不合理造成的性能问题
比方说,不需要实时更新的内容,被要求做成实时更新
2. 架构的不合理造成的性能问题
比方说,不适合数据库保存的数据,被存放在数据库中
或者,频繁访问但是很少变更的数据,没有做缓存
3. 查询语句的不合理造成的性能问题
比方说,重复执行相同的 SQL 会造成资源浪费
或者,大量复杂的 join 语句会导致查询效率低下
4. 数据库设计的不合理造成的性能问题
比方说,盲目追求三范式、四范式,有时候并没有必要
5. 硬件配置的不合理造成的性能问题
比方说,数据库服务器的 io 性能、CPU 、网络状况,都会影响性能
以上这些都是性能问题定位和调优的方向
0、首先排除机器问题,如cpu、内存情况
1、根据日志找到sql语句,从两点,一是索引、二是语句的写法
2、使用mysql的explain+语句形式,排查是否引用索引,通过key、extra,key表示有没有用到索引,用到的是哪个索引,像like、or等是索引失效的,extra using index表示覆盖索引,usingwhere表示where条件用到了索引,通过explain结果,修改sql语句,该加索引加索引,该修改语句修改语句
3、语句编写上,子查询、关联查询大表小表
4、部署测试
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)