mysql服务性能优化my_cnf配置说明详解16G内存

合集下载

如何调优MySQL服务器配置参数

如何调优MySQL服务器配置参数

如何调优MySQL服务器配置参数MySQL是一个广泛使用的开源关系型数据库管理系统,被广泛应用于 Web 网站和应用程序的后台数据存储。

为了确保MySQL数据库服务器的高性能和稳定运行,优化和调整MySQL服务器的配置参数是至关重要的。

本文将介绍如何调优MySQL服务器的配置参数,以提高系统的性能和响应速度。

一、了解MySQL服务器的工作机制在开始调优之前,我们需要了解一些关于MySQL服务器的基本工作原理。

MySQL服务器的配置参数可以通过修改f文件来进行调整。

f文件包含了各种参数的配置值,通过修改这些值可以调整MySQL服务器的行为。

二、硬件层面的优化在调优MySQL服务器之前,我们首先需要确保硬件基础设施的合理配置。

以下是一些值得关注的硬件配置参数:1. 内存大小:MySQL是一个内存密集型应用程序,理想情况下,服务器应该具有足够的内存以缓存整个数据库。

增加服务器的内存大小可以显著提高MySQL服务器的性能。

2. 硬盘配置:采用固态硬盘(SSD)可以显著提高MySQL服务器的读写性能。

此外,分离数据和日志,使用RAID技术,可以提高磁盘的可靠性和性能。

3. CPU性能:选择性能强大的多核心CPU,可以提高MySQL服务器的并发处理能力。

三、MySQL配置参数调优接下来,我们将着重介绍如何调整MySQL服务器的配置参数,以提高其性能和响应速度。

1. 缓冲区设置a. innodb_buffer_pool_size:这是InnoDB存储引擎缓存池的大小,通常设置为系统内存的70%~80%。

b. key_buffer_size:这是MyISAM存储引擎的缓冲区大小,通常设置为系统内存的10%。

c. table_open_cache:这是打开表的缓存数量,通常设置为系统可打开文件的最大数量的1/4。

2. 连接和线程设置a. max_connections:这是允许的最大连接数,根据系统的并发访问需求进行设置。

MySQL中的参数配置及调优方法

MySQL中的参数配置及调优方法

MySQL中的参数配置及调优方法MySQL是当前最流行的开源关系型数据库管理系统之一。

它的广泛应用和可灵活配置的特点使得它成为许多企业和个人的首选。

然而,未经优化的MySQL可能会面临性能下降、资源浪费等问题,因此正确配置和调优MySQL参数是至关重要的。

本文将介绍MySQL中的参数配置及调优方法,帮助读者解决数据库性能问题。

一、参数配置在MySQL中,有许多参数可以配置,以满足不同应用的需求。

以下是一些重要参数的简要介绍:1. 缓冲区参数- innodb_buffer_pool_size:InnoDB存储引擎使用的缓冲池大小。

增大该值可以提高读写性能,但会占用更多内存。

- key_buffer_size:MyISAM存储引擎使用的键缓冲区大小。

同样,增大该值可以提高性能,但会占用更多内存。

2. 连接参数- max_connections:允许的最大连接数。

该值应根据应用的并发连接数进行适当调整,以避免资源浪费和连接超时问题。

- wait_timeout:连接空闲后等待关闭的时间。

默认值为28800秒,可以根据具体需求进行调整。

3. 查询缓存参数- query_cache_type:查询缓存类型。

0表示禁用查询缓存,1表示启用,2表示只缓存SQL_NO_CACHE标记的查询结果。

- query_cache_size:查询缓存大小。

指定用于存储查询缓存的内存大小。

二、调优方法在配置参数之前,我们需要先了解数据库当前的性能瓶颈。

可以通过以下几种方式进行分析:1. 使用MySQL自带的性能监控工具MySQL提供了一系列的性能监控工具,如:MySQL Performance Schema、MySQL Enterprise Monitor等。

