热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Mysqlmy.cnf调优_MySQL

Mysqlmy.cnf调优
bitsCN.com

Mysql性能调优(my.cnf参数篇)
MySQL的合理优化,直接影响到DB的速度和承载量!
MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验进行判断,然后设置合理的参数。

本主题调优针对于my.cnf配置来做详细的参数说明
示例配置如下:
#cat my.cnf
# MySQL client library initialization.
[client]
port

= 3306
socket = /tmp/mysql.sock
character-set-server = utf8

# The MySQL server
[mysqld]
init_cOnnect= 'set names utf8'//设定连接mysql数据库时使用utf8编码,以让mysql数据库以utf8运行
>show variables like'character%'/G; 可查询mysql字符相关
init_cOnnect= 'SET autocommit=0' //关闭自动提交模式,就认为用户总是以事务方式操作
character-set-server = utf8
port = 3306
socket = /tmp/mysql.sock
basedir = /opt/justone/mysqldM/mysql
datadir = /opt/justone/mysqldM/mysql/data
skip-locking //避免MySQL的外部锁定,减少出错几率增强稳定性。
#skip-networking//开启该选项即彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!
skip_name_resolve//禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!
#back_log = 384 //监听队列中所能保持的连接数即保存了在MySQL连接管理器线程处理之前的连接。
back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。
如果一个短时间内有很多连接,则需要增大该参数的值,来指定到来的TCP/IP连接的侦听队列的大小。
不同的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。
默认值为50。对于Linux系统推荐设置为小于512的整数。系统值由ulimit-a查看。
max_cOnnections= 2000 //允许的同时客户的数量。增加该值即增加mysqld要求的文件描述符的数量。
注:该值过小,客户端会经常有Too many connections 错误。
wait_timeout=10 //指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。
max_connect_errors = 500 //如同一主机有超出该参数值个数的中断错误连接,则该主机将被禁止连接。
如需对该主机进行解禁,执行:FLUSH HOST;
table_open_cache = 2048 //所有线程打开表的数量
max_allowed_packet = 16M//一个查询语句包的最大尺寸,信息交换中使用信息包的允许大小(如:导入表)
max_heap_table_size = 256M //HEAP数据表(内存表)的最大长度(默认设置是16M);
超过这个长度的HEAP数据表将被存入一个临时文件而不是驻留在内存里。
sort_buffer_size = 512K //查询排序时所能使用的缓冲区大小。
该参数对应的分配内存是每连接独占,如有100个连接,实际分配的排序缓冲区大小为100×512K=50MB。
所以,对于内存在4GB左右的服务器推荐设置为6-8M。
join_buffer_size = 1M //联合查询操作所能使用的缓冲区大小,该参数对应的分配内存也是每连接独享.
thread_cache_size = 8 //可以复用的保存在线程缓存中的线程的数量.内存G*8即2G设为16
数据库的每一个连接都要使用自己的线程。线程创建需要时间,所以如果这个连接关闭时并不需要关闭这个线程,服务器会把它保存在自己的线程缓存中,以便下一个连接使用。
thread_cOncurrency= 8 //该参数取值为服务器逻辑CPU数量×2
bulk_insert_buffer_size = 8M //指定 MyISAM 类型数据表表使用特殊的树形结构的缓存。
使用整块方式(bulk)能够加快插入操作( INSERT … SELECT, INSERT …VALUES (…), (…), …, 和 LOAD DATA INFILE)的速度和效率。该参数限制每个线程使用的树形结构缓存大小,如果设置为0则禁用该加速缓存功能。注意:该参数对应的缓存操作只能用户向非空 数据表中执行插入操作!默认值为8MB。
query_cache_size = 64M //指定MySQL查询缓冲区的大小。
可以通过在MySQL控制台执行以下命令观察:
> SHOW VARIABLES LIKE'%query_cache%';
> SHOW STATUS LIKE'Qcache%';
Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况;
Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;
Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。
default-storage-engine = InnoDB //新数据表的默认数据表类型 默认设置是MyISAM
lower_case_table_names = 1 //MySQL实现不区分大小写
transaction_isolation = REPEATABLE-READ //设置所有连接的默认事务隔离级
tmp_table_size = 256M //临时HEAP数据表的最大长度
默认设置是32M;超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件。
slow_query_log = 1
log = /opt/justone/mysqldM/mysql/logs/mysql.log
long_query_time = 2
log-slow-queries =/opt/justone/mysqldM/mysql/logs/slowquery.log
# Replication related settings
server-id = 1 //设定为master
log-bin=mysql-bin //产生的log以mysql-bin开头
binlog_cache_size = 8M //为binary log指定在查询请求处理过程中SQL查询语句使用的缓存大小。
如果频繁应用于大量、复杂的SQL表达式处理,则应该加大该参数值以获得性能提升。
binlog_format=mixed //日志格式,亦可自定义。

