Linux中限制服务如mysql的最大cpu使用率

1、cpu占用测试:

DELIMITER //
DROP PROCEDURE IF EXISTS intensive_calculations;
CREATE PROCEDURE intensive_calculations()
BEGIN
    DECLARE v INT DEFAULT 0;
    DECLARE i INT DEFAULT 0;
    WHILE i < 1000000 DO
        SET v = SQRT(i * i + (RAND() * 10000));
        SET i = i + 1;
    END WHILE;
END//
DELIMITER ;

2、开两个窗口执行下函数即可看到cpu目前的占比是比较高的

CALL intensive_calculations();

3、编辑服务

vi /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL database server
After=network.target

[Service]
Type=forking
ExecStart=/etc/init.d/mysql.server start
ExecStop=/etc/init.d/mysql.server stop
ExecReload=/etc/init.d/mysql.server reload
PIDFile=/var/run/mysqld/mysqld.pid
User=mysql
Group=mysql
EnvironmentFile=-/etc/sysconfig/mysql
#限制cpu使用率,单位为全部cpu的总占比,如8核的80%需要设为640%
CPUQuota=120%
#限制使用cpu时间,单位默认s
#LimitCPU=60

[Install]
WantedBy=multi-user.target

4、启动服务:

systemctl daemon-reload
systemctl stop mysqld
systemctl start mysqld
systemctl status mysqld

5、再次执行下刚才的函数,可以看到cpu被限制到了指定的比率(我设的80)。

在这里插入图片描述

mysql中Innodb_log_waits大于0的问题。

-- 全局变量
SHOW GLOBAL STATUS LIKE 'Innodb_log_waits';
SHOW GLOBAL STATUS;
-- 系统变量
SHOW VARIABLES LIKE 'innodb_log%';

Innodb_log_waits 是 MySQL 中的一个状态变量,指示 InnoDB 存储引擎在写入重做日志时发生的等待次数。具体来说,它表示在日志写入操作期间,系统等待的次数。这通常反映了 InnoDB 在处理日志的过程中可能遇到的瓶颈或性能问题。

含义
日志写入等待:当 InnoDB 引擎写入重做日志时,可能因为 I/O 操作的延迟、日志缓冲区的填满或锁竞争等因素,导致需要等待。
性能指标:Innodb_log_waits 的值增加通常表示日志写入的性能可能受到影响,系统可能正在经历 I/O 负载或资源竞争问题。
监控和优化
监控:通过定期监控 Innodb_log_waits 的值,可以识别日志写入的潜在瓶颈。
优化:可以考虑优化日志设置(如调整 innodb_log_file_size 和 innodb_log_buffer_size),提升存储性能,或减少系统负载,以降低等待次数。
总之,Innodb_log_waits 是评估日志写入性能的一个重要指标,了解其含义有助于优化数据库性能。

mysql57默认值
innodb_log_buffer_size=16M
innodb_log_file_size=48M

innodb_log_buffer_size 参数定义了 InnoDB 用于缓存重做日志记录的内存缓冲区大小。当事务提交时,重做日志记录首先写入到这个缓冲区中,然后异步地写入到重做日志文件中。

一般建议:
对于中小型数据库,可以将 innodb_log_buffer_size 设置为 8MB 到 64MB。
对于大型数据库,尤其是那些有大量的并发写操作的数据库,可以将 innodb_log_buffer_size 设置得更高,例如 128MB 到 256MB 甚至更大。
调整原则:
如果事务提交频繁,但每个事务的写入量不大,那么可以适当增加 innodb_log_buffer_size,以便在事务提交时能够容纳更多的日志记录。
如果事务提交相对较少,但每个事务的写入量较大,同样需要增加 innodb_log_buffer_size,以避免频繁地将缓冲区中的日志记录写入磁盘。

innodb_log_file_size 定义了每个重做日志文件的大小。增加这个参数可以减少日志文件的切换频率,从而提高性能。

一般建议:
对于中小型数据库,每个重做日志文件大小可以设置为 128MB 到 512MB。
对于大型数据库,尤其是那些需要处理大量写操作的数据库,可以将每个重做日志文件的大小设置为 1GB 到 2GB 甚至更大。
调整原则:
如果你的应用程序有大量的并发写操作,那么增加 innodb_log_file_size 可以减少日志文件切换的开销,从而提高性能。
如果磁盘 I/O 是瓶颈,那么增加 innodb_log_file_size 可以减少磁盘 I/O 操作的频率。

在mysql配置文件中修改:

innodb_log_file_size = 1G
innodb_log_buffer_size = 128M

保存后重启mysql服务生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值