维护和监控 InnoDB 使用情况

1,614 阅读6分钟

维护和监控 InnoDB 使用情况

监控和维护InnoDB 使用情况是维持一个健康和稳定的数据库操作环境的关键要素。

我们可以使用预防性维护程序来确保最佳性能并防止潜在的停机。

应定期监控InnoDB引擎,以确保资源使用和整体运行状况的一致性。

常见的维护过程包括增加日志文件大小、针对应用程序工作负载的变化调整缓冲区、添加表空间文件等等。以下是通过过程解释的一些最常见的维护任务。

添加和调整 InnoDB 日志文件的大小

InnoDB日志文件,特别是如果保持默认设置,有时需要增加大小或数量。

如果我们需要增加事务日志记录容量或将写入分散到其他日志文件,这将非常有用。此过程需要服务器停机,并且在处理日志文件时必须停止MySQL,否则会发生数据丢失。

流程如下:

1. 停止 MySQL 服务,然后确保它未运行。

2.将目录更改为innodb_log_group_home_dir中指定的位置:$>cd /var/1ib/mysq1

3. 将文件移动到 tmp 位置以进行回退:$> sudo mv ib_logfile* /tmp/

4. 通过编辑系统文件 my.cnf 更改日志文件的数量或大小。若要增加大小,请更改 innodb_log_file_size 的值。若要更改日志文件的数量,请增加 innodb_log_files_in_group 的值。

5. 启动 MySQL 并检查是否已在日志文件目录中创建新文件。当InnoDB发现目录中缺少新日志文件时,它将使用新设置自动创建新日志文件:

    $> sudo /etc/init.d/mysqld start 

    $> ls-al /var/1ib/mysq1/ib_1og*

6. 监控 MySQL 错误文件。

将表空间添加到 InnoDB

InnoDB有多种方法在表空间文件中存储数据。如果您不使用innodb_file_per_table则InnoDB会将表内容存储在共享表空间中。如果您尚未在表空间上启用自动扩展设置(在 innodb_data_file_path 中定义),那么随着数据库的增长,您可能会发现表空间没有足够的空间来存储数据。在这些情况下,您需要通过添加额外的表空间来扩展容量。流程如下:

1. 停止 MySQL 并创建配置文件的备份以进行回退

2. 编辑系统的 my.cnf 文件并更改innodb_data_file_路径的值,同时遵守以下要求:

变量使用以下字符串定义:
    ibdatal:$size;ibdataN:$size;.ibdataN:$size;
    
    $size 的正确值将取决于您的环境
    $size 的值是以常规字节为单位的值,以 K 表示千字节,M 表示兆字节,G 表示千兆字节
    如果您要添加一个表空间,其中以前在没有 K,M,G 速记的情况下定义了一个表空间,或者如果它设置为自动扩展,那么您需要以精确的字节值定义表空间大小,否则 InnoDB 将拒绝启动,指出它遇到了大小不正确的表空间文件
    N 的值是正在使用的表空间文件数的序列值InnoDB的默认设置是创建一个10 MB的自动扩展文件如果是这种情况,你的我的CNF 文件没有 innodb_data_file_path 的条目,您将按其当前字节大小定义第一个表空间,并根据需要添加其他序列文件
3. 当前定义的表空间或默认表空间无法更改,但可以通过额外的 ibdataN:$size 值递增文件序列来创建新的表空间文件,从而将其他表空间添加到 InnoDB
4. 启动 MySQL 并查看错误日志以了解任何问题

利用 RAW 表空间

InnoDB有一种在RAW分区中存储表空间数据的可选方法。

在某些情况下,这可以提高I / O性能,因为它消除了操作系统文件系统附加到所有数据库读写操作以及适用存储设备上的抽象和管理层,并且还允许InnoDB执行非阻塞写入。

这种存储方法相当于“去掉中间人”,允许InnoDB直接写入块存储,而无需与逻辑文件系统交互。这种存储方法的优点应在使用前在系统上进行测试;并非所有系统都显示出相同的性能优势。

要启用 RAW 表空间,我们遵循此过程,该过程假定您从不包含任何数据或文件系统的非格式化分区开始。

1. 停止 MySQL 并在配置文件中创建备份以进行回退。