通过这些工具,可以实时监控MySQL的运行状态,获得性能数据。

2. 使用开源的性能监控工具除了MySQL自带的工具,还有一些开源的性能监控工具可以用于MySQL性能分析。

MySQL性能优化之参数配置

MySQL性能优化之参数配置

MySQL性能优化之参数配置1、⽬的:通过根据服务器⽬前状况,修改Mysql的系统参数,达到合理利⽤服务器现有资源,最⼤合理的提⾼MySQL性能。

2、服务器参数:32G内存、4个CPU,每个CPU 8核。

3、MySQL⽬前安装状况。

MySQL⽬前安装,⽤的是MySQL默认的最⼤⽀持配置。

拷贝的是f.编码已修改为UTF-8.具体修改及安装MySQL,可以参考<<Linux系统上安装MySQL 5.5>>帮助⽂档。

4、修改MySQL配置打开MySQL配置⽂件fvi /etc/f4.1 MySQL⾮缓存参数变量介绍及修改4.1.1修改back_log参数值:由默认的50修改为500.(每个连接256kb,占⽤:125M)back_log=500back_log值指出在MySQL暂时停⽌回答新请求之前的短时间内多少个请求可以被存在堆栈中。

也就是说,如果MySql的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某⼀连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。

将会报:unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时.back_log值不能超过TCP/IP连接的侦听队列的⼤⼩。

若超过则⽆效,查看当前系统的TCP/IP连接的侦听队列的⼤⼩命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog⽬前系统为1024。

对于Linux系统推荐设置为⼩于512的整数。

修改系统内核参数,)/html/64/n-810764.html查看mysql 当前系统默认back_log值,命令:show variables like 'back_log'; 查看当前数量4.1.2修改wait_timeout参数值,由默认的8⼩时,修改为30分钟。

mysql配置详解及设置建议

mysql配置详解及设置建议

