高性能的MySQL(8)优化服务器配置:内存

配置MySQL服务器离不开配置文件,接下来就开始这一部分的内容。

首先一定要清楚配置文件的位置,如果不知道可以尝试下面的操作:

/usr/local/mysql/bin/mysqld  --verbose --help | grep -A 1 'Default options'
#结果如下
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

有时候可以使用show global status 的输出来看状态,有的时候也需要看随着时间的变化而变化的状态值,可以使用命令:

/usr/local/mysql/bin/mysqladmin extended-status -ri60 -uroot -p123456

接下来看看内存的配置使用了。

MySQL可以使用的内存会受到操作系统位数的限制,MySQL保持一个连接(线程)只需要少量的内存,同时也需要为高峰时期执行大量查询预留好足够的内存。
下面是我们认为比较重要的缓存:

a、InnoDB缓冲池

b、InnoDB日志文件和MyISAM数据的操作系统缓存

c、MyISAM键缓存

d、查询缓存

InnoDB缓冲池并不仅仅缓存索引,还会缓存行的数据,自适应哈希索引,插入缓冲,锁,以及其他内部数据结构。很大的缓冲池,预热和关闭都很话费很长时间,重启服务器也会话费很长的时间,尤其是磁盘很慢的时候,可以使用Percona Server的快速预热功能,如果不能使用可以在重启时立刻进行全表扫描或者索引扫描,把索引载入缓冲池。可以通过使用init_file设置来实现这个功能。

如果大部分表都是MySIAM表,就应该为键缓存分配比较多的内存。最重要的配置是key_buffer_size,在决定键缓存需要分配多少内存之前,需要先了解MySIAM索引实际占用多少空间。查询INFORMATION_SCHEM表的INDEX_LENGTH字段,把他们的值相加就可以得到索引占用空间。如下:

linux下也可以使用如下命令:

du -sch `find /path/to/mysql/data/directory/ -name "*.MYI"`

默认情况下,MySIAM将所有索引都缓存在默认的键缓存中,但也可以创建多个命名的键,可以在配置文件中添加如下

key_buffer_1.key_buffer_size=1G

key_buffer_2.key_buffer_size=1G

可以使用cache index 命令来将表映射到对应的缓冲区,比如下面的语句,使用key_buffer_1来缓存t1和t2表的索引

cache index t1,t2 in key_buffer_1;

也可以把表的索引预载入缓存中,如下命令:

load index into cache t1,t2;

即使全部是InnoDB表,没有MySIAM表,依然需要将key_buffer_size设置为一个较小的值,因为服务器有时会在内部使用MySIAM,例如GROUP BY语句可能会使用MySIAM作为临时表。

线程缓存保存那些当前没有连接但是准备为后面的连接服务的线程,thread_cache_size变量指定了MySQL可以保持在缓存中的线程数。

一个好的办法是观察Threads_connected变量并且尝试thread_cache_size,没有必要设置的非常大。

InnoDB有自己的表缓存,可以称为数据字典,当InnoDB打开一个表就增加了一个对应的对象到数据字典,当表关闭的时候也不会从数据字典移除。

另一个性能问题是第一次打开表会计算统计信息,这需要很多的I/O操作,相比MySIAM,InnoDB没有将统计信息持久化,而是在每次打开时重新计算,包括改变表的内容或者查询INFORMATION_SCHEMA表也会重新计算统计信息,如果有很多表,服务器可能会花费数个小时来启动并完成预热。MySQL5.6以后,可以通过innodb_analyze_is_persistent选项来持久化存储统计信息到磁盘上。

可以关闭innodb_stats_on_metadata选项来避免耗时的表统计信息的刷新。

本文出自 “phper-每天一点点~” 博客,请务必保留此出处http://janephp.blog.51cto.com/4439680/1320197

时间: 2024-11-07 21:53:15

高性能的MySQL(8)优化服务器配置:内存的相关文章

4G内存服务器的MySQL配置优化

