持久媒体I/O
SmartEDB 的磁盘管理器支持异步 I/O,详情请见下文所述。
默认情况下,AIO (Asynchronous I/O)是禁用的。若要使用异步 I/O 模式,应用程序需在 open_database() 参数 db_params_mode_mask 中指定 DbParamsModeMask.USE_AIO。AIO 的默认参数为 max_queue_length=10007(异步事务缓冲区的大小)和 n_workers=1(将数据写入持久介质的工作线程数量)。如果需要更改这些参数,则必须在调用 open_database() 之前调用 aio_start() API。aio_start() API 的签名如下:
aio_start(max_queue_length, n_workers);
并且在关闭数据库时,应通过调用 Database 类的 aio_stop() 方法显式关闭 AIO 处理。例如:
exdb.aio_start(1000,2);
db = exdb.open_database(dbname=’perfdb’, dictionary=dict,
is_disk=true, db_segment_size=900*1024*1024,
db_log_type = ‘UNDO_LOG’,
log_params = log_params,
db_params_mode_mask=exdb.DbParamsModeMask.USE_AIO );
...
// Database processing
exdb.aio_stop();
默认情况下,每个数据库都会启动一个 AIO 线程,且默认队列大小设置为 10007。有时,更改 AIO 线程的数量(例如,如果数据库由多个物理 I/O 设备组成,或者位于 RAID 上)和/或队列大小可能会带来好处。但请注意,无论应用程序传递的 worker 线程值如何,I/O 线程的数量都不会超过进程内创建的数据库数量(运行时不允许一个 AIO 线程为多个数据库服务)。
(如果默认值可以接受,应用程序无需调用 aio_start() 或 aio_stop() 这两个方法。)