f配置详解及设置建议mysqld 程序--目录和文件basedir = path 使用给定目录作为根目录(安装目录).character-sets-dir = path 给出存放着字符集的目录.datadir = path 从给定目录读取数据库文件.pid-file = filename 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进程.socket = filename 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统; 默认设置一般是/var/lib/mysql/mysql.sock文件).在Windows环境下,如果MySQL客户与服务器是通过命名管道进行通信的,--sock选项给出的将是该命名管道的名字(默认设置是MySQL).lower_case_table_name = 1/0 新目录和数据表的名字是否只允许使用小写字母; 这个选项在Windows环境下的默认设置是1(只允许使用小写字母).mysqld程序--语言设置character-sets-server = name 新数据库或数据表的默认字符集.为了与MySQL的早期版本保持兼容,这个字符集也可以用--default-character-set选项给出; 但这个选项已经显得有点过时了.collation-server = name 新数据库或数据表的默认排序方式.lanuage = name 用指定的语言显示出错信息.mysqld程序--通信、网络、信息安全enable-named-pipes 允许Windows 2000/XP环境下的客户和服务器使用命名管道(named pipe)进行通信.这个命名管道的默认名字是MySQL,但可以用--socket选项来改变.local-infile [=0] 允许/禁止使用LOAD DATA LOCAL语句来处理本地文件.myisam-recover [=opt1, opt2, ...] 在启动时自动修复所有受损的MyISAM数据表.这个选项的可取值有4种:DEFAULT、BACKUP、QUICK和FORCE; 它们与myisamchk程序的同名选项作用相同.old-passwords 使用MySQL 3.23和4.0版本中的老算法来加密mysql数据库里的密码(默认使用MySQL 4.1版本开始引入的新加密算法). port = n 为MySQL程序指定一个TCP/IP通信端口(通常是3306端口).safe-user-create 只有在er数据库表上拥有INSERT权限的用户才能使用GRANT命令; 这是一种双保险机制(此用户还必须具备GRANT权限才能执行GRANT命令).shared-memory 允许使用内存(shared memory)进行通信(仅适用于Windows).shared-memory-base-name = name 给共享内存块起一个名字(默认的名字是MySQL).skip-grant-tables 不使用mysql数据库里的信息来进行访问控制(警告:这将允许用户任何用户去修改任何数据库).skip-host-cache 不使用高速缓存区来存放主机名和IP地址的对应关系.skip-name-resovle 不把IP地址解析为主机名; 与访问控制(er数据表)有关的检查全部通过IP地址行进.skip-networking 只允许通过一个套接字文件(Unix/Linux系统)或通过命名管道(Windows系统)进行本地连接,不允许ICP/IP连接; 这提高了安全性,但阻断了来自网络的外部连接和所有的Java客户程序(Java客户即使在本地连接里也使用TCP/IP).user = name mysqld程序在启动后将在给定UNIX/Linux账户下执行; mysqld必须从root账户启动才能在启动后切换到另一个账户下执行; mysqld_safe脚本将默认使用--user=mysql选项来启动mysqld程序.mysqld程序--内存管理、优化、查询缓存区bulk_insert_buffer_size = n 为一次插入多条新记录的INSERT命令分配的缓存区长度(默认设置是8M).key_buffer_size = n 用来存放索引区块的RMA值(默认设置是8M).join_buffer_size = n 在参加JOIN操作的数据列没有索引时为JOIN 操作分配的缓存区长度(默认设置是128K).max_heap_table_size = n HEAP数据表的最大长度(默认设置是16M); 超过这个长度的HEAP数据表将被存入一个临时文件而不是驻留在内存里.max_connections = n MySQL服务器同时处理的数据库连接的最大数量(默认设置是100).query_cache_limit = n 允许临时存放在查询缓存区里的查询结果的最大长度(默认设置是1M).query_cache_size = n 查询缓存区的最大长度(默认设置是0,不开辟查询缓存区).query_cache_type = 0/1/2 查询缓存区的工作模式:0, 禁用查询缓存区; 1,启用查询缓存区(默认设置); 2,"按需分配"模式,只响应SELECT SQL_CACHE命令.read_buffer_size = n 为从数据表顺序读取数据的读操作保留的缓存区的长度(默认设置是128KB); 这个选项的设置值在必要时可以用SQL命令SET SESSION read_buffer_size = n命令加以改变.read_rnd_buffer_size = n 类似于read_buffer_size选项,但针对的是按某种特定顺序(比如使用了ORDER BY子句的查询)输出的查询结果(默认设置是256K).sore_buffer = n 为排序操作分配的缓存区的长度(默认设置是2M); 如果这个缓存区太小,则必须创建一个临时文件来进行排序.table_cache = n 同时打开的数据表的数量(默认设置是64).tmp_table_size = n 临时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件.mysqld程序--日志log [= file] 把所有的连接以及所有的SQL命令记入日志(通用查询日志); 如果没有给出file参数,MySQL将在数据库目录里创建一个hostname.log文件作为这种日志文件(hostname是服务器的主机名).log-slow-queries [= file] 把执行用时超过long_query_time变量值的查询命令记入日志(慢查询日志); 如果没有给出file参数,MySQL将在数据库目录里创建一个hostname-slow.log文件作为这种日志文件(hostname是服务器主机名).long_query_time = n 慢查询的执行用时上限(默认设置是10s).long_queries_not_using_indexs 把慢查询以及执行时没有使用索引的查询命令全都记入日志(其余同--log-slow-queries选项).log-bin [= filename] 把对数据进行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二进制格式记入日志(二进制变更日志,binary update log).这种日志的文件名是filename.n或默认的hostname.n,其中n是一个6位数字的整数(日志文件按顺序编号).log-bin-index = filename 二进制日志功能的索引文件名.在默认情况下,这个索引文件与二进制日志文件的名字相同,但后缀名是.index而不是.nnnnnn.max_binlog_size = n 二进制日志文件的最大长度(默认设置是1GB).在前一个二进制日志文件里的信息量超过这个最大长度之前,MySQL服务器会自动提供一个新的二进制日志文件接续上.binlog-do-db = dbname 只把给定数据库里的变化情况记入二进制日志文件,其他数据库里的变化情况不记载.如果需要记载多个数据库里的变化情况,就必须在配置文件使用多个本选项来设置,每个数据库一行.binlog-ignore-db = dbname 不把给定数据库里的变化情况记入二进制日志文件.sync_binlog = n 每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步).n=1是最安全的做法,但效率最低.默认设置是n=0,意思是由操作系统来负责二进制日志文件的同步工作.log-update [= file] 记载出错情况的日志文件名(出错日志).这种日志功能无法禁用.如果没有给出file参数,MySQL会使用hostname.err作为种日志文件的名字.mysqld程序--镜像(主控镜像服务器)server-id = n 给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能.log-bin = name 启用二进制日志功能.这种日志的文件名是filename.n或默认的hostname.n,其中的n是一个6位数字的整数(日志文件顺序编号).binlog-do/ignore-db = dbname 只把给定数据库里的变化情况记入二进制日志文件/不把给定的数据库里的变化记入二进制日志文件.mysqld程序--镜像(从属镜像服务器)server-id = n 给服务器分配一个唯一的ID编号log-slave-updates 启用从属服务器上的日志功能,使这台计算机可以用来构成一个镜像链(A->B->C).master-host = hostname 主控服务器的主机名或IP地址.如果从属服务器上存在文件(镜像关系定义文件),它将忽略此选项.master-user = replicusername 从属服务器用来连接主控服务器的用户名.如果从属服务器上存在文件,它将忽略此选项.master-password = passwd 从属服务器用来连接主控服务器的密码.如果从属服务器上存在文件,它将忽略此选项.master-port = n 从属服务器用来连接主控服务器的TCP/IP端口(默认设置是3306端口).master-connect-retry = n 如果与主控服务器的连接没有成功,则等待n秒(s)后再进行管理方式(默认设置是60s).如果从属服务器存在文件,它将忽略此选项.master-ssl-xxx = xxx 对主、从服务器之间的SSL通信进行配置.read-only = 0/1 0: 允许从属服务器独立地执行SQL命令(默认设置); 1: 从属服务器只能执行来自主控服务器的SQL命令.read-log-purge = 0/1 1: 把处理完的SQL命令立刻从中继日志文件里删除(默认设置); 0: 不把处理完的SQL命令立刻从中继日志文件里删除.replicate-do-table = dbname.tablename 与--replicate-do-table 选项的含义和用法相同,但数据库和数据库表名字里允许出现通配符"%"(例如: test%.%--对名字以"test"开头的所有数据库里的所以数据库表进行镜像处理).设置建议:对于单台运行的WEB服务器,建议加上:skip-lockingskip-name-resolveskip-networking[mysqld]port = 3306serverid = 1socket = /tmp/mysql.sockskip-locking# 避免MySQL的外部锁定,减少出错几率增强稳定性.skip-name-resolve禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间.但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!back_log = 384指定MySQL可能的连接数量.当MySQL主线程在很短的时间内接收到非常多的连接请求,该参数生效,主线程花费很短的时间检查连接并且启动一个新线程. back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中. 如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小.不同的操作系统在这个队列大小上有它自己的限制. 试图设定back_log高于你的操作系统的限制将是无效的.默认值为50.对于Linux系统推荐设置为小于512的整数.key_buffer_size = 256M# key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能.对于内存在4GB左右的服务器该参数可设置为256M或384M.注意:该参数值设置的过大反而会是服务器整体效率降低!max_allowed_packet = 4Mthread_stack = 256Ktable_cache = 128Ksort_buffer_size = 6M查询排序时所能使用的缓冲区大小.注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB.所以,对于内存在4GB左右的服务器推荐设置为6-8M.read_buffer_size = 4M读查询操作所能使用的缓冲区大小.和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!join_buffer_size = 8M联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!myisam_sort_buffer_size = 64Mtable_cache = 512thread_cache_size = 64query_cache_size = 64M指定MySQL查询缓冲区的大小.可以通过在MySQL控制台执行以下命令观察:代码:# > SHOW VARIABLES LIKE '%query_cache%';# > SHOW STATUS LIKE 'Qcache%';如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况;如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多.tmp_table_size = 256Mmax_connections = 768指定MySQL允许的最大连接进程数。

