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。

MySQL配置参数优化

MySQL配置参数优化

MySQL配置参数优化MySQL 配置参数优化1.修改back_log参数值:由默认的50修改为500 back_log=500back_log值指出在MySQL暂时停⽌回答新请求之前的短时间内多少个请求可以被存在堆栈中。

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

查看mysql 当前系统默认back_log值,命令:show variables like 'back_log’;2.修改wait_timeout参数值,由默认的8⼩时,修改为1或者半⼩时。

减少wait的连接数,如果系统使⽤的⼈少可以调⼤⼀点wait_timeout=1800(单位为妙)show variables like 'wait_timeout';3.修改max_connections参数值,根据系统需要调整show variables like 'max_connections';4.修改max_user_connections值,由默认的0,修改为800,max_user_connections=800针对某⼀个账号的所有客户端并⾏连接到MYSQL服务的最⼤并⾏连接数。

简单说是指同⼀个账号能够同时连接到mysql服务的最⼤连接数。

设置为0表⽰不限制。

查看max_user_connections值show variables like 'max_user_connections';5.修改thread_concurrency值,由⽬前默认的8,修改为64 thread_concurrency=64thread_concurrency应设为CPU核数的2倍.⽐如有1个双核的CPU, 那thread_concurrency 的应该为4;2个双核的cpu, thread_concurrency的值应为8.show variables like 'thread_concurrency';6.设置MySQL的默认存储引擎default-storage-enginedefault-storage-engine= InnoDB7.修改max_connect_errors为100这个参数负责阻⽌客户端尝试暴⼒破解密码,当某台主机错误连接次数达到该值时,该主机⽆法再尝试登陆。

mysql性能优化

mysql性能优化

mysql性能优化1.配置优化MySQL 5.7版本默认的最大连接数是151个,这个值可以再f中去修改。

2.SQL的执行优化慢SQL的定位和排查,我们可以通过慢查询日志和慢查询日志工具分析,得到有问题的SQL列表执行计划分析,针对慢SQL我们可以使用关键字explain来去查看当前sql的执行计划,可重点关注type,key,rows,filterd等字段,从而去定位该SQL执行慢的根本原因,再去有的放矢的进行优化使用show profile工具,这个工具是MySQL提供的可以用来分析当前会话中SQL语句资源消耗情况的工具,可以用于SQL调优的测量,在当前会话中,默认情况下,show profile是关闭状态,打开以后会保存,最近15次的运行结果,针对运行慢的SQL通过profile 工具进行详细分析,可以得到SQL执行过程中所有资源的开销情况,比如io开销,cpu开销,内存开销3. 架构设计层面的优化MySQL是一个磁盘IO访问,非常频繁的关系型数据库,在高并发和高性能的场景中,MySQL数据库必然会承受巨大的并发压力,在此时我们的优化的方式,主要可以分为几个部分:(1)第一个是搭建MySQL主从集群,单个MySQL服务容易去导致单点故障,一旦服务宕机,将会导致依赖MySQL数据库的应用,全部无法响应,主从集群或者主主集群,都可以去保证服务的高可用性。

(2)读写分离设计,在读多写少的场景中,通过读写分离的方案,可以去避免读写冲突,导致的性能问题。

(3)引入分库分表的机制,通过分库可以降低单个服务器一个IO压力。

通过分表的方式,降低单表数据量,从而去提升sql的查询效率。

(4)针对热点数据,可以引入更为高效的分布式数据库,如Redis、MongoDB等,他们可以很好的减轻MySQL的访问压力,同时还能提升数据的检索性能4. MySQL程序配置优化MYSQL是一个经过互联网大厂检验过的生产级别的成熟数据库,对于MySQL数据库本身的优化,一般可以通过MySQL配置文件f 来完成。

MySQL配置文件mysql.ini参数详解、MySQL性能优化

MySQL配置文件mysql.ini参数详解、MySQL性能优化

MySQL配置⽂件mysql.ini参数详解、MySQL性能优化my.ini(Linux系统下是f),当mysql服务器启动时它会读取这个⽂件,设置相关的运⾏环境参数。

my.ini分为两块:Client Section和Server Section。

Client Section⽤来配置MySQL客户端参数。

