与事务无关的数据库托管的MySQL存储过程日志记录

时间:2018-12-07 17:24:58

标签: mysql stored-procedures

我是MySQL的初学者,正在寻找专家建议...

我需要创建4个日志存储过程:

  1. OPEN_LOG(代码,注释)
  2. CLOSE_LOG(结果)
  3. BEGIN_ACTION(操作,评论)
  4. END_ACTION(结果)

在这样的存储过程中使用它们:

START TRANSACTION; CALL open_log('ETL_ABC', 'Running ETL process ABC'); CALL begin_action('Refreshing Dimensions', 'CUSTOMERS, PRODUCTS, STORES'); MERGE INTO customers ...; MERGE INTO products ...; MERGE INTO stores' ...; CALL end_action('Done'); CALL begin_action('Loading new SALES data', 'For 01-APR-2018'); INSERT INTO sales ...; CALL end_action('... rows added'); CALL close_log('Successfully completed'); COMMIT;

OPEN_LOG过程应在PROCESS_LOGS表中插入1行。 CLOSE_LOG过程应使用RESULT和END_DATE_TIME值更新该行。 BEGIN_ACTION过程应在LOG_DATA表中插入1行。 END_ACTION过程应在同一LOG_DATA表中插入另一行。所有这些插入和更新应独立于主事务。

系统中可能有许多ETL进程同时在运行,并使用此日志记录机制。同时,支持人员可以手动查询这些日志记录表,以查看正在运行的进程以及进程处于什么阶段。

在Oracle中,我可以通过使用PRAGMA AUTONOMOUS_TRANSACTION声明日志记录过程来实现这一目标。

在MySQL / MariaDB中,我相信我唯一的选择是对日志表使用MyISAM存储引擎。我关心的是并发性。我估计我可能需要允许每秒最多100个日志写入和每分钟最多10个查询。查询应该很快,因为两个日志表都将正确索引。

请给我您的意见/选择。

0 个答案:

没有答案