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服务生效。