mysql内存使用以及优化中需要的几点注意
1、从内存中读取数据是微秒级别的。而从磁盘读则是毫秒级别的。二者相差一个数量级。所以想优化数据库,第一个要做到的就是优化io。
2、key_buffer_size[global]设置的内存区域大小缓存了myisam表的索引。由于myisam只缓存索引在内存中,并不缓存数据在内存,所以如果内存允许,要让这个参数足够能容纳所有myisam的所有索引来提高性能。另外,在myisam表上,尽量让所有的查询条件都限制在索引上,以便能让缓存替我们提高查找效率。
3、bulk_insert_buffer_size[thread]仅仅用在myisam中,用于在插入数据的时候临时缓存数据。当我们使用如下的写入语句的时候,会使用这个内存区域帮助批量写入数据文件:
insert ... select ...
insert into ... values ...
load data infile ... into ...
4、innodb_buffer_pool_size[global]当我们使用innodb引擎的时候这个参数也许是影响性能最为关键的一个参数了。它用来设置缓存innodb的索引以及数据块的内存区域大小。
简单来说,我们操作innodb表的时候,返回的所有数据以及去查找数据的过程中所用到的所有索引,都会在这个内存块中走一遭。
5、innodb_additional_mem_pool_size[global]设置了innodb存储引擎用来存放数据字典信息以及一些内部数据结构的内存区域大小。所以,当我们一个mysql instance中
包含有很多数据库对象(比如很多表的时候)的时候需要适当调整该参数的大小以确保所有的数据都在内存中,以确保效率。这个参数的内存是否足够还是比较容易知道的。因为当过小的时候
mysql会记录warning到error log中的。
6、innodb_log_buffer_size[global]innodb事务所使用的内存。innodb在写事务日志的时候,为了提高性能,先写入缓存,再写到logfile中。
7、innodb_max_dirty_pages_pct[global]用来控制在innodb的buffer pool中,可以不用写入数据文件的dirty page(已经被修改,但是还没写入到数据文件的脏数据)的比例。
这个值越大,从内存到磁盘的写入操作就会减少。所以能够一定程度减少磁盘io。但是当这个值很大的时候,如果数据库crash,那么重启的时间可能就会很长。因为会有
大量的事务数据需要从日志文件中恢复出来写入到数据文件中。同时,过大的比例值,也会造成当达到比例设定的上限之后,flush操作写入数据“过猛”,造成性能波动剧烈。
8、当我们要取出全表大部分的数据的时候 ,索引扫描不一定优于全表扫描。
9、mysql是基于行的数据库,而数据读取则是基于page的。每个page中存放有行。如果每一行的数据量都减小,那么每个page里面存放的行就增多了。每次io就能偶取出更多的行。
反过来,处理相同的数据,处理的page就会减少。也即是io次数的降低。直接提升性能。此外,由于我们的内存数量是有限的,那么每个page中行数增多了,就等于增加了
每个数据块的缓存数据量,也能够提升命中率。
10、我们无法改变要存储什么数据,但是怎么存储数据我们可以花一些心思。
1)数字类型。万不得已,不要用double类型。除了占用空间比较大之外,还有精度问题。同样,固定精度的小数也不要使用decimal,建议乘以固定倍数,转换成整数进行存储。
可以节省存储空间,而且不用任何附加维护成本。对于整数的存储,建议分开tinyint/int/bigint,他们存储数据占用空间有一定差距。
2)字符类型。万不得已,不要用text类型。它的处理效率低于char和varchar。定长字段建议char类型。变长用varchar。varchar切不可以随意给一个很大的长度。因为不一样的长度范围,mysql会有不同的处理。在博客中有一篇是介绍varchar的处理方式的。假设声明了varchar(1000),那么,mysql在磁盘中存储这个数据的时候,假设数据长度45,那么磁盘中就占用大概45左右的空间。但是当这个数据在内存中的时候还是要占用1000个空间的。浪费了很多。
3)事件类型。尽量使用timestamp。存储空间占用只是datetime类型的一半。对于需要精确到某一天的类型,建议使用date类型。因为它存储需要三个字节。比timestamp还少。
不建议使用int来存储一个unix timestamp,不直观,不会带来任何好处。
4)适当对表中字段进行冗余。比如说,把一个文章的摘要,与文章信息表放在一起,而不是跟文章详细内容表放在一起。
mysql内存使用以及优化中需要的几点注意的更多相关文章
- mySQL内存及虚拟内存优化设置[转]
mySQL内存及虚拟内存优化设置 . 数据库mySQL内存优化G-LB 为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini ...
- 利用 gperftools 对nginx mysql 内存管理 性能优化
利用 gperftools 对nginx 与 mysql 进行 内存管理 性能优化 降低负载. Gperftools 是由谷歌开发.官方对gperftools 的介绍为: These tools ...
- mySQL内存及虚拟内存优化设置
为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过 ...
- MySQL 内存和CPU优化相关的参数
mysql> SHOW GLOBAL STATUS LIKE 'innodb%read%'; +---------------------------------------+--------- ...
- MYSQL进阶学习笔记十三:MySQL 内存优化!(视频序号:进阶_31)
知识点十四:MySQL 内存的优化(31) 一.优化MySQL SERVER 7组后台进程: masterthread:主要负责将脏缓存页刷新到数据文件,执行purge操作,触发检查点,合并插入缓冲区 ...
- mysql内存优化
一.环境说明: 操作系统:CentOS 6.5 x86_64 数据库:Mysql 5.6.22 服务器:阿里云VPS,32G Mem,0 swap 二.问题情况: 1.某日发现公司线上系统的Mysql ...
- MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?
本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的 ...
- 谈谈Keil 中C51的内存分配与优化
本帖最后由 Cresta 于 2014-1-21 10:49 编辑 看到这篇C51的内存分配和优化的文章,个人觉得分析的十分到位,在这里转给大家 C51的内存分配不同于一般的PC,内存空间有限,采 ...
- [MySQL Reference Manual] 8 优化
8.优化 8.优化 8.1 优化概述 8.2 优化SQL语句 8.2.1 优化SELECT语句 8.2.1.1 SELECT语句的速度 8.2.1.2 WHERE子句优化 8.2.1.3 Range优 ...
随机推荐
- 《C++primer》v5 第8章 IO库 读书笔记 习题答案
8.1.8.2 这一章不咋会啊.. istream &read(istream &is) { int a; auto old_state=is.rdstate(); is.clear( ...
- 使用vs2010创建MFC C++ Ribbon程序
Your First MFC C++ Ribbon Application with Visual Studio 2010 Earlier this month, I put together my ...
- [转]sed命令详解
转载:http://blog.chinaunix.net/u/22677/showart_1076318.html 1.简介 sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保 ...
- linux中模块的构建,传参,和printk函数的简单使用
静态编译,动态加载应用想访问内核需要通过系统调用 驱动:1.模块(打包,加入内核)2.内核机制3.操作硬件 在Kconfig里面配置menuconfig的时候,不同的类型会在图形化界面的终端显示不用的 ...
- js 闭包演示
function test2() { var scope = "global scope"; var f = enclose(scope); scope = 'aaa'; aler ...
- iOS—Mask属性的使用
Mask属性介绍 Mask平时用的最多的是masksToBounds 吧. 其实除此以外Mask使用场景很多,看完之后你会发现好真是好用的不要不要的... 先来了解下Mask属性到底是什么? Mask ...
- PPT设计宝典!十招教你做出拿得出手的PPT
据说上班用 excel 的比 word 的工资高,用 ppt 的比用 excel 的工资高.无论如何,在职场演讲汇报中,PPT 扮演着至关重要的角色. 在本文我们将用 10 个超级技巧来解决糟糕的演示 ...
- FTP应答码&响应码
2016-06-16 00:57:25 110: 重新启动标记应答. 120: 在n分钟内准备好 125: 连接打开准备传送 150: 打开数据连接200: 命令成功202: 命令失败211: 系统状 ...
- 集合视图 UICollectionView
什么是UICollectionView UICollectionView是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView(请一定注意这是UICollectionView的最最 ...
- C#的循环语句
1.输入月份,日期号,输出是见年的第几天. 循环语句: for 格式 for(初始条件;循环条件;状态改变) { 循环体,执行代码(break;跳出循环体) } 2.一个游戏,前20关是每一关自身的分 ...