一些配置参数的记录

通用配置

一般不需要更改mysql配置。

[mysqld]
# basic 
datadir     = /var/lib/mysql    #设置数据存储位置
socket      = /var/run/mysqld/mysqld.sock
pid-file    = /var/run/mysqld/mysqld.pid
user        = mysql
port        = 3306

# innodb
# 数据缓冲区buffer pool大小,建议使用物理内存的 75%
innodb_buffer_pool_size = 2G
# 日志文件
innodb_log_file_size    = 1G
innodb_log_buffer_size  = 64M
# 这个配置项会决定 InnoDB 是使用共享表空间(0) 来存储数据和索引,还是为每个表使用一个单独的 .ibd 文件(1)。
innodb_file_per_table   = 1
# 这个参数控制着innodb数据文件及redo log的打开、刷写模式 有三个值:fdatasync(默认),O_DSYNC,O_DIRECT(不经过系统缓存直接存入磁盘)
innodb_flush_method     = O_DIRECT
# 事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败,默认50s
innodb_lock_wait_timeout = 30
# 开启后会将所有的死锁记录到error_log中
innodb_print_all_deadlocks = 1
innodb_sort_buffer_size = 16M 

# myisam
# myisam索引缓冲,对myisam很重要,若主要使用myisam,推荐设置可用RAM的20%-50%
key_buffer_size = <value>

# log 
log_error = /var/log/mysql/error.log
# 开启慢查询日志
slow_query_log = 1
# 超出次设定值的SQL即被记录到慢查询日志
long_query_time = 6
slow_query_log_file = /var/log/docker_log/mysql/slow.log

# other
# MySQL在完成某些join(连接)需求的时候,为了减少参与join的“被驱动表”的读取次数以提高性能,需要使用到join buffer来协助完成join操作
# 当join buffer 太小,MySQL不会将该buffer存入磁盘文件而是先将join buffer中的结果与需求join的表进行操作,然后清空join buffer中的数据,继续将剩余的结果集写入次buffer中
join_buffer_size    = 128M
tmp_table_size      = 64M
tmpdir              = /tmp
# 关闭缓存
query_cache_type    = 0
query_cache_size    = 0
# utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 
# 采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题
character_set_server = utf8mb4
# 设置最大连接(用户)数,默认值为100
max_connections = 800
# Thread_Cache 线程池中存放的最大连接线程数,1G —> 8,2G —> 16,3G —> 32,>3G —> 64
thread_cache_size = <value>
# 表高速缓存的大小
table_cache = <value>
# 事务隔离级别
transaction_isolation = READ-COMMITTED

查看缓存数据

show status like '%Qcache%';

+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Qcache_free_blocks      | 0     |
| Qcache_free_memory      | 0     |
| Qcache_hits             | 0     |
| Qcache_inserts          | 0     |
| Qcache_lowmem_prunes    | 0     |
| Qcache_not_cached       | 0     |
| Qcache_queries_in_cache | 0     |
| Qcache_total_blocks     | 0     |
+-------------------------+-------+
8 rows in set (0.00 sec)
解析: 
Qcache_free_blocks:表示查询缓存中目前还有多少剩余的blocks,如果该值显示较大,则说明查询缓存中的内存碎片过多了,可能在一定的时间进行整理。  
减少碎片: 
合适的query_cache_min_res_unit可以减少碎片,这个参数最合适的大小和应用程序查询结果的平均大小直接相关,可以通过内存实际消耗(query_cache_size - Qcache_free_memory)除以Qcache_queries_in_cache计算平均缓存大小。 
可以通过Qcache_free_blocks来观察碎片,这个值反应了剩余的空闲块,如果这个值很多,但是 Qcache_lowmem_prunes却不断增加,则说明碎片太多了。可以使用flush query cache整理碎片,重新排序,但不会清空,清空命令是reset query cache。整理碎片期间,查询缓存无法被访问,可能导致服务器僵死一段时间,所以查询缓存不宜太大。 

Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。 

Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。 

Qcache_inserts: 表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次 数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的, 这很正常。 

Qcache_lowmem_prunes:该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。 

Qcache_not_cached: 表示因为query_cache_type的设置而没有被缓存的查询数量。 

Qcache_queries_in_cache:当前缓存中缓存的查询数量。 

Qcache_total_blocks:当前缓存的block数量。

缓存配置项

query_cache_type

控制 Query Cache 功能的开关,可以设置为 0(OFF), 1(ON) 和 2(DEMAND) 三种,意义如下:

0(OFF):关闭 Query Cache 功能,任何情况下都不会使用 Query Cache 
1(ON):开启 Query Cache 功能,但是当 SELECT 语句中使用的 SQL_NO_CACHE 提示后,将不使用Query Cache 
2(DEMAND):开启 Query Cache 功能,但是只有当 SELECT 语句中使用了 SQL_CACHE 提示后,才使用 Query Cache
query_cache_size

设置 Query Cache 所使用的内存大小,默认值为0,大小必须是1024的整数倍,如果不是整数倍,MySQL 会自动调整降低最小量以达到1024的倍数。

query_cache_min_res_unit

设置 Query Cache 中每次分配内存的最小空间大小,也就是每个 Query 的 Cache 最小占用的内存空间大小。

query_cache_limit

允许 Cache 的单条 Query 结果集的最大容量,默认是1MB,超过此参数设置的 Query 结果集将不会被 Cache。

query_cache_wlock_invalidate

如果某个数据表被其他的连接锁住,是否仍然从查询缓存中返回结果。默认是 0(off)在锁定期间仍然从缓存中读取这类数据,可能会出现读取其他线程锁定的数据,如果设置为 1(on),将不会从缓存中读取这类数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值