mysql数据库性能优化 - 参数优化

Mysql Server优化                                                                                                                                

1、查看mysql server参数

  • show variables; / show variables like ‘参数名‘;   --mysql服务器配置信息
  • show status; / show global status; / show status like ‘字段名‘;  --mysql服务器运行的各种状态
  • mysqladmin -uroot variables; --os下直接查看
  • mysqladmin -uroot status;
  • mysqld --verbose --help|more --查看参数的详细定义
  • 日志:show variable like ‘log_%‘;  --是否启用了日志    show master status;  --日志状态    show master log;  --日志信息

2、影响mysql性能的重要参数

1)链接数

  • show variables  like ‘max_connections‘;   --查看mysql允许的最大链接数(也即是/etc/my.cnf中配置的该参数)
  • show global status like ‘Max_used_connections‘;  --查看mysql以往响应的最大连接数

比较理想的设置:Max_used_connections / max_connections * 100% = 85%

2)索引未命中缓存的概率

  • show global status like ‘key_read%‘;

 key_cache_miss_rate = key_reads /  key_read_requests * 100%(在0.1%以下都很好,如果在0.01%以下的话,而key_buffer_size分配过多,可以适当减少)

理解:key_read_requests是从cache中读索引的请求,而key_reads是从物理硬盘上读索引的次数。每次需要使用索引的时候就会先向cache中请求,cache中没有该索引的时候就再从硬盘上读。

3)表描述符缓存

  • show variables like ‘table_open_cache‘;  --表描述符缓存大小,mysql每打开一个表都会读入一些数据到table_open_cache缓存中,当mysql在这个缓存中找不到相应的信息时,才会到磁盘上直接读取。
  • show global status  like ‘open%tables%‘; -- open_tables:打开表的数量;opened_table:打开过的表的数量,如果该过大,说明table_open_cache值可能太小。

比较合适的值:

  open_tables / opened_tables * 100% >= 85%

  open_tables / table_open_cache * 100% <= 95%

4)表扫描率

  • show global status like ‘Handler_read_rnd_next‘;  --在数据文件中读下一行的请求数。如果你正进行大量的表扫描,该值较高。通常说明你的表索引不正确或写入的查询没有利用索引。
  • show global status like ‘com_select‘;  --com_select变量记录的是无缓存的查询次数+错误查询次数+权限检查查询次数
  • show variables like ‘read_buffer_size‘;   --表扫描时的缓冲区
  • show variables like ‘read_rnd_buffer_size‘;  --随机扫描时的缓冲区,适当调大对orader by 操作的性能有一定效果

表扫描率 = Handler_read_rnd_next / com_select   --超过400说明有太多的表扫描,很有可能索引没有建好,增加read_buffer_size值会有一些好处,但最好不要超过8M。

5)innodb_flush_log_at_trx_commit   --控制缓冲区中数据写入到日志文件以及日志文件数据刷新到磁盘的操作时机

  • show variables like ‘innodb_flush_log_at_trx_commit‘;

0:log thread每隔1s会将log buffer中的数据写入到文件,同时还会通知文件系统进行文件同步的flush操作,保证数据确实已经写入到磁盘上面的物理文件。(性能最好,安全性最差)