公司网站访问量越来越大(日均超10万PV),MySQL自然成为瓶颈,关于 MySQL 的优化,最基本的是 MySQL 系统参数的优化. MySQL对于web架构性能的影响最大,也是关键的核心部分.MySQL的设置是否合理优化,直接影响到web的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验进行判断,然后设置合理的参数. 下面我们了解一下MySQL优化的一些基础,MySQL自身(my.cnf)的优化. 我们介绍一

高性能的MySQL(6)如何优化特定类型的查询

只要说明几种日常用到的查询可以优化的地方,只是特别的情况下可以使用,不要期望任何情况下都成立,优化是一个实践的漫长过程! 一.最大值和最小值优化 对于min()和max()查询,MySQL的优化并不是很好,比方说: select min(actor_id) from actor where first_name = 'Jane'; 因为first_name上没有索引,所以这个会扫描全表.如果MySQL能按主键扫描,那么第一个满足条件的记录就是要找的最小指了,因为主键是严格按照大小顺序排列的,一个

解开发者之痛:中国移动MySQL数据库优化最佳实践

 章颖数据研发工程师 现任中国移动杭州研发中心数据研发工程师,擅长MySQL故障诊断,性能调优,MySQL高可用技术,曾任中国电信综合平台开发运营中心DBA   开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则需要从数据类型优化,索引优化,SQL优化三个角度考虑MySQL数据库优化问题,本次分享将从开发角度,看如何实现MySQL数据库优化. 本次

Mysql性能优化方案分享_Mysql

网上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用status信息对mysql进行具体的优化. mysql> show global status; 可以列出MySQL服务器运行各种状态值,另外,查询MySQL服务器配置信息语句:mysql> show variables; 一.慢查询 m

【转载】低成本和高性能的MySQL云数据库的实现淘宝 MySQL

低成本和高性能的MySQL云数据库的实现 作者: 鸣嵩/曹伟(集团技术专家) 本文刊登于<程序员>杂志2012年12期上,转载请注明         UMP(Unified MySQL Platform)系统是淘宝核心系统数据库团队开发的低成本和高性能的MySQL云数据方案,关键模块采用Erlang语言实现.系统中包含了controller服务器.proxy服务器.agent服务器.API/Web服务器.日志分析服务器.信息统计服务器等组件,并且依赖于Mnesia.LVS.RabbitMQ.Z

MySQL性能优化总结(转)

一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图:   三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件.首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD和.MYI文件,分别存放了表的数据(.MYD)和索引数据(.MYI).每个表都有且仅有这样三个文件做为MyISAM存储类型的表的存储,也就是说不管这个

详解MySQL性能优化(一)_Mysql

一.MySQL的主要适用场景1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图:   三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎的表在数据库中,每一个表都被存放为三个以表名命名的物理文件.首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD和.MYI文件,分别存放了表的数据(.MYD)和索引数据(.MYI).每个表都有且仅有这样三个文件做为MyISAM存储类型的表的存储,也就是说不管这个表

MySQL性能优化_Mysql

1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,仅仅是一个玩具数据库.因此在产品中使用MySQL数据库必须进行必要的优化.优化是一个复杂的任务,本文描述MySQL相关的数据库设计和查询优化,服务器端优化,存储引擎优化. 2. 数据库设计和查询优化 在MySQL Server性能调优中,首先要考虑的就是Database Schema设计,这一

mysql性能优化参考

1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,仅仅是一个玩具数据库.因此在产品中使用MySQL数据库必须进行必要的优化. 优化是一个复杂的任务,本文描述MySQL相关的数据库设计和查询优化,服务器端优化,存储引擎优化.   2. 数据库设计和查询优化 在MySQL Server性能调优中,首先要考虑的就是Database Schema设计

19个MySQL性能优化要点解析_Mysql

以下就是跟大家分享的19个MySQL性能优化主要要点,一起学习学习. 1.为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的.因为,我们某些查询语句会让MySQL不使用缓存.请看下面的示例: // 查询缓存不开启 $r = mysq