古道长亭

Contact me with ixiaoqiang0011@gmail.com


  • 首页

  • 归档

  • 分类

  • 关于

  • Book

  • 搜索

系统配置优化

时间: 2022-12-20   |   分类: mysql性能优化   | 字数: 857 字 | 阅读约: 2分钟 | 阅读次数:

系统配置优化

数据库优化维度有四个: 硬件升级, 系统配置, 表结构设计, sql语句及索引

一. 保证从内存中读取数据

MySQL会在内存中保存一定的数据,通过LRU算法将不常访问的数据保存在硬盘文件中。

尽可能的扩大内存中的数据量,将数据保存在内存中,从内存中读取数据,可以提升MySQL性能。

扩大innodb_buffer_pool_size,能够全然从内存中读取数据。最大限度降低磁盘操作。

show global status like'innodb_buffer_pool_pages_%';

Innodb_buffer_pool_pages_data	282
Innodb_buffer_pool_pages_dirty	0
Innodb_buffer_pool_pages_flushed	187
Innodb_buffer_pool_pages_free	7909
Innodb_buffer_pool_pages_misc	0               #0 表示已经被用光
Innodb_buffer_pool_pages_total	8191

#innodb_buffer_pool_size默认为128M,理论上可以扩大到内存的3/4或4/5。

如果是专用的MySQL Server可以禁用SWAP

关闭所有交换设备和文件.

​ swapoff -a

二. 数据预热

默认情况,仅仅有某条数据被读取一次,才会缓存在 innodb_buffer_pool。

所以,数据库刚刚启动,须要进行数据预热,将磁盘上的全部数据缓存到内存中。

  1. 对于InnoDB数据库,进行数据预热的脚本是

    SELECT DISTINCT
    	CONCAT( 'SELECT ', ndxcollist, ' FROM ', db, '.', tb, ' ORDER BY ', ndxcollist, ';' ) SelectQueryToLoadCache 
    FROM
    	(
    	SELECT ENGINE
    		,
    		table_schema db,
    		table_name tb,
    		index_name,
    		GROUP_CONCAT( column_name ORDER BY seq_in_index ) ndxcollist 
    	FROM
    		(
    		SELECT
    			B.ENGINE,
    			A.table_schema,
    			A.table_name,
    			A.index_name,
    			A.column_name,
    			A.seq_in_index 
    		FROM
    			information_schema.statistics A
    			INNER JOIN ( SELECT ENGINE, table_schema, table_name FROM information_schema.TABLES WHERE ENGINE = 'InnoDB' ) B USING ( table_schema, table_name ) 
    		WHERE
    			B.table_schema NOT IN ( 'information_schema', 'mysql' ) 
    		ORDER BY
    			table_schema,
    			table_name,
    			index_name,
    			seq_in_index 
    		) A 
    	GROUP BY
    		table_schema,
    		table_name,
    		index_name 
    	) AA 
    ORDER BY
    	db,
    	tb;
    

    将该脚本保存为: loadtomem.sql

  2. 执行命令

    mysql -uroot -proot -AN < /root/loadtomem.sql > /root/loadtomem.sql
    #保存路径可自定义
    
  3. 在需要数据预热时,如重启数据库

    mysql -uroot < /root/loadtomem.sql > /dev/null 2>&1
    

三. 降低磁盘写入次数

  • 增大redolog,减少落盘次数

    innodb_log_file_size 设置为 0.25 * innodb_buffer_pool_size

  • 通用查询日志、慢查询日志可以不开 ,bin-log开

    生产中不开通用查询日志,遇到性能问题开慢查询日志

  • 写redolog策略 innodb_flush_log_at_trx_commit设置为0或2

    0 : 每隔1s写入文件并通知文件系统flush到磁盘, 可能会造成1秒数据丢失

    1: 每次事务提交都会触发 log thread 触发写文件并持久化到磁盘

    2: 每次事务结束,写文件,但因文件系统有缓存,并不一定完全写到磁盘

    如果不涉及非常高的安全性 (金融系统),或者基础架构足够安全,或者事务都非常小,都能够用 0或者 2 来减少磁盘操作。

四. 提高磁盘读写性能

使用SSD或者内存磁盘

#mysql# #mysql优化#
QQ扫一扫交流

标题:系统配置优化

作者:古道长亭

声明: 欢迎加群交流!

如有帮助,欢迎多多交流 ^_^

微信打赏

支付宝打赏

响应式编程概述
mysql MHA高可用实战
  • 文章目录
  • 站点概览
古道长亭

古道长亭

Always remember that your present situation is not your final destination. The best is yet to come.

226 日志
57 分类
104 标签
GitHub Gitee
友情链接
  • 古道长亭的BOOK
  • JAVA学习
标签云
  • Mysql
  • 搜索引擎
  • Mybatis
  • 容器
  • 架构
  • 消息队列
  • Flink
  • Sharding sphere
  • 流处理
  • 缓存
  • 一. 保证从内存中读取数据
  • 二. 数据预热
  • 三. 降低磁盘写入次数
  • 四. 提高磁盘读写性能
© 2019 - 2024 京ICP备19012088号-1
0%