MYSQL进阶学习笔记十三:MySQL 内存优化!(视频序号:进阶_31)
知识点十四:MySQL 内存的优化(31)
一、优化MySQL SERVER
7组后台进程:
masterthread:主要负责将脏缓存页刷新到数据文件,执行purge操作,触发检查点,合并插入缓冲区等。
insertbuffer thread:主要负责插入缓冲区的合并操作。
readthread:负责数据库读取操作,可配置多个线程
writethread:负责数据库写操作,可配置多个线程。
logthread:用于将重做日志刷新到logfile中。
purgethread:MySQL5.5之后用于单独的purge thread 执行purge操作。
lockthread:负责锁控制和死锁检测。
错误监控线程:主要负责错误监控和错误处理。
二、内存管理及优化
1、内存管理原则
在调整MySQL内存分配时,要注意以下几点。
将尽量多的内存分配给MySQL做缓存,但是要给操作系统和其他程序的运行预留足够的内存,否则如果产生SWAP页交换,将严重影响系统性能。
MyISAM的数据文件读取依赖操作系统自身IO缓存,因此,如果有MyISAM表,就要预留更多的内存给操作系统做IO缓存。
排序区、连接区等缓存是分配给每个数据库会话(seesion)专用的,其默认值的设置要根据最大连接数合理分配,如果设置太大,不但浪费内存资源,而且在并发连接较高时会导致物理内存消耗尽。
2、MyISAM内存优化
MyISAM存储引擎使用 key buffer缓存索引块,以加速MyISAM索引的读写速度。对于MyISAM变的数据库块,MySQL没有铁别的缓存机制,完全依赖操作系统的IO缓存。
key_buffer_size设置:
key_buffer_size决定MyISAM索引块缓存区的大小,直接影响到MyISAM表的存取效率。可以在MySQL参数文件中设置key_buffer_size的值,对于一般MyISAM数据库,建议至少将1/4可用内存分配给key_buffer_size。
在my.ini设置MyISAM的key_buffer_size:
key_buffer_size=2G
我们可以通过检查key_read_requests、key_reads、key_write_requests和key_writes等MySQL状态来评估索引缓存的效率。一般来说,索引块物理读比率key_reads/key_read_requests应该小于0.01。
索引块写比率key_wirte/key_write_requests也应尽可能小。但是这与应用特点有关,对于更新和删除操作特别多的应用,key_writes/key_wirte_requests可能会接近1,
而对于 更新很多行记录的应用,key_wirtes/key_write_requests就会比较小。
除了通过索引块的物理读写比率衡量key_buffer的效率外,我们也可以通过评估key buffer的使用率来判断索引缓存设置是否合理。key buffer使用率计算公式如下:
1-((key_blocks_unused*key_cache_block_size)/key_buffer_size)
一般来说,使用率在80%左右合适,大于80%可能因索引还粗不足而导致性能下降,小于80%会导致内存浪费
设置key_buffer_size:
--设置key_buffer_size:
set global key_buffer_size=8088608;
--永久设置
vim /etc/my.sql
key_buffer_size=8088608 --查看key_buffer_size
show variables like'key_buffer_size';
show global status like 'key_%';
调整read_buffer_size和read_rnd_buffer_size
如果需要经常扫描MyISAM表,可以通过增大read_buffer_size的值来改善性能。但是注意的是read_buffer_size是每个session独占的,如果默认设置太大就会造成资源浪费,甚至导致物理内存耗尽。
对于需要排序的MyISAM表查询,如果有ORDER BY子句的SQL语句,适当增大read_rnd_buffer_size的值,可以改善此类的SQL性能。但是要注意是read_rnd_buffer_size是每个SESSION独占的。如果默认值设置过大,就会造成内存的浪费。
3、InnoDB内存优化
InnoDB用一块内存块做IO缓存池,该缓存池不仅用来缓存InnoDB的索引块。而且也用来缓存InnoDB的数据块。
在内部,InnoDB缓存池逻辑上由free list、flush list、LRU list组成。顾名思义,free list是空闲缓存块列表,flush list是需要缓新到磁盘的缓存块列表,
而LRU list是InnoDB正在使用的缓存块,它是InnoDB buffer pool的核心。InnoDB使用LRU算法与MyISAM的‘中点插入策略’LRU算法类似。
设置innodb_buffer_pool_size:
该变量决定了InnoDB存储引擎表数据和索引数据的最大缓存区大小。
设置innodb_log_buffer_size:
该变量决定了InnoDB重做日志的缓存的大小,对于可能产生大量更新记录的大事务,增加innodb_log_buffer_size的大小,可以避免InnoDB在事务提交前就执行不必要的日志写入磁盘操作。
三、调整MySQL并发相关的参数
调整max_connections,提高并发连接
调整thread_cache_size,加快链接数据库的速度,MySQL会缓存一定数量的客户服务线程以备重用,通过参数thread_cache_size可以控制MySQL缓存客户服务线程的数量。
调整innodb_lock_wait_timeout:控制innoDB事务等待行锁的时间,对于快速处理的SQL语句,可以将行锁的等待超时间调小,以避免事务长时间挂起,对于后台运行的批处理操作,可以将行锁等待超时时间调大,以避免发生大的回滚操作。
MYSQL进阶学习笔记十三:MySQL 内存优化!(视频序号:进阶_31)的更多相关文章
- (1.3)学习笔记之mysql体系结构(C/S整体架构、内存结构、物理存储结构、逻辑结构)
目录 1.学习笔记之mysql体系结构(C/S架构) 2.mysql整体架构 3.存储引擎 4.sql语句处理--SQL层(内存层) 5.服务器内存结构 6.mysql如何使用磁盘空间 7.mysql ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- 基于【 MySql 】二 || mysql详细学习笔记
mysql重点学习笔记 /* Windows服务 */ -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysql ...
- Mysql事务学习笔记
Mysql事务学习笔记 1.事务概述 事务是数据库的执行单元,它包含了一条或多条sql语句,进行的操作是要么全部执行,要么全部都不执行. 2.事务执行命令 语法格式: start transactio ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Mysql数据库学习笔记之数据库索引(index)
什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...
- SQLMAP学习笔记2 Mysql数据库注入
SQLMAP学习笔记2 Mysql数据库注入 注入流程 (如果网站需要登录,就要用到cookie信息,通过F12开发者工具获取cookie信息) sqlmap -u "URL" - ...
- ref:学习笔记 UpdateXml() MYSQL显错注入
ref:https://www.cnblogs.com/MiWhite/p/6228491.html 学习笔记 UpdateXml() MYSQL显错注入 在学习之前,需要先了解 UpdateXml( ...
随机推荐
- PE 512 Sums of totients of powers
可以很简单的发现,当n是奇数的时候,f(n)=φ(n),否则f(n)=0. 所以我们就是求n<=5*10^8且n为奇数的φ的和. 首先我们可以做到用杜教筛算出φ的前缀和,但是如何把偶数的减去? ...
- 「NOI2014」动物园
link : https://loj.ac/problem/2246 水水KMP #include<bits/stdc++.h> #define ll long long #define ...
- Cookie安全与CSRF和XSS攻击知识点收集
个人简单理解: 1.XSS最简单的理解就是可以在表单提交的内容上嵌入JS执行代码,然后页面渲染的时候没有过滤时会自动执行这个脚本. 2.CSRF可以理解为当你登录了京东,浏览器上保存了你登录的Cook ...
- Interface Builder中的技巧
在我工作中经常会遇到有人吐槽Xcode中的interface builder(以下简称IB)不好用的开发者.在我看来,IB是一个非常棒的可视化开发工具,可以非常快捷的设置UI控件的大部分常用属性.下面 ...
- Android 关于view的getLayoutParams().width,getWidth(),getMeasuredWidth();
习惯了使用xml的布局方式,当动态布局的时候就有许多疑点,记录一下,帮助我这老头一样的记忆力. 网上也有许多解析这getLayoutParams().width,getWidth(),getMeasu ...
- WM_SETFOCUS和WM_KILLFOCUS、WM_GETDLGCODE
procedure WMSetFocus (var Message: TWMSetFocus); message WM_SETFOCUS; //获得焦点 procedure WMKillFocus ...
- nyoj 1077 小博弈 【另类巴什博奕】
分析:分析当整除(a+b)的时候肯定是后者胜利,假设余数不等于0的时候.假设余数大于b肯定是前者胜利,否则后者胜利. 代码: import java.math.*; import java.util. ...
- MRP routing设置释疑
Jeffer9@gmail.com 工艺是指在不同工作中心执行的作业序列 作业的详细信息 Number of cycles 在该工作中心操作几个循环 Number of ...
- navicat for mysql 快捷键(原创)
navicat for mysql 快捷键(原创) 在谷歌,百度上基本搜索不出来这方面的内容,我总结了一下,方便新手,节省一些探索的时间. 1.ctrl+q 打开查询窗口2.ctr ...
- 【CODEFORCES】 B. Dreamoon and Sets
B. Dreamoon and Sets time limit per test 1 second memory limit per test 256 megabytes input standard ...