有两种类型的线程执行磁盘 I/O:清理程序和预取。清理程序线程在缓冲区中写出脏缓冲区和读取的预取线程。在 SAP IQ 中,每个高速缓存(主高速缓存和临时高速缓存)都有一组这些线程。
每个团队的线程数由以下选项控制:
SWEEPER_THREADS_PERCENT
PREFETCH_THREADS_PERCENT
每个线程数都是分配到 SAP IQ 的线程总数(不包括 SQLAnywhere 线程)的百分比。上述两个选项的缺省值为 10。这意味着总计 IQ 线程的 10% 将分配给清理程序团队,10% 将分配给每个高速缓存的预取团队。使用上述选项的缺省设置 10 意味着所有线程的 40% 保留用于 I/O 工作。
通常,扫账器会写出数据,而预取将读入数据。如果清洗器在清洗区落后,则缓冲区管理器将最终交回脏缓冲区,在这种情况下,写入将由接收线程“内联”完成,然后再重用缓冲区。同样,如果 prefetch 无法跟上预取,则请求线程将不会在内存中找到块,并且必须自行读取。在理想情况下,清理程序和预取线程将是执行磁盘 I/O 的唯一线程。
清理器按缓冲区浏览最近使用最少的 (LRU) 链缓冲区;所有操作都在查找要写入的缓冲区时。没有磁盘和线程排队本身,因为线程团队只是观察清洗区并写入找到的任何内容。
为预取团队提供由优化程序读取的缓冲区。如果优化程序不需要数据,预取团队将等待任务。除预取外,预取线程还可以为其他读取执行双重赋值。这是内部控制的,无法更改。