1:每次事务结束时都会触发log thread将日志缓存中的数据写入到文件并通知文件系统同步文件。(最安全,性能稍差

2:log thread会在每次事务结束的时候讲数据写入到事务日志,但是这里写入仅仅是调用文件系统的文件写入操作,文件系统什么时候会将缓存中的数据同步到物理文件,log thread就完全不知道。(对数据一致性和完整性要求不高时使用

一般原则:

  • 如果交易数据非常重要(例如银行交易),那么这个参数必须设置为1。
  • 如果是一般的互联网应该(例如社区讨论),那么可以设置为2,可以获得比较好的写入性能。
  • 在生产环境中,一般没有理由将此参数这是为0。

6)innodb_log_file_size --一个日志组中每个日志文件的大小,默认5M

show variables like ‘innodb_log_file_size ‘;

在高写入负载,尤其是大数据的情况下很重要。这个值越大则性能相对越高,但是带来的副作用是,当系统遭难是恢复时间会加长(扫描恢复的时间越长)。一般用64M-512M,具体取决于服务器的空间。

时间: 2024-11-07 15:03:41

mysql数据库性能优化 - 参数优化的相关文章

架构设计:系统存储(8)——MySQL数据库性能优化(4)

================================ (接上文<架构设计:系统存储(7)--MySQL数据库性能优化(3)>) 4-3.InnoDB中的锁 虽然锁机制是InnoDB引擎中为了保证事务性而自然存在的,在索引.表结构.配置参数一定的前提下,InnoDB引擎加锁过程是一样的,所以理论上来说也就不存在"锁机制能够提升性能"这样的说法.但如果技术人员不理解InnoDB中的锁机制或者混乱.错误的索引定义和同样混乱的SQL写操作语句共同作用,那么导致死锁出现的

架构设计:系统存储(9)——MySQL数据库性能优化(5)

=================================== (接上文<架构设计:系统存储(9)--MySQL数据库性能优化(5)>) 4-3-3-3.避免死锁的建议 上一篇文章我们主要介绍了MySQL数据库中锁的基本原理.工作过程和产生死锁的原因.通过上一篇文章的介绍,可以确定我们需要业务系统中尽可能避免死锁的出现.这里为各位读者介绍一些在InnoDB引擎使用过程中减少死锁的建议. 正确使用读操作语句 经过之前文章介绍,我们知道一般的快照读是不会给数据表任何锁的.那么这些快照读操作

优化MySQL数据库性能的八大方法

本文探讨了提高MySQL 数据库性能的思路,并从8个方面给出了具体的解决方法. 1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小.例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了.同样的,如果可以的话,我们应该

mysql数据库性能优化(包括SQL,表结构,索引,缓存)

优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段.降低 CPU 计算除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了.order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算).当我们的 IO 优化做到一定阶段之后

MySQL数据库性能优化专题

摘录: 书:<MySQL性能调优与架构设计> 一个系列: (按顺序排一下) MySQL 数据库性能优化之缓存参数优化 http://isky000.com/database/mysql-perfornamce-tuning-cache-parameter MySQL 数据库性能优化之表结构优化 http://isky000.com/database/mysql-perfornamce-tuning-schema MySQL 数据库性能优化之索引优化 http://isky000.com/dat

MySQL数据库性能优化及自动化运维实践教程!DBA日常工作

MySQL数据库性能优化及自动化运维实践教程!本文作者将站在更加全面的角度分享他在这一年多 DBA 工作中的经验,希望可以给大家带来启发和帮助. DBA 的日常工作 我觉得 DBA 真的很忙,我们来看看 DBA 的具体工作:备份和恢复.监控状态.集群搭建与扩容.数据迁移和高可用. 上面这些是我们 DBA 的功能,了解这些功能以后要对体系结构有更加深入的了解,你不知道怎么处理这些故障和投诉的事情. 所以我们要去了解缓存/线程.SQL 优化.存储引擎.SQL 审计以及锁与实务:体系结构更深一点,就去

MySQL 数据库性能优化之索引优化

这是 MySQL数据库性能优化专题 系列的第三篇文章:MySQL 数据库性能优化之索引优化 索引为什么能提高数据访问性能? 很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解. 我们让一位不太懂计算机的朋友去图书馆确认一本叫做<MySQL性能调优与架构设计>的书是否在藏,这样对他说:"请帮我借一本计算机类的数据库书籍,是属于 MySQL 数据库范畴的,叫做<MySQL性能调优与架构设计>".朋友会根据所属类别,前往

MySQL数据库性能优化之一

MySQL数据库性能优化需要考虑的几个方面: 1.sql语句及索引优化 2.数据库结构优化 3.系统配置优化 4.硬件优化

mysql数据库性能参数配置(转)

max_connections MySql的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,MySql会为每个连接提供连接缓冲区,就会开销越多的内存,连接数太大,服务器消耗的内存越多,以至于影响服务器性能,所以要根据服务器的配置适当调整该值,不能盲目提高设值.可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小. show variables like 'max_connections' 最大连接数

MySQL数据库性能优化的关键参数(转)

我们在进行数据库管理和开发中经常会遇到性能问题,这就涉及到MySQL的性能优化.通过在网络上查找资料和笔者自己的尝试,我认为以下系统参数是比较关键的: 关键参数一:back_log 要求 MySQL 能有的连接数量.当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程. back_log 值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中.只有如果期望在一个短时间内有很多连接,你需要增加它,换句话