事务日志文件
正如持久数据库恢复页面中所解释的那样,SmartEDB 运行时使用事务日志文件在先前应用程序崩溃的情况下自动执行恢复操作。持久数据库 I/O 页面解释了不同的日志类型以及如何为不同的应用程序配置选择合适的类型。事务写入日志的方式由事务提交策略决定。以下部分说明了如何在 C 应用程序中设置日志类型和提交策略。
日志类型
日志类型在mco_db_params_t.db_log_type
中指定。例如:
mco_db_params_t db_params;
...
mco_db_params_init ( &db_params ); /* 用默认值初始化参数 */
// Set log file type
db_params.db_log_type = UNDO_LOG; // NO_LOG | REDO_LOG | UNDO_LOG
提交策略
正如“持久数据库 I/O”页面中所解释的那样,SmartEDB 为 REDO_LOG 和 UNDO_LOG 日志类型提供了四种不同的提交策略选项。
应用程序可以在运行时通过调用 mco_disk_transaction_policy()
函数并传入以下值之一来设置提交策略,也可以在传递给 mco_db_open_dev()
的 log_params
参数 default_commit_policy
中设置。
四种提交策略选项:
- MCO_COMMIT_SYNC_FLUSH
- MCO_COMMIT_BUFFERED
- MCO_COMMIT_DELAYED:数据库磁盘管理器会将事务保留在内存中,直到达到日志文件大小的指定百分比。应用程序可以在运行时通过调用
mco_disk_set_log_params()
函数来设置阈值值redo_log_limit
、delayed_commit_threshold
和max_delayed_transactions
。或者这些值可以在传递给mco_db_open_dev()
的log_params
参数中指定。默认情况下,阈值设置为可用页面池大小的一半。 - MCO_COMMIT_NO_SYNC:此策略会导致所有事务都保留在缓存中,直到应用程序通过调用
mco_disk_flush()
函数显式地强制将缓存刷新到介质为止。