MySQL内存参数配置与性能调优

MySQL内存参数配置与性能调优

MySQL内存参数配置与性能调优MySQL是目前最常用的开源数据库管理系统之一,许多网站和应用程序都依赖于它来存储和管理数据。

为了保证MySQL的高性能和稳定性,合理的内存参数配置和性能调优是非常重要的。

本文将探讨MySQL的内存参数配置和性能调优的一些关键方面,帮助读者理解并优化MySQL的性能。

1. 理解MySQL的内存架构在开始配置和调优MySQL的内存参数之前,我们首先需要理解MySQL的内存架构。

MySQL的内存架构主要包括全局内存池、连接线程内存和缓冲池。

全局内存池用于存储全局变量和系统参数,连接线程内存用于存储每个客户端连接的相关信息,缓冲池则用于存储数据库表和索引的数据。

2. 配置全局内存池全局内存池的大小对于MySQL的性能有着重要的影响。

在MySQL的配置文件f中可以通过参数配置全局内存池的大小。

常用的参数包括:key_buffer_size用于指定索引缓冲区的大小,它的值应该根据实际情况来确定;sort_buffer_size用于指定用于排序的缓冲区的大小,在执行大量排序操作时需要适当增加这个值;join_buffer_size用于指定连接操作时的缓冲区大小,也需要根据实际情况来确定。