InnoDB和MyISAM类型区别
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。
基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
InnoDB注意的地方:
1.InnoDB不支持FULLTEXT类型的索引。
2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) fromtable时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语 句包含where条件时,两种表的操作是一样的。
3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
4.DELETE FROMtable时,InnoDB不会重新建立表,而是一行一行的删除。
5.LOAD TABLE FROMMASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
6.InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如updatetable set num=1 where name like “a%”

# MyISAM Specific options
key_buffer_size = 32M //索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写)
索引块是缓冲的并且被所有的线程共享。如果你使它太大,系统将开始换页并且真的变慢了。
默认数值是8388600(8M),MySQL主机有2GB内存,可设为402649088(400MB)。
注意:该参数值设置的过大反而会是服务器整体效率降低!
read_buffer_size = 256K //读查询操作所能使用的缓冲区大小,该参数对应的分配内存也是每连接独享.
read_rnd_buffer_size = 256K //针对按某种特定顺序(如ORDERBY子句)输出的查询结果(默认256K)
加速排序操作后的读数据,提高读分类行的速度。
myisam_sort_buffer_size = 128M //myisam引擎的sort_buffer_size
myisam_max_sort_file_size = 10G //类似于上
myisam_recover //自动检查和修复无法正确关闭MyISAM表
#skip-innodb //去掉innodb支持
#skip-bdb //去掉bdb事务型表支持

