`
pujing
  • 浏览: 41643 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

有效配置MySQL参数

阅读更多
1.获取当前配置参数
要优化配置参数,首先要了解当前的配置参数以及运行情况。使用下列命令可以获得目前服务器使用的配置参数:
mysqld –verbose –help

mysqladmin variables extended-status –u root –p

在MySQL控制台里面,运行下列命令可以获取状态变量的值:

mysql> SHOW STATUS;

如果只要检查某几个状态变量,可以使用下列命令:

mysql> SHOW STATUS LIKE ‘[ 匹配模式]’; ( 可以使用% 、? 等)




2.优化参数
参数优化基于一个前提,就是在我们的数据库中通常都使用InnoDB表,而不使用 MyISAM表。在优化MySQL时,有两个配置参数是最重要的,即 table_cache和key_buffer_size。

table_cache

table_cache指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和 Opened_tables,可以决定是否需要增加table_cache的值。如果你发现 open_tables等于 table_cache,并且 opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUSLIKE ‘Open%tables’获得)。注意 ,不能盲目地把 table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

对于有1G内存的机器,推荐值是128 -256 。


案例1:该案例来自一个不是特别繁忙的服务器

table_cache – 512

open_tables – 103

opened_tables – 1273

uptime – 4021421 (measured in seconds)

该案例中 table_cache似乎设置得太高了。在峰值时间,打开表的数目比table_cache要少得多。



案例2:该案例来自一台开发服务器。

table_cache – 64

open_tables – 64

opened-tables – 431

uptime – 1662790 (measured in seconds)

虽然open_tables已经等于 table_cache,但是相对于服务器运行时间来说,opened_tables的值也非常低。因此,增加table_cache的值应该用处不大。



案例3:该案例来自一个upderperf的服务器

table_cache – 64

open_tables – 64

opened_tables – 22423

uptime – 19538

该案例中 table_cache设置得太低了。虽然运行时间不到6小时,open_tables达到了最大值, opened_tables的值也非常高。这样就需要增加table_cache的值。



key_buffer_size

key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和 Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOWSTATUS LIKE ‘key_read%’获得)。

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

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



案例1:健康状况

key_buffer_size – 402649088 (384M)

key_read_requests – 597579931

key_reads - 56188

案例2:警报状态

key_buffer_size – 16777216 (16M)

key_read_requests – 597579931

key_reads - 53832731

案例1中比例低于1:10000,是健康的情况;案例2中比例达到1:11,警报已经拉响。



优化query_cache_size

从4.0.1开始,MySQL提供了查询缓冲机制。使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。

通过检查状态值 Qcache_*,可以知道 query_cache_size设置是否合理(上述状态值可以使用SHOWSTATUS LIKE ‘Qcache%’获得)。如果 Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲。

与查询缓冲有关的参数还有 query_cache_type、 query_cache_limit、query_cache_min_res_unit。 query_cache_type指定是否使用查询缓冲,可以设置为0、1、2,该变量是SESSION级的变量。query_cache_limit指定单个查询能够使用的缓冲区大小,缺省为1M。query_cache_min_res_unit是在4.1版本以后引入的,它指定分配缓冲区空间的最小单位,缺省为4K。检查状态值Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多,这就表明查询结果都比较小,此时需要减小query_cache_min_res_unit 。



开启二进制日志( BinaryLog )

二进制日志包含所有更新数据的语句,其目的是在恢复数据库时用它来把数据尽可能恢复到最后的状态。另外,如果做同步复制(Replication )的话,也需要使用二进制日志传送修改情况。



开启二进制日志,需要设置参数 log-bin。 log_bin指定日志文件,如果不提供文件名,MySQL将自己产生缺省文件名。MySQL会在文件名后面自动添加数字索引,每次启动服务时,都会重新生成一个新的二进制文件。

此外,使用 log-bin-index 可以指定索引文件;使用binlog-do-db可以指定记录的数据库;使用binlog-ignore-db可以指定不记录的数据库。注意的是:binlog-do-db 和binlog-ignore-db 一次只指定一个数据库,指定多个数据库需要多个语句。而且,MySQL会将所有的数据库名称改成小写,在指定数据库时必须全部使用小写名字,否则不会起作用。

在MySQL中使用 SHOW MASTERSTATUS命令可以查看目前的二进制日志状态。

开启慢查询日志( slowquery log )

慢查询日志对于跟踪有问题的查询非常有用。它记录所有查过long_query_time的查询,如果需要,还可以记录不使用索引的记录。下面是一个慢查询日志的例子:

<f /></formulas/>开启慢查询日志,需要设置参数log_slow_queries、 long_query_times、log-queries-not-using-indexes 。 log_slow_queries指定日志文件,如果不提供文件名,MySQL将自己产生缺省文件名。long_query_times指定慢查询的阈值,缺省是10秒。log-queries-not-using-indexes是4.1.0以后引入的参数,它指示记录不使用索引的查询。



配置InnoDB

相对于MyISAM表来说,正确配置参数对于InnoDB表更加关键。其中,最重要的参数是innodb_data_file_path。它指定表数据和索引存储的空间,可以是一个或者多个文件。最后一个数据文件必须是自动扩充的,也只有最后一个文件允许自动扩充。这样,当空间用完后,自动扩充数据文件就会自动增长(以8MB为单位)以容纳额外的数据。例如:

innodb_data_file_path=/disk1/ibdata1:900M;/disk2/ibdata2:50M:autoextend

两个数据文件放在不同的磁盘上。数据首先放在ibdata1中,当达到900M以后,数据就放在ibdata2中。一旦达到50MB,ibdata2将以8MB为单位自动增长。

如果磁盘满了,你需要在另外的磁盘上面增加一个数据文件。为此,你需要查看最后一个文件的尺寸,然后计算最接近的整数(MB)。然后手工修改该文件的大小,并添加新的数据文件。例如:假设ibdata2已经有109MB数据,那么可以修改如下:

innodb_data_file_path=/disk1/ibdata1:900M;/disk2/ibdata2:109M;/disk3/ibdata3:500M:autoextend

flush_time

如果系统有问题并且经常锁死或重新引导,应将该变量设置为非零值,这将导致服务器按flush_time秒来刷新表的高速缓存。用这种方法来写出对表的修改将降低性能,但可减少表讹误或数据丢失的机会。

一般使用缺省值。

Binlog_cache_size

Thesize of the cache to hold the SQL statements for the binary logduring a transaction. A binary log cache is allocated for eachclient if the server supports any transactional storage engines andif the server has binary log enabled(--log-bin option). If youoften use big, multiple-statement transactions, you can increasethis to get more perf The Binlog_cache_use andBinlog_cache_disk_use status variables can be useful for tuning thesize of this variable.

3.存储引擎
在MYSQL 3.23.0 版本中,引入了MyISAM存储引擎。它是一个非事务型的存储引擎,成为了MYSQL的缺省存储引擎。但是,如果使用设置向导来设置参数,则它会把InnoDB作为缺省的存储引擎。InnoDB 是一个事务型的存储引擎。

创建表的时候,可以为表指定存储引擎,语法如下:

CREATE TABLE t (i INT) ENGINE = MyISAM

CREATE TABLE t (i INT) TYPE = MyISAM

如果没有指定,则使用缺省的存储引擎。也可以使用ALTER TABLE来更换表引擎,语法如下:

ALTERTABLE t ENGINE = MyISAM

同一数据库中可以包含不同存储引擎的表。


分享到:
评论

相关推荐

    php资料库4 防止foeach中变量不是数组

    有效配置MySQL参数--my_cnf - 服务器专区 IT168.mht MySQL 5_1参考手册 7_ 优化(4) - MySQL - Unix爱好者家园.mht Drupal专业开发指南 第22章 Drupal优化(1) - g089h515r806的专栏 - CSDNBlog.mht 由Table_locks_...

    MySQL调优:从问题到解决的具体步骤和案例分析

    程序员需要掌握MySQL的性能监控工具和调优技术,如Explain、索引优化、配置参数调整等。通过具体的案例分析,帮助程序员更好地理解MySQL调优的步骤和方法,为系统的高效运行做出贡献。鼓励程序员积极学习和深入研究...

    mysql网络数据库指南(中文版) part1

    11.8.1 配置和安装多个服务器 313 11.8.2 多个服务器的启动过程 313 11.9 更新 MySQL 313 第12章 安全性 315 12.1 内部安全性:安全数据目录访问 315 12.2 外部安全性:安全网络访问 317 12.2.1 MySQL授权表的...

    MYSQL培训经典教程(共两部分) 1/2

    198 2、INSERT DELAYED 在客户机方的作用 199 8.4.4 对表进行优化 200 8.4.5 总结 201 8.5 服务器级优化 201 8.5.1 磁盘问题 201 8.5.2硬件问题 202 8.5.3 服务器参数的选择 202 8.5.4编译...

    mysql 8.0.18各版本安装及安装中出现的问题(精华总结)

    然后 进行mysql的初始化,初始化的时候可以带上路径等参数,这样配置文件到时就不用配置这个了,配置了反而报错导致启动不起来,忽略密码等配置可以在初始化之后还能有效,其他的参数如路径初始化指定过了之后就不能...

    MYSQL网络数据库PDF学习资源

    11.8.1 配置和安装多个服务器 313 11.8.2 多个服务器的启动过程 313 11.9 更新 MySQL 313 第12章 安全性 315 12.1 内部安全性:安全数据目录访问 315 12.2 外部安全性:安全网络访问 317 12.2.1 MySQL授权表的结构...

    PHP和MySQL Web开发第4版pdf以及源码

    16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 16.6.3 连接服务器 16.6.4 运行服务器 16.7 保护网络 16.7.1 安装防火墙 16.7.2使用...

    PHP和MySQL WEB开发(第4版)

    21.1.4 使用checkdate()函数检验日期有效性 21.1.5 格式化时间戳 21.2 在PHP日期格式和MySQL日期格式之间进行转换 21.3 在PHP中计算日期 21.4 在MySQL中计算日期 21.5 使用微秒 21.6 使用日历函数 21.7 进一步学习 ...

    356ssm-mysql-jsp 高校设备管理系统.zip(可运行源码+数据库文件+文档)

    5.系统配置模块:系统配置模块负责系统参数配置、数据库连接管理、日志管理等功能。6.设备报废管理模块7.设备采购申请模块:设备采购申请模块主要处理设 关键词:高校;教学设备;设备管理;Java

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...

    MYSQL培训经典教程(共两部分) 2/2

    198 2、INSERT DELAYED 在客户机方的作用 199 8.4.4 对表进行优化 200 8.4.5 总结 201 8.5 服务器级优化 201 8.5.1 磁盘问题 201 8.5.2硬件问题 202 8.5.3 服务器参数的选择 202 8.5.4编译...

    利用Myisamchk对MySQL数据表进行体检

    在MySQL数据库中,数据表数以百计,数据库管理员不可能有这么多的时间和精力去依次检查表的有效性,所以他们急需要一种工具,能够对相关的数据表进行体检,以判断表是否存在一些问题。这就好像我们每年都需要体检...

    PHP和MySQL Web开发第4版

    16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 16.6.3 连接服务器 16.6.4 运行服务器 16.7 保护网络 16.7.1 安装防火墙 16.7.2使用...

    LyBBS『凌云论坛』系统

    对数据库我们采用了数据库连接池,用户可以在配置文件中配置不同的连接池或者不使用连接池,对表操作也采用了预处理、批处理、事务处理等多种方式,用户可以在配置文件中配置数据库连接参数,包括连接数,超过连接数...

    神州影视网 V1.2

    这是一套基于PHP+Mysql的非常完善的电院程序,并且,里面包括1000多部真实有效的电影,且有下载地址,即装即用,你不需要下载服务器也成运行,并且内置51match.com支付网关,轻松收费。本程序特点:1.自带影视库,...

    Mycat-server-1.6-RELEASE源码

    支持mysql和oracle存储过程,out参数、多结果集返回(1.6) 支持zookeeper协调主从切换、zk序列、配置zk化(1.6) 支持库内分表(1.6) 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)...

    Sqoop企业级大数据迁移方案全方位实战视频教程

    手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程简介 从零开始讲解大数据业务及数据采集和迁移需求,以案例驱动的方式讲解基于Sqoop构建高性能的分布式数据迁移和...

    使用Python Web框架Django开发的一个B2C网上蔬果商城源代码

    使用Python Web框架Django...邮件 (django提供邮件支持 配置参数 send_mail) celery (重点 整体认识 异步任务) 页面静态化 (缓解压力 celery nginx) 缓存(缓解压力, 保存的位置、有效期、与数据库的一致性问题)

Global site tag (gtag.js) - Google Analytics