3. 配置连接线程内存连接线程内存的大小对于并发连接数和每个连接的内存占用有着直接的影响。

在MySQL的配置文件中,可以通过参数配置连接线程内存的大小。

常用的参数包括:max_connections用于指定最大并发连接数,需要根据实际情况来确定;thread_cache_size用于指定连接线程的缓存大小,如果系统中的连接数较多,可以适当增加这个值来提高性能。

4. 配置缓冲池缓冲池是MySQL中内存使用最频繁的部分,也是性能调优的关键。

在MySQL的配置文件中,可以通过参数配置缓冲池的大小。

常用的参数包括:innodb_buffer_pool_size用于指定InnoDB存储引擎的缓冲池大小,根据系统的可用内存来配置,通常占用总内存的70%-80%;key_buffer_size用于指定MyISAM存储引擎的缓冲池大小,根据实际情况来确定。

MySQL中的内存调优和IO优化方法

MySQL中的内存调优和IO优化方法

MySQL中的内存调优和IO优化方法随着数据量的增加,数据库的性能优化变得越来越重要。

在MySQL中,内存和IO是两个关键的性能瓶颈。

本文将介绍MySQL中的内存调优和IO优化方法,帮助您更好地优化数据库性能。

一、MySQL中的内存调优1. 设定合理的缓冲池大小MySQL的缓冲池使用在InnoDB存储引擎中,用于存放数据和索引的页面。

缓冲池的大小决定了可以缓存的数据量,从而影响查询的性能。

一般来说,缓冲池大小应该设置为系统内存的70-80%。

可以通过修改配置文件(f)中的参数innodb_buffer_pool_size来调整缓冲池大小。

2. 调整查询缓存查询缓存是MySQL中用于缓存查询结果的功能。

尽管查询缓存可以提高一些相同查询的性能,但在高并发的情况下,查询缓存的效果可能不佳。