要查看配置参数可以⽤下⾯的命令:show variables like '%innodb%'; # 查看innodb相关配置参数show status like '%innodb%'; # 查看innodb相关的运⾏时参数(⽐如当前正在打开的表的数量,当前已经打开的表的数量)show global status like 'open%tables'; # 查看全局的运⾏时参数,加上global是对当前mysql服务器中运⾏的所有实例进⾏统计。

不加global则只对当前数据库实例进⾏统计。

1、Client Section[client]port = 3306 # 设置mysql客户端连接服务端时默认使⽤的端⼝[mysql]default-character-set=utf8 # 设置mysql客户端默认字符集2、Server Section[mysqld]port=3306 # mysql服务端默认监听(listen on)的TCP/IP端⼝basedir="C:/Program Files/MySQL/My 5.5/" # 基准路径,其他路径都相对于这个路径datadir="C:/Program Files/MySQL/MySQL Server 5.5/Data" # ⽂件所在⽬录character-set-server=latin1 # 服务端使⽤的字符集默认为8⽐特的latin1字符集default-storage-engine=INNODB # 创建新表时将使⽤的默认存储引擎sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" # SQL模式为strict模式max_connections=100 # mysql服务器⽀持的最⼤并发连接数(⽤户数)。

MySQL中的内存优化和缓存调整技巧

MySQL中的内存优化和缓存调整技巧

MySQL中的内存优化和缓存调整技巧MySQL是一种开源的关系型数据库管理系统,被广泛用于Web应用程序和企业级应用程序的后端。

作为一种常用的数据库系统,MySQL的性能优化对于提高系统的整体效率和响应速度至关重要。

其中,内存优化和缓存调整是提升MySQL性能的关键技巧。

本文将重点探讨MySQL中的内存优化和缓存调整技巧,以帮助开发者更好地配置数据库,提升数据库性能。

一、MySQL内存管理在MySQL中,内存管理对于数据库的性能至关重要。

正确配置内存参数可以有效减少磁盘I/O操作,提高数据库访问速度。

下面将介绍几种常用的内存优化技巧。

1. 提高缓冲池大小缓冲池(Buffer Pool)是MySQL中最重要的内存组件之一,它存储了热数据页,用于提高查询性能。

可以通过增加缓冲池的大小来提高数据库的性能。

在MySQL配置文件(f)中,可以使用innodb_buffer_pool_size参数来设置缓冲池的大小。

一般建议将缓冲池设置为系统可用内存的70-80%。

2. 调整排序和临时表内存MySQL在执行排序和创建临时表时需要使用额外的内存。

可以通过调整sort_buffer_size和tmp_table_size参数来优化内存使用。

sort_buffer_size参数控制了排序操作所使用的内存大小,而tmp_table_size参数则控制了创建临时表时所使用的内存大小。

合理设置这两个参数可以减少磁盘临时表的使用,提高查询效率。

3. 优化查询缓存MySQL提供了查询缓存机制用于缓存查询的结果集。

查询缓存可以减少对数据表的查询次数,但对于高写入负载的数据库来说,查询缓存可能会导致性能下降。

可以通过修改参数query_cache_type和query_cache_size来调整查询缓存的行为和大小。

合理设置这两个参数可以提升数据库的读取性能。

二、MySQL缓存调整技巧除了内存优化之外,MySQL还提供了其他的缓存调整技巧来提高数据库性能。

mysql服务器硬件配置标准

mysql服务器硬件配置标准

mysql服务器硬件配置标准
1. CPU:MySQL对CPU的要求比较高,因为它需要大量的运算和计算。

因此,建议选择多核心的CPU,如4核/8线程的CPU,以提高MySQL 的并发处理能力。

2. 内存:MySQL使用内存来缓存数据和索引,因此内存大小对MySQL 的性能影响很大。

建议选择大容量的内存,一般至少需要8GB以上,如果数据量较大,建议选择16GB或更多。

noDBnoDB适合大规模的数据存储,建议使用SSD硬盘来提高读写速度;MyISAM适合小型网站或应用,建议使用机械硬盘。

4. 网络:MySQL服务器的网络带宽也是影响性能的重要因素。

建议选择高速稳定的网络,如千兆以太网。

yf中有很多参数可以调整,如缓存大小、并发连接数、查询缓存等。

