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( ...
随机推荐
- php curl xml传输和转换
<?php /** * API * User: sgfoot * Date: 2017/3/20 * Time: 18:05 */ class apiCurl { private $config ...
- erlang debugger
http://erlang.org/doc/apps/debugger/debugger_chapter.html
- <LeetCode OJ> 204. Count Primes
Description: Count the number of prime numbers less than a non-negative number, n. 分析: 思路首先:一个数不是合数就 ...
- python 工具 二进制文件处理之——去掉指定长度数据包头
包头48bit 数据98464 ...如此循环: piece_size = 48 piece_size1 = 98464 with open("C:\\Users\\Administrato ...
- C#.NET的TabControl如何隐藏和显示页面
如果需要显示某个页面,则让他的Parent就是TabControl的控件名称,如果要隐藏,则等于null private void ToolStripMenuItemTeachPanelBa ...
- C语言-回溯例1
回溯法解N皇后问题 1,代码分析: 使用一个一维数组表示皇后的位置 其中数组的下标表示皇后所在的行 数组元素的值表示皇后所在的列 这样设计的棋盘,所有皇后必定不在同一行 假设前n-1行的皇后已经按照规 ...
- jquery $.proxy使用 Jquery实现ready()的源码
jquery $.proxy使用 在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个.例如: 1 //正常的this使用 2 $('#myElement') ...
- openshifit 安装 redis
http://blog.csdn.net/lsx991947534/article/details/48860537 http://blog.csdn.net/aguangg_6655_la/arti ...
- C# winform ListView 的右键菜单的下级菜单的选项视情况禁用方法
ListView 和右键菜单例如以下图: 要实现功能是: 1.用户状态为[活动]时,改动用户状态为[活动]禁用,反之则反. 2.而且仅仅实用户状态为[非活动]时,[删除学员用户]才是可用状态. 功能非 ...
- tween用户使用指南
tween.js user guide tween.js用户指南 1.What is a tween? How do they work? Why do you want to use them? 一 ...