可以通过修改配置文件中的参数query_cache_size和query_cache_type来调整查询缓存的大小和使用策略,以适应不同的应用场景。

3. 优化临时表的内存使用当执行查询或排序操作时,MySQL可能会在内存中创建临时表,临时表的内存使用对性能有很大影响。

可以通过修改配置文件中的参数tmp_table_size和max_heap_table_size来调整临时表的内存使用。

尽量将临时表的操作放到内存中,避免使用磁盘临时表。

二、MySQL中的IO优化1. 提高磁盘性能磁盘是数据库中最慢的组件之一,提高磁盘性能可以显著提升数据库的响应速度。

以下是一些提高磁盘性能的方法:- 使用RAID技术:RAID可以通过将数据分布在多个磁盘上来提高读写性能和数据冗余能力。

可以选择适合的RAID级别来满足性能和容错要求。

- 使用高速硬盘:使用SSD(固态硬盘)或高转速的SAS硬盘可以显著提升磁盘性能。

- 分区和格式化硬盘:合理分区和格式化硬盘可以提高磁盘的读写性能。

2. 使用合适的存储引擎MySQL支持多种存储引擎,每种引擎都有其特点和适用场景。

MySQL中的内存优化和缓存配置技巧

MySQL中的内存优化和缓存配置技巧

MySQL中的内存优化和缓存配置技巧MySQL是一种常用的关系型数据库管理系统,被广泛应用于各种网站和应用程序中。

MySQL的性能对于网站和应用程序的响应速度和用户体验至关重要,而内存优化和缓存配置则是提升MySQL性能的关键因素之一。

本文将介绍MySQL 中的内存优化和缓存配置技巧,帮助读者更好地理解和应用这些技术。

一、MySQL内存优化技巧MySQL中的内存优化可以通过调整和配置不同的内存参数来实现。

以下是一些常用的内存优化技巧:1. 增加innodb_buffer_pool_size: InnoDB存储引擎是MySQL中最常用的存储引擎之一,它通过使用内存缓存数据来提高性能。

通过增加innodb_buffer_pool_size参数的值可以提高InnoDB的内存缓存空间,从而加快查询速度。

但需要注意的是,设置过大的值可能导致系统内存不足,反而降低性能。

2. 控制sort_buffer_size和join_buffer_size:sort_buffer_size和join_buffer_size 参数用于控制排序和连接时的内存缓冲区大小。

合理设置这两个参数的值可以提升排序和连接操作的性能,避免使用临时文件进行排序和连接,从而提高查询效率。

3. 调整max_connections:max_connections参数用于控制数据库同时连接的最大数量。

合理设置此参数的值可以避免因过多的连接而导致内存消耗过大,从而提高数据库性能。

但是需要权衡系统资源和并发连接数的需求,避免设置过大导致系统资源不足。

4. 配置tmp_table_size和max_heap_table_size:tmp_table_size和max_heap_table_size参数用于控制临时表的内存缓存大小。

临时表在排序和分组操作中经常被使用,通过增加这两个参数的值可以减少使用磁盘临时表的频率,提高性能。

二、MySQL缓存配置技巧MySQL提供了多种缓存机制来提升查询效率和性能。

MySQL优化之my.conf配置详解

MySQL优化之my.conf配置详解