# INNODB Specific options ***
innodb_additional_mem_pool_size = 16M//InnoDB用来存储数据字典和其他内部数据结构的内存池大小。
应用程序里的表越多就应该分配越多的内存,如果innodb用光了这个内存就会向系统内存要。
并且写入警告日志,根据MySQL手册,对于2G内存的机器,推荐值是20M。
缺省值是1M。通常不用太大,只要够用就行,与表结构的复杂度有关系。
#innodb_buffer_pool_size = 6G //指定大小的内存来缓冲数据和索引。
对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。
根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)
innodb_buffer_pool_size = 512M
innodb_data_file_path = ibdata1:10M:autoextend//用来容纳InnoDB为数据表的表空间:
可能涉及一个以上的文件;每一个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出;
表空间文件的名字必须以分号隔开;最后一个表空间文件还可以带一个autoextend属性和一个最大长度(max:n)。
例如,ibdata1:1G;ibdata2:1G:autoextend:max:2G的意思是:
表空间文件ibdata1的最大长度是1GB,ibdata2的最大长度也是1G,但允许它扩充到2GB。
除 文件名外,还可以用硬盘分区的设置名来定义表空间,此时必须给表空间的最大初始长度值加上newraw关键字做后缀,给表空间的最大扩充长度值加上raw 关键字做后缀(例如/dev/hdb1:20Gnewraw或/dev/hdb1:20Graw);MySQL 4.0及更高版本的默认设置是ibdata1:10M:autoextend。
innodb_file_io_threads = 4 //IO操作(硬盘写操作)的最大线程个数(默认设置是4)。
innodb_file_per_table = 1//为每一个新数据表创建一个表空间文件而不是把数据表都集中保存在中央表空间里
如果系统中表的个数不多,并且没有超大表,使用该参数可以使得各个表之间的,维护相对独立。
innodb_thread_cOncurrency= 16//InnoDB驱动程序能够同时使用的最大线程个数(默认设置是8)。
innodb_flush_log_at_trx_commit = 1 //InnoDB记录日志的方式。
如果设置为1,则每个事务提交的时候,MySQL都会将事务日志写入磁盘。
如果设置为0或者2,则大概每秒中将日志写入磁盘一次。
实际测试发现,该值对插入数据的速度影响非常大
设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。
建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。
在存在丢失最近部分事务的危险的前提下,可以把该值设为0。
innodb_log_buffer_size = 8M //日志缓存的大小
默认的设置在中等强度写入负载以及较短事务的情况下,一般可以满足服务器的性能要求。
如果更新操作峰值或者负载较大就应该加大这个值。8-16M即可。
innodb_log_file_size = 256M //日志组中每个日志文件的大小在高写入负载尤其是大数据集的情况下很重要。
这个值越大性能就越高,但恢复时时间会加长。默认是5M。Javaeye推荐innodb_log_file_size = 64M
需要注意的是 修改完以后要STOP服务接着删除原来的日志ib_logfile0和ib_logfile1,然后启动服务.
整体性能分析报告> show engine innodbstatus/G;
innodb_log_files_in_group = 3 //日志组中的日志文件数目,推荐使用3
innodb_max_dirty_pages_pct = 90 //最大脏页的百分数
当系统中脏页所占百分比超过这个值,INNODB就会进行写操作以把页中的已更新数据写入到磁盘文件中。
innodb_flush_method = O_DIRECT//InnoDB日志文件的同步办法(仅适用于UNIX/Linux系统)。
O_DIRECT跳过了操作系统的文件系统DiskCache,让MySQL直接读写磁盘。
innodb_lock_wait_timeout = 120 //事务获得资源超时设置,默认50s
如果某个事务在等待n秒(s)后还没有获得所需要的资源,就使用ROLLBACK命令放弃这个事务。
这项设置对于发现和处理未能被InnoDB数据表驱动程序识别出来的死锁条件有着重要的意义。
但是不能对表锁导致的死锁进行自动监测。

[mysqldump]
quick //不缓冲查询,直接导出至stdout;使用mysql_use_result()做它。
不要在将内存中的整个结果写入磁盘之前缓存. 在导出非常巨大的表时需要此项
max_allowed_packet = 16M

[mysql]
no-auto-rehash //不自动补齐命令,设置auto-rehash为自动补齐。默认TAB补齐
#safe-updates //仅仅允许使用键值的 UPDATE 和 DELETE

[myisamchk] //MyISAM表维护的一个非常实用的工具。
可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。
myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M

[mysqlhotcopy]
interactive-timeout //把一个数据传输的最大时间量设置为默认的28800秒

[mysqld_safe]
open-files-limit = 8192 //每个进程的可打开文件数量.
确认你已经将系统限制设定的足够高 #ulimit -HSn 65536

另:服务器硬件对MySQL性能的影响
a) 磁盘寻道能力(磁盘I/O)
目前高转速SCSI硬盘(7200转/秒)理论上每秒寻道7200次,物理特性,无法改变.
MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。
磁盘I/O是制约MySQL性能的最大因素之一.如:日均访问100Wpv的论坛.
由于磁盘I/O的制约,MySQL的性能会非常低下,可以考虑以下几种解决方案:
使用RAID-0+1磁盘阵列
注意不要尝试使用RAID-5,MySQL在RAID-5磁盘阵列上的效率不会像你期待的那样快;
抛弃传统的硬盘,使用速度更快的闪存式存储设备。
经过Discuz!公司技术工程的测试,使用闪存式存储设备可比传统硬盘速度高出6-10倍左右。
b) CPU 对于MySQL应用,推荐使用S.M.P.架构的多路对称CPU,例如:两颗IntelXeon 3.6GHz的CPU。
c) 服务器内存建议不要小于2GB,推荐使用4GB以上的物理内存。bitsCN.com
推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
author-avatar
心在天堂590120_993_292
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有