您现在的位置:主页 > 技术中心 > 数据库技术 > Mysql

MySQL调优

来源:网络 责任编辑:admin 发表时间:2013-07-01 03:45 点击:

 

调优思路:

1.数据库设计与规划--以后再修该很麻烦,估计数据量,使用什么存储引擎

2.数据的应用--怎样取数据,sql语句的优化

3.mysql服务优化--内存的使用,磁盘的使用

4.操作系统的优化--内核、tcp连接数量

5.升级硬件设备

 

 

磁盘io规划

raid技术:raid0[xfs]

swap分区:最好使用raid0

磁盘分区:一个库放到一个分区上或一个磁盘上

物理分区

create table t1(id int,name char(20)) data directory='/data/' index directory ='/data';

mkdir /data

chown mysql.mysql /data

 

mysql> show variables like '%part%';

 

 

4.操作系统的优化

网卡bonding技术,

tcp连接数量限制

优化系统打开文件的最大限制

关闭操作系统不必要的服务

 

5.mysql服务优化

show status  看系统的资源

show variables  看变量,在my.cnf配置文件里定义的

show warnings   查看最近一个sql语句产生的错误警告,看其他的需要看.err日志

show processlist显示系统中正在运行的所有进程。

show errors

 

启用mysql慢查询:---分析sql语句,找到影响效率的SQL

 

log-slow-queries=/var/lib/mysql/slow.log 这个路径对mysql用户具有可写权限

long_query_time=2   查询超过2秒钟的语句记录下来

上面的2 是查询的时间,即当一条SQL 执行时间超过5秒的时候才记录,/var/lib/mysql/slow.log 是日志记录的位置。

然后重新启动MySQL服务

 

对查询进行缓存

query_cache_size 使用多大内存来缓存查询语句[+8M]

mysql> show variables like'%query%'

query_cache_size=8M

[root@st mysql]# vim /etc/my.cnf

 

 

mysql> show status like '%Qcache%';

Qcache_free_blocks:说明缓存太大了。缓存中相邻内存的个数。数目大说明可能有碎片。FLUSH QUERY CACHE会对缓存中的碎片进行整理,从而得到一个空闲块。[+8M]

Qcache_free_memory缓存中的空闲内存

Qcache_hits每次查询在缓存中命中时就增大

Qcache_inserts每插入一个查询时就增大。命中次数除以插入次数就是命中率。

Qcache_lowmen_prunes缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间看;如果这个数字在不断增长就表示可能碎片非常严重,或者内存很少

Qcache_hits/Qcache_inserts 命中率

 

关键字缓冲区

mysql> show status like '%key%';

mysql> show variables like'key_buffer_size';

 

key_buffer_size  指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。[+8M]

key_read_requests  请求总数

key_reads   代表命中磁盘的请求个数

(key_read_requests-key_read)/key_read_requests:命中率

key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。

对于1G内存的机器,如果不使用MyISAM表,推荐值是16M(8-64M)。

 

临时表空间大小:order by和group by时把数据放到临时表里。

tmp_table_size   占的是内存的大小,如果太小在排序时会出错

created_tmp_tables  创建临时表的数量

max_tmp_tables=32

tmpdir=/tmp  硬盘上临时表所在的位置

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

innodb表:

创建表空间文件

[mysqld]

innodb_data_file_path=ibdata1:10M:autoextend

这个设置配置一个可扩展大小的尺寸为10MB的单独文件,名为ibdata1。没有给出文件的位置,所以默认的是在MySQL的数据目录内。

如果你对最后的数据文件指定autoextend选项。如果数据文件耗尽了表空间中的自由空间,InnoDB就扩展数据文件。扩展的幅度是每次8MB。

要为一个自动扩展数据文件指定最大尺寸,请使用max属性。下列配置允许ibdata1涨到极限的500MB:

[mysqld]

innodb_data_file_path=ibdata1:10M:autoextend:max:500M

InnoDB默认地在MySQL数据目录创建表空间文件。

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      评价:
      表情:
      用户名: 验证码:点击我更换图片

      推荐热点

      • mysql-mmm
      • mysqldump命令——MySQL数据库备份还原
      • Oracle数据导入MySQL的快捷工具:MySQL Migration Tool
      • 简简单单储存过程——循环一个select结果集
      • MySQL数据库十大优化技巧
      • Mysql安装笔记
      • Mysql主主复制架构配置
      • Mysql的Procedure 参数为NULL问题分析
      • MySQL Stmt预处理提高效率问题的小研究
      ?? - ?? - ÝřŝžľŘÝź - TAGąęÇŠ - RSSśŠÔÄ - ??
      Copyright © 2004-2024 上海卓卓网络科技有限公司