影响Mysql性能的重要参数详解

查看MySQL中参数

Mysql服务启动之后,我们可以使用show variables和show status 命令可以查看mysql服务的静态参数值和动态运行状态信息。其中show variables是查看数据库启动后不会动弹更改的值,比如缓冲区大小、字符集、数据文件名等。show status是查看数据库运行期间的动态变化信息,比如锁等待、当前连接数等。
查看服务器含有buffer的参数值

查看服务器含有buffer的运行状态值

影响MySQL性能的重要参数

主要介绍的是使用MyISAM存储引擎的key_buffer_size和table_cache,以及使用使用InnoDB存储引擎的一些以innodb_开头的参数。

1.key_buffer_size

该参数是用来设置索引块(Index Blocks)缓存的大小,它被索引线程共享,此参数只使用MyISAM存储引擎。MySQL5.1之后的版本,可以将指定的表索引缓存入指定的key_buffer,这样可以降低线程之间的竞争。

索引缓存概述

MyISAM存储引擎和其他很多数据库系统一样,采用了一种将最经常访问的表保存在内存中的策略。对应索引区块来说,它维护者一个叫做索引缓存(索引缓冲)的结构体,这个结构体中存放着许多哪些经常使用的索引区块的缓冲区块。对应数据区块来说,Mysql主要依靠系统的本地文件系统缓存。有了索引缓冲后, 线程之间不再是串行地访问索引缓存。多个线程可以并行地访问索引缓存。 可以设置多个索引缓存,同时也能指定数据表索引到特定的缓存中。

创建一个索引缓存

set global 缓存索引名.key_buffer_size=100*1024;

global是全局限制,表示对每一个新的会话(连接)都有效。

修改一个索引缓存

和创建一个索引缓存一样一样的,都是set global 缓存索引名.key_buffer_size=100*1024;

将相关表的索引放到自己创建的索引缓存中

格式:cache index 表名1,表名2 in 索引缓存
将t1、t2、t3表中的索引放到my_cache索引缓存中


因为t1表式InnoDB表,t2,t3表为MyISAM表,故只有t2、t3表中的索引可以放到my_cache缓存中。

将索引放到默认的kef_buffer中

可以使用load index into cache +表名

删除索引缓存

将其索引缓冲大小设置为了0,就可以删除了,注意不能删除默认的key_buffer。

配置mysql服务器启动时自动加载索引缓存

在MySQL配置文件中添加如下内容(在Windows下叫my.ini,在Linux下叫my.cnf)
my_cache.key_buffer_size=1G  #指定索引缓存区大小
init_file=/usr/local/mysql/init_index.sql#在该文件中指定要加载到缓存区德索引

init_index.sql内容如下:
cache index t2 into my_cache;
cache index t3 into my_cache;

2.table_cache

概述

这个参数表示数据库用户打开表的缓冲数量,table_cache与max_connections有关。当某一连接访问一个表时,MySQL会检查当前已缓存表的数量,如果该表已经在缓冲中打开,则直接访问缓存中的表,如果为被缓存,则会将当前表添加进缓存并进行查询。在执行缓存操作之前,table_cache用于限制缓存表的最大数目,如果当前已经缓存的表未达到table_cache,则会将新表添加进来;若已经达到此值,MySQL将根据缓存表的最后查询时间、查询率等规则释放之前缓存的表,添加新表。

参数调优

通过检查mysqld的状态变量open_tables和opend_tables确定table_cache这个参数的大小。open_tables代表当前打开的缓冲数量,如果执行flush tables,则系统会关闭一些当前没有使用的表缓存,使得open_tables值减少。opend_tables表示曾经打开的表缓存数,会一直进行累加,不会因为执行flush tables操作,有所减少。如下图,变化还是很明显的。

当执行一个查询之后,发现opend_table和open_table都增加了1

当再次执行同一个查询之后,发现opend_table和open_table都不再变化

由此可见open_table对于设置table_cache更有价值

3.Innodb_buffer_pool_size

这个参数定义了InnoDB存储引擎的表数据和索引数据的最大内存缓存区大小。和MyISAM存储引擎不同,MyISAM的key_buffer_size只缓存索引键,而Innodb_buffer_pool_size同时为数据块和索引块做了缓存,这个只设的越高,访问表中的数据需要的磁盘I/O就越少。但是设置的过大,会导致物理内存竞争过大。

4.Innodb_flush_log_at_trx_commit

这个参数是控制缓存区中的数据写入到日志文件以及日志文件数据刷新到磁盘的操作时机。默认值为1。可以有以下值:
0:日志缓冲每秒一次地写到日志文件,并对日志文件作向磁盘刷新操作,但事务提交不做任何操作。
1:每个事务提交时,日志缓冲被写到日志文件,并且对日志文件做向磁盘刷新操作。
2:每个事务提交时候,日志缓冲被写到日志文件,但是不对日志文件作向磁盘刷新操作,对日志文件每秒向磁盘做一次刷新操作。

5.Innodb_additional_mem_pool_size

这个参数用来存在数据库结构和其他内部数据结果的内存池的大小。

6.Innodb_log_buffer_size

日志缓存大小

7.innodb_log_file_size

日志组中每个日志文件的大小

8.innodb_lock_wait-timeout

Mysql可以自动地监控行锁导致的死锁并经行相应的处理,但是对于表锁导致的死锁,不能自动检测,该参数主要是用于在出现行死锁时候等待指定的时间后回滚。

9.Innodb_support_xa

设置是否支持分布式事务,默认为ON或者1,表示支持。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
MySQL 的配置参数可以分为以下几类: 1. 服务器性能相关参数:包括缓存大小、并发连接数、线程池大小等,可以通过调整这些参数来提高服务器的性能。 2. 存储引擎相关参数MySQL 支持多种存储引擎,每个存储引擎都有其特定的配置参数,如 InnoDB 的缓存池大小、MyISAM 的键缓存大小等。 3. 日志相关参数:包括二进制日志、错误日志、慢查询日志等,可以通过调整这些参数来控制日志的生成和存储。 4. 安全相关参数:包括密码策略、SSL 配置等,可以通过调整这些参数来提高数据库的安全性。 下面是一些常用的 MySQL 配置参数及其作用: 1. innodb_buffer_pool_size:InnoDB 存储引擎的缓存池大小,可以提高查询性能。 2. max_connections:MySQL 服务器支持的最大并发连接数。 3. thread_pool_size:线程池大小,用于控制 MySQL 服务器中线程的数量。 4. key_buffer_size:MyISAM 存储引擎的键缓存大小。 5. log_slow_queries:是否开启慢查询日志,记录执行时间超过指定阈值的查询语句。 6. log_error:错误日志文件的路径。 7. binlog_format:二进制日志格式,包括 STATEMENT、ROW 和 MIXED。 8. expire_logs_days:二进制日志文件的过期时间,超过该时间的文件会被删除。 9. character_set_server:服务器默认字符集。 10. secure_file_priv:限制从服务器上读取和写入文件的路径。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值