下面列出了对性能优化影响较大的主要变量,主要分为连接请求的变量和缓冲区变量。
1. 连接请求的变量:
1) max_connections
MySQL的最大连接数,增加该值增加mysqld要求的文件描述符的数量。如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。
数值过小会经常出现ERROR1040:Toomanyconnections错误,可以过’conn%’通配符查看当前状态的连接数量,以定夺该值的大小。
showvariableslike‘max_connections’最大连接数
show statuslike‘max_used_connections’响应的连接数
如下:
mysql>showvariableslike‘max_connections‘;
+———————–+——-+
|Variable_name |Value|
+———————–+——-+
|max_connections|256 |
+———————–+——-+
mysql>showstatuslike‘max%connections‘;
+———————–+——-+
|Variable_name |Value|
+—————————-+——-+
|max_used_connections|256|
+—————————-+——-+
max_used_connections/max_connections*100%(理想值≈85%)
如果max_used_connections跟max_connections相同那么就是max_connections设置过低或者超过服务器负载上限了,低于10%则设置过大。
2) back_log
MySQL能暂存的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用。如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
back_log值指出在MySQL暂时停止回答新请求之前的短时间内有多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。
当观察你主机进程列表(mysql>showfullprocesslist),发现大量264084|unauthenticateduser|xxx.xxx.xxx.xxx|NULL|Connect|NULL|login|NULL的待连接进程时,就要加大back_log的值了。
默认数值是50,可调优为128,对于Linux系统设置范围为小于512的整数。
3) interactive_timeout
一个交互连接在被服务器在关闭前等待行动的秒数。一个交互的客户被定义为对mysql_real_connect()使用CLIENT_INTERACTIVE选项的客户。
默认数值是28800,可调优为7200。
2. 缓冲区变量
全局缓冲:
4) key_buffer_size
key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads/key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOWSTATUSLIKE‘key_read%’获得)。
key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。
举例如下:
mysql>showvariableslike‘key_buffer_size‘;
+——————-+————+
|Variable_name|Value |
+———————+————+
|key_buffer_size|536870912|
+———————-+————+
key_buffer_size为512MB,我们再看一下key_buffer_size的使用情况:
mysql>showglobalstatuslike‘key_read%‘;
+————————+————-+
|Variable_name |Value |
+————————+————-+
|Key_read_requests|27813678764|
|Key_reads | 6798830 |
+————————+————-+
一共有27813678764个索引读取请求,有6798830个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:
key_cache_miss_rate=Key_reads/Key_read_requests*100%,设置在1/1000左右较好
默认配置数值是8388600(8M),主机有4GB内存,可以调优值为268435456(256MB)。
5) query_cache_size
使用查询缓冲,MySQL将查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。
通过检查状态值Qcache_*,可以知道query_cache_size设置是否合理(上述状态值可以使用SHOWSTATUSLIKE‘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。
举例如下:
mysql>showglobalstatuslike‘qcache%‘;
+——————————-+—————–+
|Variable_name |Value |
+——————————-+—————–+
|Qcache_free_blocks |22756 |
|Qcache_free_memory |76764704 |
|Qcache_hits |213028692|
|Qcache_inserts |208894227 |
|Qcache_lowmem_prunes |4010916 |
|Qcache_not_cached |13385031 |
|Qcache_queries_in_cache|43560 |
|Qcache_total_blocks |111212 |
+——————————-+—————–+
mysql>showvariableslike‘query_cache%‘;
+————————————–+————–+
|Variable_name |Value |
+————————————–+———–+
|query_cache_limit |2097152 |
|query_cache_min_res_unit |4096 |
|query_cache_size |203423744|
|query_cache_type |ON |
|query_cache_wlock_invalidate|OFF |
+————————————–+—————+
查询缓存碎片率=Qcache_free_blocks/Qcache_total_blocks*100%
如果查询缓存碎片率超过20%,可以用FLUSHQUERYCACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。
查询缓存利用率=(query_cache_size–Qcache_free_memory)/query_cache_size*100%
查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%上述就是数据库技术:MySQL 配置优化(多个参数)分享的全部内容,如果对大家有所用处且需要了解更多关于mysql数据库学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/dtteaching/911928.html