mysql调优五-参数设置

mysql调优五-相关参数介绍及设置


一、general 一般公共参数

        该类的参数一般配置完后是不需要改动的,主要是指定mysql的一般参数。

//指定数据文件存放的目录
datadir=/var/lib/mysql
//指定存储mysql的pid的地方
pid_file=/var/lib/mysql/mysql.pid
//指定mysql服务的端口号
port=3306
//指定mysql存储引擎,在建表时还可以针对每张表单独指定
default_storage_engine=InnoDB
//忘记mysql的密码的时,可以在mysql配置文件中配置该参数,跳过权限表验证,不需要密码即可登录mysql,平常不开。
skip-grant-tables

二、character 字符集参数

        可以使用 SHOW VARIABLES LIKE ‘%char%’; 来查看相关的字符集参数的设置。

//设置客户端使用的字符集
character_set_client
//设置连接数据库时的字符集,如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置
character_set_connection
//设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置
character_set_database
//文件系统的编码格式,把操作系统上的文件名转化成此字符集
character_set_filesystem
//数据库给客户端返回时使用的编码格式,如果没有指明使用服务器默认的编码格式
character_set_results
//服务器安装时指定的默认编码格式,这个变量不建议去修改
character_set_server
//数据库系统使用的编码格式,存储系统元数据的编码格式
character_set_system
//字符集安装的目录
character_sets_dir

三、connection 连接参数

        主要用来指定mysql连接的相关参数,可以根据业务量及实际需要进行优化。

//mysql的最大连接数,如果数据库的并发连接请求比较大,应该调高该值
max_connections
//限制每个用户的连接个数
max_user_connections
//mysql能够暂存的连接数量,当mysql的线程在一个很短时间内得到非常多的连接请求时,就会起作用,如果mysql的连接数量达到max_connections时,
//新的请求会被存储在堆栈中,以等待某一个连接释放资源,如果等待连接的数量超过back_log,则不再接受连接资源
back_log
//关闭一个非交互的连接之前需要等待的时长
wait_timeout
//关闭一个交互连接之前需要等待的秒数
interactive_timeout

四、log 日志参数

//指定错误日志文件名称,用于记录当mysqld启动和停止以及服务器在运行中发生任何严重错误的相关信息
log_error
//指定二进制日志文件名称,用于记录对数据造成更改的所有查询语句
log_bin
//指定将更新记录到二进制日志的数据库,其他所有没有显式指定的数据库更新将忽略,不记录在日志中
binlog_do_db
//指定不将更新记录到二进制日志的数据库
binlog_ignore_db
//指定多少次写日志后同步磁盘
sync_binlog
//是否开启查询日志记录
general_log
//指定查询日志文件名,用于记录所有的查询语句
general_log_file
//是否开启慢查询日志记录
slow_query_log
//指定慢查询日志文件名称,用于记录耗时比较长的查询语句
slow_query_log_file
//设置慢查询的时间,超过这个时间的查询语句才会记录日志
long_query_time
//是否将管理语句写入慢查询日志
log_slow_admin_statements

innodb存储引擎的日志文件

Redo log

        在数据修改时,innodb会先将记录写到redo log中, 并更新内存,此时更新就算是完成了,innodb会根据策略在合适的时机(三种方式)将记录存到磁盘中。实现了事务的持久性。
        Redo log有固定大小是循环写的过程。保证了数据库发生异常重启之前的记录也不会丢失。
写入内存及磁盘的三种方式

Undo log

        Undo log实现了事务的原子性,在innodb中用Undo Log实现了多版本的并发控制。在操作任何数据前,先将数据备份出来(这部分备份数据存储的地方就是undo log),然后再进行数据的修改,如果出错回滚了,可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。
        举例说明undo log逻辑日志:delete记录时,undo log中会记录对应的insert记录 ;insert记录时,undo log中会记录对应的delete记录 ;update记录时,记录一条对应相反的update记录。