根据实际情况进行调整,以提高MySQL的性能。

2. 索引优化:索引是MySQL查询的关键,合理的索引可以大大提高查询速度。

建议对常用的查询语句进行优化,添加合适的索引。

3. 数据库优化:定期清理无用的数据、压缩表、优化表结构等,可以减少MySQL的负担,提高性能。

cached、Redis等。

5. 负载均衡:如果MySQL服务器负载较高,可以考虑使用负载均衡技术,将请求分发到多个MySQL服务器上,以提高并发处理能力。

my_cnf配置使用说明

my_cnf配置使用说明

linux、unxi下的主配文件f,windows下为my.ini调整MySQL运行参数,修改/etc/f文件调整mysql运行参数重启MySQL后生效。

mysqld程序--目录和文件basedir =path # 使用给定目录作为根目录(安装目录)。

datadir =path # 从给定目录读取数据库文件。

pid-file =filename # 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统);[mysqld]socket =/tmp/mysql.sock #为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(Linux下默认是/var/lib/mysql/mysql.sock文件)port =3306 # 指定MsSQL侦听的端口key_buffer =384M # key_buffer(键高速缓存)是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写)。

索引块是缓冲的并且被所有的线程共享,key_buffer的大小视内存大小而定。

table_cache =512 # 为所有线程可以打开表的总数量。

增加该值能增加mysqld要求的文件描述符的数量。

可以避免频繁的打开数据表产生的开销sort_buffer_size =2M # 每个需要进行排序的线程分配该大小的一个缓冲区。

增加这值加速ORDER BY或GROUP BY操作。

注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100×6=600MBread_buffer_size =2M # 读查询操作所能使用的缓冲区大小。

和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。

query_cache_size =32M # 指定MySQL查询结果缓冲区的大小read_rnd_buffer_size = 8M # 改参数在使用行指针排序之后,随机读用的。

MySQL连接池的配置与性能优化方法

MySQL连接池的配置与性能优化方法

MySQL连接池的配置与性能优化方法MySQL是一种常用的开源关系型数据库,广泛应用于各类应用系统中。

在高并发的场景下,为了提高数据库的性能和稳定性,使用连接池来管理数据库连接是非常重要的。

连接池是一种维护数据库连接的技术,其核心思想是将数据库连接缓存在内存中,从而避免频繁地创建和销毁连接,减少了系统开销,提高了数据库的并发性能。

本文将介绍MySQL连接池的配置和性能优化方法。

一、连接池的配置在使用MySQL连接池之前,我们首先需要配置连接池的参数,以满足业务需求和系统性能要求。

下面是一些常用的配置参数:1. 最大连接数(maxConnections):设置连接池的最大连接数,即连接池中最多能够同时存在的连接数。

该参数决定了系统能够同时处理的并发请求的数量。

当并发请求超过最大连接数时,新的请求将需要等待空闲连接释放后才能处理。

2. 初始连接数(initialConnections):设置连接池初始化时的连接数。

连接池初始化时将创建指定数量的连接,并放入连接池中。

3. 最小空闲连接数(minIdleConnections):设置连接池中保持的最小空闲连接数。

连接池中的连接数量将会自动调整到最小空闲连接数。

4. 最大空闲连接数(maxIdleConnections):设置连接池中保持的最大空闲连接数。

当连接池中的空闲连接数量超过最大空闲连接数时,多余的连接将会被销毁。

5. 连接超时时间(connectionTimeout):设置连接池获取连接的超时时间。

当连接池中没有可用连接且达到最大连接数时,新的请求将等待一段时间后超时。

6. 空闲连接超时时间(idleTimeout):设置连接在连接池中保持的最大空闲时间。

当连接在连接池中超过了空闲超时时间,则会被销毁。

7. 连接有效性检测(validateConnection):设置连接池中连接的有效性检测参数。

开启连接有效性检测可以避免使用已经关闭或者无效的连接。

MySQL中的服务器参数配置和调整方法

MySQL中的服务器参数配置和调整方法

MySQL中的服务器参数配置和调整方法1.引言MySQL是一种常用的关系型数据库管理系统,被广泛用于互联网应用和企业级应用中。