MySQL优化之my.conf配置详解[client]port = 3306socket = /tmp/mysql.sock[mysqld]###############################基础设置######################################Mysql服务的唯⼀编号每个mysql服务Id需唯⼀server-id = 1#服务端⼝号默认3306port = 3306#mysql安装根⽬录basedir = /opt/mysql#mysql数据⽂件所在位置datadir = /opt/mysql/data#临时⽬录⽐如load data infile会⽤到tmpdir = /tmp#设置socke⽂件所在⽬录socket = /tmp/mysql.sock#主要⽤于MyISAM存储引擎,如果多台服务器连接⼀个数据库则建议注释下⾯内容skip-external-locking#只能⽤IP地址检查客户端的登录,不⽤主机名skip_name_resolve = 1#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)transaction_isolation = READ-COMMITTED#数据库默认字符集,主流字符集⽀持⼀些特殊表情符号(特殊表情符占⽤4个字节)character-set-server = utf8mb4#数据库字符集对应⼀些排序等规则,注意要和character-set-server对应collation-server = utf8mb4_general_ci#设置client连接mysql时的字符集,防⽌乱码init_connect=‘SET NAMES utf8mb4‘#是否对sql语句⼤⼩写敏感,1表⽰不敏感lower_case_table_names = 1#最⼤连接数max_connections = 400#最⼤错误连接数max_connect_errors = 1000#TIMESTAMP如果没有显⽰声明NOT NULL,允许NULL值explicit_defaults_for_timestamp = true#SQL数据包发送的⼤⼩,如果有BLOB对象建议修改成1Gmax_allowed_packet = 128M#MySQL连接闲置超过⼀定时间后(单位:秒)将会被强⾏关闭#MySQL默认的wait_timeout 值为8个⼩时, interactive_timeout参数需要同时配置才能⽣效interactive_timeout = 1800wait_timeout = 1800#内部内存临时表的最⼤值,设置成128M。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

mysql服务性能优化—f配置说明详解(16G内存)MYSQL服务器f配置文档详解硬件:内存16G[client]port = 3306socket = /data/3306/mysql.sock[mysql]no-auto-rehash[mysqld]user = mysqlport = 3306socket = /data/3306/mysql.sockbasedir = /usr/local/mysqldatadir = /data/3306/dataopen_files_limit = 10240back_log = 600#在MYSQL暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中。

如果系统在短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的监听队列的大小。

默认值50。

max_connections = 3000#MySQL允许最大的进程连接数,如果经常出现Too Many Connections的错误提示,则需要增大此值。

max_connect_errors = 6000#设置每个主机的连接请求异常中断的最大次数,当超过该次数,MYSQL服务器将禁止host 的连接请求,直到mysql服务器重启或通过flush hosts命令清空此host的相关信息。

table_cache = 614#指示表调整缓冲区大小。

# table_cache 参数设置表高速缓存的数目。

每个连接进来,都会至少打开一个表缓存。

#因此, table_cache 的大小应与 max_connections 的设置有关。

例如,对于 200 个#并行运行的连接,应该让表的缓存至少有 200 × N ,这里 N 是应用可以执行的查询#的一个联接中表的最大数量。

此外,还需要为临时表和文件保留一些额外的文件描述符。

# 当 Mysql 访问一个表时,如果该表在缓存中已经被打开,则可以直接访问缓存;如果#还没有被缓存,但是在 Mysql 表缓冲区中还有空间,那么这个表就被打开并放入表缓#冲区;如果表缓存满了,则会按照一定的规则将当前未用的表释放,或者临时扩大表缓存来存放,使用表缓存的好处是可以更快速地访问表中的内容。

执行 flush tables 会#清空缓存的内容。

一般来说,可以通过查看数据库运行峰值时间的状态值 Open_tables #和 Opened_tables ,判断是否需要增加 table_cache 的值(其中 open_tables 是当#前打开的表的数量, Opened_tables 则是已经打开的表的数量)。

即如果open_tables接近table_cache的时候,并且Opened_tables这个值在逐步增加,那就要考虑增加这个#值的大小了。

还有就是Table_locks_waited比较高的时候,也需要增加table_cache。

external-locking = FALSE#使用–skip-external-locking MySQL选项以避免外部锁定。

该选项默认开启max_allowed_packet = 32M#设置在网络传输中一次消息传输量的最大值。

系统默认值为1MB,最大值是1GB,必须设置1024的倍数。

sort_buffer_size = 2M# Sort_Buffer_Size 是一个connection级参数,在每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存。

