我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
将管理任务计划程序任务计划从 IBM Db2 LUW 重构为适用于 MySQL 的亚马逊 RDS、适用于 MariaDB 的亚马逊 RDS 或亚马逊 Aurora MySQL
DB2 LUW ATS 的一些关键特性和功能包括:
- 任务调度 — ATS 允许您在 Db2 LUW 中自动执行例行管理任务,例如备份、重组、运行统计和维护活动。它可以根据预定义的时间表自动运行这些任务,从而帮助简化和简化这些任务。
- 灵活的计划选项 — ATS 提供灵活的调度框架,允许您定义任务运行的频率和时间。您可以将任务安排为按特定间隔(例如每天、每周或每月)运行,也可以使用类似 cron 的表达式指定自定义计划。
- 记录和监控 — ATS 维护任务运行日志,包括开始时间、结束时间和状态信息。此日志提供任务运行的历史记录,允许您跟踪和查看运行历史记录以进行审计或故障排除。
Db2 LUW 中的管理任务调度器
管理任务调度程序内置于 DB2 LUW 数据库中,可通过命令行界面 (CLI) 进行访问。它使数据库管理员 (DBA) 能够定义任务、设置其调度参数并管理这些任务的运行。
定时任务由 Db2 自主计算守护程序 (d b2acd
) 运行,该守护程序每 5 分钟自动轮询活动数据库中的新任务或更新任务。该守护程序维护活动任务的列表,并在相应的预定运行时间到来时调用它们。
默认情况下,在 Db2 LUW 中禁用 ATS;您可以使用注册表变量 DB2_ATS_ENABLE 将其启用。
如果尚不存在
Db2 LUW 在 S YSPROC
架构下提供以下 SQL 例程,您可以使用这些例程来调度和修改任务:
-
ADMIN_TASK_ADD — 此过程添加了需要按预定义计划运行的新计划。 -
ADMIN_TASK_REMOVE — 此过程会删除 计划任务。它还会删除任务状态记录。 -
ADMIN_TASK_UPDATE — 此过程使用给定任务名称更新任务作为输入。
同样,您可以使用 SYSTOOLS
架构下的以下视图列出所有计划任务或监控任务的状态:
-
ADMIN_TASK_LIS T — 此视图检索有关管理任务计划程序中定义的每项任务的信息。 -
ADMIN_TASK_STATU S — 此视图检索有关管理任务计划程序中任务运行状态的信息。
使用 ATS 添加、更新或删除任务
需要运行的任务应封装在 SQL 存储过程中,该存储过程应作为这些 ATS 过程的输入提供。
例如,以下命令添加了一项新任务, 用于每 6 小时收集 SA LE
S 表的
您可以使用 ADMIN_TASK_LIST 视图列
出在数据库中创建的所有任务:
列出任务状态
您可以使用 ADMIN_TASK_STATU
S 视图列出在数据库中创建的所有任务的任务状态:
更新任务
你可以使用 ADMIN_TASK_UPDATE
过程来更新或修改任务。对于之前创建的示例任务,以下更新语句将计划修改为每 12 小时在 SA LE
S 表上运行一次统计数据:
使用 ADMIN_TASK_LIS
T 视图来验证更新的计划信息。
删除任务
要删除任务,有两个选项可用。第一个选项是仅删除任务的状态并保留实际任务,以便它继续按照预定义的计划运行。第二个选项是删除任务本身。
使用以下语句删除所有小于当前时间戳的任务状态:
您可以验证
ADMIN_TASK_STASK_STATUS 视图,以检查所有任务状态
条目是否已删除,但未从 ADMIN_TASK_LIST 视图中删除。
以下语句将任务本身从计划中删除, ADMIN_TASK_LIST 将不再显示此任务
:
兼容 Aurora MySQL 版本的事件调度器、适用于 MySQL 的亚马逊 RDS 或适用于 MariaDB 的亚马逊 RDS
对于通过 UNIX/LINUX cron 类功能解决的用例,你可以选择使用事件调度器将计划任务移植到 MySQL 或 MariaDB 中。MySQL 和 MariaDB 都允许您使用可由数据库实例中配置的事件调用的程序 SQL 自由运行直接 SQL 语句或更复杂的业务逻辑。通过将这些事件设置为按固定时间表运行,您可以管理要在数据库实例中对应用程序架构中的表运行的操作。与事件调度器相关的各种操作的语法在兼容 Aurora MySQL 的版本、适用于 MySQL 的亚马逊 RDS 和适用于 MariaDB 的亚马逊 RDS 中是相同的,我们在本文中对此进行了讨论。
启用事件调度器
完成以下步骤,在适用于 MySQL 的亚马逊 RDS 或适用于 MariaDB 的亚马逊 RDS 中启用事件调度器:
- 在 Amazon RDS 控制台上,选择导航窗格 中的 参数组 。
- 选择您的参数组,然后在 “ 操作 ” 菜单上选择 “ 编辑” 。
- 为参数 e
vent_scheduler
选择值 ON, 然后选择保存更改。
这是一个动态参数,您不必重启实例。现在,您应该能够在数据库实例上配置事件调度器。
以下命令显示了数据库服务器中的 event_scheduler
守护程序状态:
对于兼容 Aurora MySQL 的版本,集群和实例级别都有参数组。将其设置在集群级别是个好主意,因为所有实例都将继承该设置。
完成以下步骤,使用数据库集群参数组在集群级别启用事件调度器:
- 在 Amazon RDS 控制台上,选择导航窗格 中的 参数组 。
- 选择您的参数组,然后在 “ 操作 ” 菜单上选择 “ 编辑” 。
- 为参数 e
vent_scheduler
选择值 ON, 然后选择保存更改。
这是一个动态参数,您不必重启数据库集群。现在,您应该能够在数据库实例上配置事件调度器。
以下命令显示了数据库服务器中的 event_scheduler
守护程序状态:
使用事件调度器添加、修改或删除事件
您可以使用
创建事件语句中包含 ON COMPLATI
将运行一次并自动删除。 ON PRES
ERVE 子句,否则一次性事件
从前面收集 销售额
表统计数据的示例中,以下事件运行过一次,然后被删除:
相比之下,以下事件是重复发生的,每 6 小时运行一次。因此,除非明确删除,否则该事件将持续存在。
列出任务
您可以使用 sho
_
SCHEMA 下
ow ev
ents 命令列出。
以下代码显示了使用 information _schema
表下 的事件
表列出的示例事件。
更新任务
使用 al
O
子句下的调度或 SQL 语句,甚至同时修改所有特征。对于省略的选项,al ter 子
句保持不变,并保留其原始值。
删除任务
您可以使用
事件
表或 sh ow events 命令将不再列出这些事件
。
使用事件调度器自动执行的常见任务
事件调度器是自动执行大多数数据库特定任务的好方法。与源 Db2 LUW 数据库相比,以下是可以使用事件调度器执行的一些常见任务:
- 数据维护 -安排数据清除、存档或数据清理等任务,以保持数据库整洁并优化性能
- 数据聚合 -自动汇总和汇总用于报告目的的数据的过程,减少了对手动干预的需求
- 表分区维护 -在非高峰时段定期添加新的表分区或删除旧分区,无需任何手动干预
- 收集表统计信息 -使用预定义的时间表收集大型表的明确统计信息,以保持统计数据为最新状态并提高查询性能
- 用户权限管理 -根据预定义的时间表自动执行用户访问控制任务,例如授予或撤消权限。
- 数据存档 -将历史数据或不常访问的数据移动到存档表或历史表中,以优化实时表的性能
同样,某些任务适用于本地 Db2 LUW 数据库,这些任务在从本地迁移到 亚马逊云科技 时不相关,例如:
- 数据库备份和恢复
- 补丁更新
- 定期运行自定义监控脚本
Db2 ATS 与 MySQL 或 MariaDB 事件调度器的比较
下表比较了源 Db2 LUW 和目标 MySQL 或 MariaDB 数据库之间的任务计划选项。
Description | Db2 LUW | MySQL or MariaDB |
How to enable | Set DB2_ATS_ENABLE registry variable to ON (or 1 or YES) |
Set EVENT_SCHEDULER DB parameter to ON |
Add new tasks | ADMIN_TASK_ADD procedure |
Create event command |
Update existing tasks | ADMIN_TASK_UPDATE procedure |
Alter event command |
Remove existing tasks | ADMIN_TASK_REMOVE procedure |
Drop event command |
Schedule format | Using CRON expression | Using timestamp functions |
Task format | Can be encapsulated in procedures only | Can be a SQL statement or compound statements or procedures |
List tasks | ADMIN_TASK_LIST view |
INFORMATION_SCHEMA.EVENT table or show events command or show create event command |
Monitor task status | ADMIN_TASK_STATUS view |
EVENTS.LAST_EXECUTED or error log |
局限性
以下是在兼容 Aurora MySQL 的版本、适用于 MySQL 的亚马逊 RDS 和适用于 MariaDB 的亚马逊 RDS 上使用事件调度器的一些限制:
- 由于在先前的运行计划中运行时间延长,因此无法对事件的多次并发运行提供保护。但是,使用事件定义中的
GET_LOCK 和 函数可以克服这个问题。RELEASE_LOCK - 您无法查看历史事件运行状态。解决这个问题的一种方法是使用历史表或日志表作为事件逻辑的一部分,记录每个事件运行的状态。
- 如果事件失败,则失败记录仅存在于数据库的错误日志中,并且不容易出现在任何表中。为了克服这个问题,
您可以 将错误日志发布到 CloudWatch Log s, 并根据错误日志 创建指标 。该指标可以作为CloudWatch 警报的基础 ,该警报 可以通知您事件失败的详细信息。
结论
在这篇文章中,我们讨论了在从 Db2 LUW 管理任务调度器迁移时如何使用事件调度器作为解决方案。我们还比较了 Db2 和 MySQL 或 MariaDB 数据库之间的选项,并讨论了目标数据库与源数据库相比的一些限制。使用事件调度器,您可以自动执行最常见的 DBA 任务甚至业务逻辑,使其以 SQL 语句或过程甚至复合语句的形式以预定义的重复或一次性计划运行。
如果您有任何意见或问题,请告诉我们。我们非常重视您的反馈!
作者简介
Sai Parthasaradhi 是 亚马逊云科技 专业服务的高级首席数据库迁移顾问。他与客户紧密合作,帮助他们在 亚马逊云科技 上迁移数据库并对其进行现代化改造。
奥利弗·弗朗西 斯 是 亚马逊云科技 专业服务的高级首席数据库迁移顾问。他喜欢自动化手动流程并增强用户体验。他帮助客户在 亚马逊云科技 云中迁移和现代化工作负载,特别关注现代应用程序架构和开发最佳实践。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。