千家信息网

Innodb怎么自动开启打印show engine status到err日志

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,本篇内容介绍了"Innodb怎么自动开启打印show engine status到err日志"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情
千家信息网最后更新 2024年12月12日Innodb怎么自动开启打印show engine status到err日志

本篇内容介绍了"Innodb怎么自动开启打印show engine status到err日志"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、问题描述

为什么我的err日志里面有大量的show engine innodb status的记录,我自己并没有开启innodb_status_output参数。

二、问题分析

通过查看日志,发现如下输出:

2019-03-21T17:00:02.375231Z 1230497 [Warning] InnoDB: Difficult to find free blocks in the buffer pool (338 search iterations)! 0 failed attempts to flush a page! Consider increasing the buffer pool size. It is also possible that in your Unix version fsync is very slow, or completely frozen inside the OS kernel. Then upgrading to a newer version of your operating system may help. Look at the number of fsyncs in diagnostic info below. Pending flushes (fsync) log: 0; buffer pool: 0. 1446962050 OS file reads, 545881917 OS file writes, 376257282 OS fsyncs. Starting InnoDB Monitor to print further diagnostics to the standard output.

日志也写得很清楚。应该是free block不够了Innodb自动开启了。但是我们需要源码验证一下。

三、源码验证

在源码的buf_LRU_handle_lack_of_free_blocks函数中我们看到如下:

if ((current_ms > started_ms + 2000)        && (current_ms > last_printout_ms + 2000)        && srv_buf_pool_old_size == srv_buf_pool_size) {        ib::warn() << "Difficult to find free blocks in the buffer pool"            " (" << n_iterations << " search iterations)! "               << flush_failures << " failed attempts to"            " flush a page! Consider increasing the buffer pool"            " size. It is also possible that in your Unix version"            " fsync is very slow, or completely frozen inside"            " the OS kernel. Then upgrading to a newer version"            " of your operating system may help. Look at the"            " number of fsyncs in diagnostic info below."            " Pending flushes (fsync) log: "               << fil_n_pending_log_flushes               << "; buffer pool: "               << fil_n_pending_tablespace_flushes               << ". " << os_n_file_reads << " OS file reads, "               << os_n_file_writes << " OS file writes, "               << os_n_fsyncs               << " OS fsyncs. Starting InnoDB Monitor to print"            " further diagnostics to the standard output.";        last_printout_ms = current_ms;        *mon_value_was = srv_print_innodb_monitor;        *started_monitor = true;        srv_print_innodb_monitor = true;        os_event_set(srv_monitor_event);

这里不仅打印出了日志同时设置了参数srv_print_innodb_monitor = true; 并且开始os_event_set(srv_monitor_event);开启了monitor打印线程。那我们看看srv_print_innodb_monitor 对应什么参数呢。如下:

static MYSQL_SYSVAR_BOOL(status_output, srv_print_innodb_monitor,  PLUGIN_VAR_OPCMDARG, "Enable InnoDB monitor output to the error log.",  NULL, innodb_status_output_update, FALSE);

实际上就是innodb_status_output被自动开了。当然如果查看调用可以在上层函数buf_LRU_get_free_block中查看到调用,实际上就是在free list找不到空闲的block的时候会做输出。buf_LRU_get_free_block还包含了一个块的分配流程大约如下,可自行参考:

  • If there is a block in the free list, take it .如果这里找不到就会自动开启innodb_status_output

  • If no block was in the free list, search from the end of the LRU list and try to free a block there.

  • No free block was found: try to flush the LRU list.

"Innodb怎么自动开启打印show engine status到err日志"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

日志 参数 实际 源码 输出 内容 函数 实际上 就是 更多 知识 问题 验证 实用 清楚 学有所成 接下来 上层 不够 同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华为hcia网络安全考试 浸没液冷服务器 光明大陆几个服务器 筱贝网络技术有限公司怎么样 lol免费代理服务器 工业网络技术特点 练数据库技术计算机三级的软件 以八开头的网络安全 临汾网络安全教育课堂 应用软件开发技术 论文网络安全与信息化 眉山公安网络安全法宣传 数据库建表添加数据有红色感叹号 闵行区提供数据库研发价格表格 江西省确权登记数据库 asp数据添加到数据库 泰拉瑞亚永久服务器id 社会工程学和网络安全 逍客显示屏服务器错误 给网络技术工程师的感谢信 软件开发个人简介模板范文 岳阳市网络安全和信息化委员会 笔记本电脑服务器连接情况异常 工商银行网络安全要求 联通网络异常无法连接服务器 江苏虚拟化服务器云服务器 全省中大小学生网络安全答题 大规模软件开发使用方法 shell实现多服务器 软件开发者系统详细设计书
0