数据库优化之常用的show variables、show status配置优化

当面试官让你聊聊MySQL数据库性能优化,你还是只能回答优化sql,建索引吗?
让我们看看还可以从哪些方面聊聊吧。其实你还可以从网速、数据量、数据库日志、内存等问题、硬件配置,当前占用资源、硬盘碎片或索引碎片等等诸多方面分析聊聊。
传送门:MySQL数据库优化看这一篇就够了(最全干货篇)

⭐️ MySQL优化-配置优化

1、show variables查看MySQL服务器配置参数

1)查看及调整系统配置变量值

show variables;--查看一些系统配置变量
show variables like 'key_%';
show variables like '%cache%';--查看缓存相关参数
show variables like 'innodb_buffer_pool%';--查看缓冲池信息
show variables like 'innodb_file_per_table';--选择是否将表数据和系统表空间独立成单个文件。


2)查询缓存相关参数:

2、show status查看MySQL服务器运行状态值

通过下面的命令可以了解MySQL服务器运行状态值。

show status;
show status like 'com_%';
show status like 'innodb_%';
show status like 'connections';
show status like 'slow_queries';

1)调整max_connections:

MySQL最大连接数量,默认151。
在Linux系统上,如果内存足够且不考虑用户等待响应时间这些问题,MySQL理论上可以支持到万级连接,但是通常情况下,这个值建议控制在1000以内。

2)调整back_log:

TCP连接的积压请求队列大小,通常是max_connections的五分之一,最大不能超过900。

3)调整table_open_cache:

这个值应该设置为max_connections的N倍,其中N代表每个连接在查询时打开的表的最大个数。

4)调整innodb_lock_wait_timeout:

该参数可以控制InnoDB事务等待行锁的时间,默认值是50ms,对于反馈响应要求较高的应用,可以将这个值调小避免事务长时间挂起;
对于后台任务,可以将这个值调大来避免发生大的回滚操作。

5)调整innodb_buffer_pool_size:

InnoDB数据和索引的内存缓冲区大小,以字节为单位,这个值设置得越高,访问表数据需要进行的磁盘I/O操作就越少,如果可能甚至可以将该值设置为物理内存大小的80%。

调优参考计算方法
val = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100%

val > 95% 则考虑增大 innodb_buffer_pool_size, 建议使用物理内存的75%

val < 95% 则考虑减小 innodb_buffer_pool_size, 建议设置为:Innodb_buffer_pool_pages_data * Innodb_page_size * 1.05 / (102410241024)

设置命令:set global innodb_buffer_pool_size = 2097152; //缓冲池字节大小,单位kb,如果不设置,默认为128M

设置要根据自己的实际情况来设置,如果设置的值不在合理的范围内,并不是设置越大越好,可能设置的数值太大体现不出优化效果,反而造成系统的swap空间被占用,导致操作系统变慢,降低sql查询性能。

修改配置文件的调整方法,修改my.cnf配置:

innodb_buffer_pool_size = 2147483648 #设置2G

innodb_buffer_pool_size = 2G #设置2G

innodb_buffer_pool_size = 500M #设置500M

MySQL5.7及以后版本,改参数时动态的,修改后,无需重启MySQL,但是低版本,静态的,修改后,需要重启MySQL。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
对于缓存参数的优化,可以从以下几个方面入手: 1. 缓存大小的设置 MySQL有多种缓存,包括查询缓存、InnoDB缓存池、MyISAM缓存池、表缓存等。其中,InnoDB缓存池是最重要的缓存,因为它缓存了InnoDB存储引擎中的表和索引数据。因此,我们需要根据实际情况来设置InnoDB缓存池的大小。 可以使用以下命令来查询当前InnoDB缓存池的使用情况: ``` SHOW ENGINE InnoDB STATUS\G ``` 在查询结果中,可以找到类似以下的信息: ``` Buffer pool size XXXXXXX Free buffers XXXXX ``` 其中,Buffer pool size表示当前InnoDB缓存池的大小,而Free buffers表示当前可用的缓存数量。根据这些信息,我们可以调整InnoDB缓存池的大小,以便提高查询效率。 2. 缓存失效的设置 MySQL中的缓存通常会在一定时间内失效,需要重新查询数据库获取最新数据。为了提高缓存的效率,我们需要适当调整缓存失效的时间。 可以使用以下命令来查询当前缓存失效的时间: ``` SHOW VARIABLES LIKE '%expire%' ``` 在查询结果中,可以找到类似以下的信息: ``` | query_cache_wlock_invalidate | OFF | | transaction_alloc_block_size | 8192 | | transaction_allow_batching | OFF | | transaction_isolation | REPEATABLE-READ | | transaction_prealloc_size | 4096 | | tx_isolation | REPEATABLE-READ | | tx_read_only | OFF | | wsrep_convert_lock_to_trx | OFF | ``` 其中,query_cache_wlock_invalidate表示查询缓存失效的时间。可以通过修改该参数的值,来调整缓存失效的时间。 3. 缓存命中率的监控 如果缓存命中率太低,说明缓存效果不佳,需要进一步优化。可以使用以下命令来查询当前缓存命中率: ``` SHOW STATUS LIKE 'Qcache_hits'; SHOW STATUS LIKE 'Com_select'; ``` 其中,Qcache_hits表示查询缓存命中的次数,而Com_select表示查询数据库的次数。通过这两个参数的比值,可以计算出当前的缓存命中率。 以上就是MySQL缓存参数优化的一些方法和技巧,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只IT攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值