#Sort_Buffer_Size 并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源。

例如:500个连接将会消耗 500*sort_buffer_size(8M)=4G内存#Sort_Buffer_Size 超过2KB的时候,就会使用mmap() 而不是 malloc() 来进行内存分配,导致效率降低。

#技术导读 /2011/02/16/mysql-sort_buffer_size/#dev-doc: /doc/refman/5.5/en/server-parameters.html#explain select*from table where order limit;出现filesort#属重点优化参数join_buffer_size = 2M#用于表间关联缓存的大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。

thread_cache_size = 300# 服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。

设置规则如下:1GB 内存配置为8,2GB配置为16,3GB配置为32,4GB或更高内存,可配置更大。

thread_concurrency = 8# 设置thread_concurrency的值的正确与否, 对mysql的性能影响很大, 在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值, 会导致mysql不能充分利用多cpu(或多核), 出现同一时刻只能一个cpu(或核)在工作的情况。

thread_concurrency应设为CPU核数的2倍. 比如有一个双核的CPU, 那么thread_concurrency的应该为4; 2个双核的cpu, thread_concurrency的值应为8#属重点优化参数query_cache_size = 64M## 对于使用MySQL的用户,对于这个变量大家一定不会陌生。

前几年的MyISAM引擎优化中,这个参数也是一个重要的优化参数。

但随着发展,这个参数也爆露出来一些问题。

机器的内存越来越大,人们也都习惯性的把以前有用的参数分配的值越来越大。

这个参数加大后也引发了一系列问题。

我们首先分析一下 query_cache_size的工作原理:一个SELECT查询在DB中工作后,DB会把该语句缓存下来,当同样的一个SQL再次来到DB里调用时,DB在该表没发生变化的情况下把结果从缓存中返回给Client。

这里有一个关建点,就是DB在利用Query_cache工作时,要求该语句涉及的表在这段时间内没有发生变更。

那如果该表在发生变更时,Query_cache里的数据又怎么处理呢?首先要把Query_cache和该表相关的语句全部置为失效,然后在写入更新。

那么如果Query_cache非常大,该表的查询结构又比较多,查询语句失效也慢,一个更新或是Insert就会很慢,这样看到的就是Update或是Insert怎么这么慢了。

所以在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。

而且在高并发,写入量大的系统,建议把该功能禁掉。

#重点优化参数(主库增删改-MyISAM)query_cache_limit = 4M#指定单个查询能够使用的缓冲区大小,缺省为1Mquery_cache_min_res_unit = 2k#默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费#查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%#如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。

#查询缓存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%#查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。

#查询缓存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%default-storage-engine = MyISAM#default_table_type = InnoDBthread_stack = 192K#设置MYSQL每个线程的堆栈大小,默认值足够大,可满足普通操作。

可设置范围为128K 至4GB,默认为192KB。

transaction_isolation = READ-COMMITTED# 设定默认的事务隔离级别.可用的级别如下:# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE# 1.READ UNCOMMITTED-读未提交2.READ COMMITTE-读已提交3.REPEATABLE READ -可重复读4.SERIALIZABLE -串行tmp_table_size = 256M# tmp_table_size 的默认大小是 32M。

如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值。

如果超过该值,则会将临时表写入磁盘。

max_heap_table_size = 256Mlong_query_time = 2log_long_formatlog-slow-queries=/data/3306/slow-log.log#log-bin = /data/3306/mysql-binlog-binbinlog_cache_size = 4Mmax_binlog_cache_size = 8Mmax_binlog_size = 512Mexpire_logs_days = 7key_buffer_size = 2048M#批定用于索引的缓冲区大小,增加它可以得到更好的索引处理性能,对于内存在4GB左右的服务器来说,该参数可设置为256MB或384MB。

read_buffer_size = 1M# MySql读入缓冲区大小。

对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。

read_buffer_size变量控制这一缓冲区的大小。

相关文档
最新文档