binlog 服务端日志文件

        Binlog是server层的日志,主要做mysql功能层面的事情。Binlog中会记录所有的逻辑,采用追加写的方式存全量数据。可以定期执行备份,备份周期可以自己设置。

        恢复数据过程:
        1、找最近一次的全量备份数据。
        2、从备份时间点开始,将备份的binlog取出来,重放到要恢复的那个时间点。


        binlog与redo log区别:
        1、redo log是innodb存储引擎独有的,binlog是所有引擎都可使用。
        2、redo是物理日志,记录的是在某个数据页上做了什么修改;binlog是逻辑日志,记录的是这个sql逻辑语句。
        3、redo是循环写的,空间会耗尽覆盖;binlog是可以追加写的,不会覆盖之前的日志信息。

数据更新的流程

        1、执行器先从引擎中找到数据,如果在内存中直接返回,如果不在内存中,查询后返回
        2、执行器拿到数据之后会先修改数据,然后调用引擎接口重新写入数据 。
        3、引擎将数据更新到内存,同时写数据到redo中,此时处于prepare阶段,并通 知执行器执行完成。
        4、执行器生成盖操作的binlog。
        5、执行器调用引擎的事务提交接口,引擎把刚刚写完的redo改成commit状态, 更新完成。两阶段提交数据更新流程

五、cache 缓存参数

        key_buffer_size:索引缓存区的大小,只对myisam存储引擎的表起作用。
        query cache:
        1>、query_cache_size:查询缓存的大小,8之后就删除了。

show status like '%Qcache%';   //查看缓存的相关属性
//缓存中相邻内存块的个数,如果值比较大,那么查询缓存中碎片比较多
Qcache_free_blocks
//查询缓存中剩余的内存大小
Qcache_free_memory
//有多少次命中缓存
Qcache_hits
//有多少次未命中而插入
Qcache_inserts:
//多少条query因为内存不足而被移除cache
Qcache_lowmen_prunes
//当前cache中缓存的query数量
Qcache_queries_in_cache
//当前cache中block的数量
Qcache_total_blocks

        2>、query_cache_limit:超出此大小的查询将不被缓存
        3>、query_cache_min_res_unit:缓存块最小大小
        4>、query_cache_type:缓存类型,0为禁用;1表示将缓存所有结果,除非sql语句中使用sql_no_cache禁用查询缓存;2表示只缓存select语句中通过sql_cache指定需要缓存的查询。

        sort_buffer_size:每个需要排序的线程分派该大小的缓冲区
        max_allowed_packet:限制server接受的数据包大小
        join_buffer_size:关联缓存的大小
        thread_cache_size:服务器线程缓存,该值表示可以重新利用保存在缓存中的线程数量,如果线程量长时间较大,可以增大该值。
        Threads_cached:代表当前此时线程缓存中有多少空闲线程;
        Threads_connected:代表当前已建立连接线程的数量
        Threads_created:代表最近一次服务启动,已创建线程的数量,如果该值比较大,那么服务器会一直在创建线程;
        Threads_running:代表当前激活的线程数;

六、INNODB 存储引擎参数

//该参数指定大小的内存来缓冲数据和索引,最大可以设置为物理内存的80%
innodb_buffer_pool_size
//主要控制innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,值分别为0,1,2
innodb_flush_log_at_trx_commit
//设置innodb线程的并发数,默认为0表示不受限制,如果要设置建议跟服务器的cpu核心数一致或者是cpu核心数的两倍
innodb_thread_concurrency
//此参数确定日志文件所用的内存大小,以M为单位
innodb_log_buffer_size
//此参数确定数据日志文件的大小,以M为单位
innodb_log_file_size
//以循环方式将日志文件写到多个文件中
innodb_log_files_in_group
//mysql读入缓冲区大小,对表进行顺序扫描的请求将分配到一个读入缓冲区
read_buffer_size
//mysql随机读的缓冲区大小
read_rnd_buffer_size
//此参数标识为每张表分配一个新的文件
innodb_file_per_table

总结

        本文主要通过mysql相关的各类参数来对mysql进行调优,最重要的是log日志参数和cache缓存参数。

猜你喜欢

转载自blog.csdn.net/weixin_49442658/article/details/112668392