作为数据库管理员或开发人员,了解和掌握MySQL的服务器参数配置和调整方法是非常重要的。

本文将介绍MySQL中的服务器参数配置和调整方法,帮助读者更好地优化数据库的性能和稳定性。

2.服务器参数配置2.1 MySQL配置文件MySQL的服务器参数配置主要通过修改配置文件my.ini(Windows环境)或f(Linux环境)来实现。

这些配置文件保存了MySQL服务器的各类参数设置,包括内存使用、并发连接、缓存设置等。

2.2 内存设置MySQL的内存使用对服务器性能至关重要。

可以通过配置innodb_buffer_pool_size参数来设置InnoDB存储引擎使用的缓冲池大小,该参数的合理设置会提高IO操作的效率和数据库的整体性能。

另外,可以通过配置key_buffer_size参数设置MyISAM存储引擎使用的索引缓冲区大小,该参数的调整会影响到索引读取的性能。

2.3 并发连接设置在高并发的环境下,正确设置并发连接数是非常重要的。

通过配置max_connections参数可以限制并发连接数,防止MySQL服务器因连接数过多而崩溃。

此外,可以通过调整thread_cache_size参数来重用线程,减少线程创建和销毁的开销。

3.服务器参数调整方法3.1 监控工具在进行MySQL服务器参数调整之前,使用监控工具监测数据库的性能和负载情况是非常必要的。

常用的监控工具包括Percona Toolkit、MySQL Enterprise Monitor等,它们可以提供实时的性能指标和监控报告。

3.2 使用EXPLAIN命令MySQL提供了EXPLAIN命令,可以帮助我们分析SQL语句的执行计划及性能瓶颈。

通过分析查询语句的执行计划,可以发现慢查询的原因,从而进行相应的优化。

3.3 全局变量调整MySQL中有许多全局变量可以用来调整数据库的性能和行为。

MySQL中的连接池配置与性能调优

MySQL中的连接池配置与性能调优

MySQL中的连接池配置与性能调优在Web应用中,数据库连接是非常关键的一环。

每次请求数据库都要建立连接,如果连接的建立和释放频繁,将会成为性能瓶颈。

为了解决这个问题,我们可以使用连接池来管理数据库连接,从而提高应用的性能。

在本文中,我们将探讨MySQL中的连接池配置与性能调优。

一、什么是连接池数据库连接池是一种用于管理数据库连接的技术。

它通过预先创建一定数量的数据库连接并将其保存在内存中,当应用程序需要与数据库交互时,直接从连接池中获取一个空闲的连接,使用完毕后将其归还给连接池,而不是每次都重新创建和释放连接。

这样可以减少连接的建立和释放开销,提高数据库访问的效率。

二、MySQL的连接池配置在MySQL中,我们可以通过配置文件来设置连接池的相关参数。

在f文件中,可以进行如下配置:1. max_connections:用于设置连接池中最大连接数。

默认值为151。

如果应用程序中的并发连接数超过了该值,将会被拒绝连接。

需要根据应用程序的并发需求进行适当调整。

2. wait_timeout:用于设置连接的空闲超时时间。

当连接在指定的时间内没有被使用,则会被自动释放。

默认值为28800秒(8小时)。

可以根据应用程序的需求来调整该值,避免连接被过早释放。

3. interactive_timeout:用于设置连接的交互超时时间。

该参数表示在指定的时间内,如果客户端没有向服务器发送请求,则连接将会被关闭。

默认值为28800秒(8小时)。

根据应用程序的需求,可以适当调整该值。

4. max_user_connections:用于设置每个用户能够同时打开的连接数。

默认值为0,表示无限制。

可以根据应用程序的需求来设置该值,以避免一个用户占用过多的连接资源。

5. thread_cache_size:用于设置线程缓存的大小。

当新的连接请求到来时,如果连接池中有可用的空闲线程,则直接使用该线程,而不是创建新线程。

默认值为0,表示不缓存连接。

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

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

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 表缓冲区中还有空间,那么这个表就被打开并放入表缓#冲区;如果表缓存满了,则会按照一定的规则将当前未用的表释放,或者临时扩大表缓存来存放,使用表缓存的好处是可以更快速地访问表中的内容。

  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变量控制这一缓冲区的大小。

相关文档
最新文档