Mysql有很多系统变量可以设置,系统变量设置不同,会导致系统运行状态的不同。因此mysql提供两组命令,分别查看系统设置和运行状态。
1、系统设置:
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
SHOW VARIABLES shows the values of MySQL system variables.
2、运行状态:
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
SHOW STATUS provides server status information.
备注:SHOW XXX 可能会显示很多内容,类似Linux下内容太多了,往往需要grep来过滤,那么mysql也考虑到了这点,使用LIKE字句可以过滤。
以“二进制日志缓冲大小”系统参数:binlog_cache_size为例,说说如何综合使用上面两个命令。
我们知道InnoDB存储引擎是支持事务的,实现事务需要依赖于日志技术,为了性能,日志编码采用二进制格式。那么,我们如何记日志呢?有日志的时候,就直接写磁盘?可是磁盘的效率是很低的,如果你用过Nginx,一般Nginx输出access log都是要缓冲输出的。因此,记录二进制日志的时候,我们是否也需要考虑Cache呢?答案是肯定的,但是Cache不是直接持久化,于是面临安全性的问题——因为系统宕机时,Cache中可能有残余的数据没来得及写入磁盘。因此,Cache要权衡,要恰到好处:既减少磁盘I/O,满足性能要求;又保证Cache无残留,及时持久化,满足安全要求。
参数:binlog_cache_size 就是满足以上两点的:一个事务,在没有提交(uncommitted)的时候,产生的日志,记录到Cache中;等到事务提交(committed)需要提交的时候,则把日志持久化到磁盘。
接着,binlog_cache_size设置多大呢?答案是:也需要权衡!
设置太大的话,会比较消耗内存资源(Cache本质就是内存),更加需要注意的是:binlog_cache是不是全局的,是按SESSION为单位独享分配的,也就是说当一个线程开始一个事务的时候,Mysql就会为这个SESSION分配一个binlog_cache (备注:我想之所以以SESSION为单位分配binlog_cache是有道理的,因为不同的mysql请求,产生的binlog数量不一样的,批量插入数据必然产生大量的binlog,而简单注册一个用户,产生的binlog有限,那么JDBC连接上能否设置binlog_cache_size呢?)。
设置太小的话,如果用户提交一个“长事务(long_transaction)”,比如:批量导入数据。那么该事务必然会产生很多binlog,这样cache可能不够用(默认binlog_cache_size是32K),不够用的时候mysql会把uncommitted的部分写入临时文件(临时文件cache的效率必然没有内存cache高),等到committed的时候才会写入正式的持久化日志文件。
怎么判断我们当前的binlog_cache_size设置的没问题呢?
查看生产服务器binlog_cache_size大小设置:64M,系统默认才32K
mysql> show session variables like 'binlog_cache%';
+-------------------+----------+
| Variable_name | Value |
+-------------------+----------+
| binlog_cache_size | 67108864 |
+-------------------+----------+
1 row in set (0.00 sec)
mysql> show global variables like 'binlog_cache%';
+-------------------+----------+
| Variable_name | Value |
+-------------------+----------+
| binlog_cache_size | 67108864 |
+-------------------+----------+
1 row in set (0.00 sec)
我们看看配置文件:
[@hostname ~]# grep 'binlog' /data/mydata/my3306/my3306.cnf
binlog_cache_size = 64M (管理员配置的的确是64M)
binlog_format = mixed
max_binlog_cache_size = 128M
max_binlog_size = 200M
sync_binlog = 0
[@hostname ~]#
我们看看配置64M是否够用?查看下运行情况:
mysql> show status like 'binlog_%';
+-----------------------+-----------+
| Variable_name | Value |
+-----------------------+-----------+
| Binlog_cache_disk_use | 0 |
| Binlog_cache_use | 120402264 |
+-----------------------+-----------+
2 rows in set (0.00 sec)
运行情况Binlog_cache_use 表示binlog_cache内存方式被用上了多少次,Binlog_cache_disk_use表示binlog_cache临时文件方式被用上了多少次。Binlog_cache_disk_use现在等于0,表示内存cache是够用的,从来不需要使用到临时文件。如果没有long_transaction的话,我觉得64M是偏大的。
分享到:
相关推荐
6. `binlog_cache_size`:存储待写入二进制日志的事务信息,增大此值可以处理更大的事务。 7. `tmp_table_size`:如果查询创建了临时表,MySQL将使用这个参数指定的内存大小。当处理大量数据或复杂计算时,可能需要...
- `query_cache_size` 设置为128MB,用于缓存查询结果,提高查询速度。但在某些情况下,关闭查询缓存可能更优。 - `key_buffer_size` 设置为1024MB,用于MyISAM引擎的索引缓存,但InnoDB通常优先于MyISAM。 7. **...
+ @@join_buffer_size + @@binlog_cache_size + @thread_stack )) / @giga_bytes AS MAX_MEMORY_GB; ``` 该语句首先定义了基本单位换算,然后根据实际情况设置了一些变量的值(例如InnoDB缓冲池大小),最后计算...
MySQL 参数说明 MySQL 的参数配置在 my.cnf 文件中,参数和 SHOW VARIABLES 显示的变量一样名称,但是有些却不是,有些是在启动参数中设置,有些是必须用 ...* max_binlog_cache_size:最大的二进制 Cache 日志缓冲区
同时,要优化InnoDB事务处理,设置适当的binlog_cache_size,以便处理大事务: ``` binlog_cache_size = 1M ``` 对于表打开缓存(table_open_cache),考虑系统中的表数量,可以设置为一个合理值,例如2048: ``` ...
MySQL 数据库中的 `innodb_flush_log_at_trx_commit` 和 `sync_binlog` 是两个非常重要的配置参数,它们直接影响到数据库的性能与数据安全性。理解并合理设置这两个参数对于优化数据库系统至关重要。 首先,`innodb...
2. Binlog_cache_size:这个参数确定一个事务,在没有提交的时候,产生的日志,记录到 Cache 中,默认 binlog_cache_size 大小 32K。 其他参数 1. Lower_case_table_names:这个参数确定 MySQL 是否区分大小写,...
29. `binlog_cache_size`, `max_binlog_cache_size`, `max_binlog_size`: 与二进制日志缓存和大小相关的参数。 30. `relay-log-index` 和 `relay-log-info-file`: 用于主从复制的中继日志索引和信息文件。 31. `...
- **binlog_cache_size**:二进制日志缓存大小,用于存储事务中的SQL语句信息,直到事务提交。 - **tmp_table_size**:当内存中临时表超出此大小时,MySQL将转而使用磁盘上的MyISAM表。 3. **其他内存相关参数**...
MySQL使用sync_binlog参数来控制二进制日志的刷新行为,而binlog_cache_size和max_binlog_cache_size参数分别用来控制在多语句事务中需要多大缓存区以及缓冲区的最大限制。 对于存储引擎MyISAM和InnoDB,它们各自有...
max_binlog_cache_size = 4M binlog_format = STATEMENT expire_logs_days = 10 max_binlog_size = 1G sync_binlog = 0 innodb_buffer_pool_size = 1G innodb_additional_mem_pool_size = 20M innodb_log_...
- **binlog_cache_size/max_binlog_cache_size**: 事务处理过程中临时缓存大小。 - **max_binlog_size**: 单个binlog文件的最大大小。 - **max_heap_table_size**: 堆内存中创建的表的最大大小。 - **read_buffer_...
* thread_cache_size:这个值表示可以重新利用保存在缓存中线程的数量。 慢日志参数 * slow_query_log:开启慢日志。 * long_query_time:设置运行时间超过几秒的SQL会被记录下来。 * slow_query_log_file:慢日志...
3. **Binlog_cache_disk_use**:表示使用临时二进制日志缓存但超过了`binlog_cache_size`限制,转而使用临时文件存储事务中的语句的事务数量。如果这个值很高,可能需要调整`binlog_cache_size`参数。 4. **Binlog_...
- **binlog_cache_size**/**max_binlog_cache_size**: 二进制日志缓存的大小及其最大值。 - **max_binlog_size**: 单个二进制日志文件的最大大小。 - **expire_logs_days**: 二进制日志文件的有效天数,超过该时间的...
max_binlog_cache_size=64m max_binlog_size=512m long_query_time=1 log_output=FILE log_error=/data/mysqldata/3307/mysql-error.log slow_query_log=1 slow_query_log_file=/data/mysqldata/3307/slow_statement...
Binlog Cache使用状况指明了二进制日志缓存的使用情况,其中Binlog_cache_disk_use值不为0时,可能需要调大binlog_cache_size的大小。 Innodb_log_waits量表示InnoDB日志缓冲因空间不足而等待的情况,如果该值不为0...