2. 在innodb_data_file_path中定义分区。在这个例子中,我们有两个分区可以使用(/dev/sdc1 和 /dev/sdd1),每个分区的大小为 10 GB。innodb_data_file_path=/dev/sdc1:10Gnewraw;/dev/sddl:10Gnewraw 3.启动MySQL并监视错误日志。

4. InnoDB 完成初始化分区后,我们将关闭 MySQL 并将 newraw 定义更改为简单的 raw。InnoDB 使用 newraw 定义将分区标记为需要初始化,因此一旦初始化,就需要将其标记为可用于存储使用。

5. 停止 MySQL 服务器进程。

6. 编辑 my.cnf 并将 innodb_data_file_path 变量上的 newraw 更改为 raw。

7. 启动 MySQL,然后登录并运行以下命令以确保分区按预期列出:

MYSQ1>show global,如“innodb_data_file_path”;

监控InnoDB

及时监控InnoDB是数据库引擎健康一个重要方面。

我们需要知道如何从InnoDB正确检索信息,以便我们可以看到使用趋势并在问题发生之前预测和预防问题。

通过显示表状态进行监控

可以从显示表状态中获得几个有用的信息;

其中一些信息可以通过其他更自动化的方式进行监控:

image.png

查询 INFORMATION_SCHEMA

我们可以从INFORMATION_SCHEMA 操作数据库,在操作期间存储MySQL服务器的内部数据。下表可用于 InnoDB 信息:

  • INNODB_CMP:此表包含压缩数据格式操作的信息。列详细信息和定义的参考

  • INNODB_CMP_RESET:此表包含与INNODB_CMP相同的信息,但用作基于计数器的指标表,其数据在每次读取表后都会被截断。例如,如果您每五分钟从此表中进行选择,则您将获得前五分钟时间段的指标,而不是从返回的INNODB_CMP表中选择数据自 InnoDB 进程开始以来聚合指标。

  • INNODB_TRX:此表包含有关InnoDB正在执行的当前事务的详细信息。这是可用于InnoDB监控目的和事务趋势的最有用的查询分析表之一。这些列包括以下内容:

    • TRX_ID:包含交易ID

    • TRX_WEIGHT:包含InnoDB根据其他当前事务确定的交易权重值0

    • TRX_STATE:包含运行、锁定等待、回滚、提交等事务操作状态

    • TRX_STARTED:包含事务开始时间的时间戳值

    • TRX_REQUESTED_LOCK_ID:包含当前处于锁定状态时正在等待的事务的 ID 值。我们可以查询INNODB_LOCKS表,通过此查询查找有关我们正在等待的锁的更多信息:从 INNODB 锁中选择 a.、b. 为 a,INNODB_TRX 为 b,其中 b.TRX_REQUESTED_LOCK ID=a.LOCK_ID;

    • TRX_WAIT_STARTED:包含锁定等待模式启动的时间戳

    • TRX_MYSQL_THREAD_ID:包含分配的线程 ID

    • TRX_QUERY:包含正在执行的查询

    • INNODB_CMPMEM:此表包含存储在缓冲池中的压缩页面数据的信息,包括:页面大小、使用的页面、可用页面、重新定位操作和重新定位计时。

    • INNODB_CMPMEM_RESET:它包含与INNODB_CMPMEM相同的信息,但用作基于间隔的表,其中所有数据点在选择后都重置为零。

    • INNODB_LOCKS:包含与现有锁有关的信息。

    • INNODB_LOCK_WAITS:这包含有关事务当前正在等待的锁的信息。

全局状态和全局变量

MySQL 的全局状态和全局变量输出包含许多有用的故障排除数据点。

此输出可用于趋势使用情况以及报告数据库状态。

使用显示全局变量的主要目标;故障排除时是查找特定系统变量的值,或确保将不同的系统变量设置为预期的正确值。

要查看InnoDB特定的变量,我们可以运行以下查询:

SHOW GLOBAL VARIABLES LIKE 'innodbo';.

使用显示全局状态;将输出有关运行时统计信息的信息。我们可以通过运行以下查询来查看InnoDB特定的统计信息:

sHOw GLOBAL STATUS LIKE 'innodb%';.


本文正在参加「技术专题19期 漫谈数据库技术」活动