亚冠

教你轻松掌握如何来释放和写入缓冲区页

2019-06-20 06:38:30来源:励志吧0次阅读

  在 Microsoft SQL Server 2000 中,一个系统负责:

  ·将修改的缓冲区页写入磁盘。

  ·将一段时间未被引用的页标记为可用。

  SQL Server 2000 有一个包含可用缓冲区页地址的单向链接列表。任何需要缓冲区页的线程都使用这个可用缓冲区列表的第一页。

  高速缓冲存储器是一个内存中的结构。每个缓冲区页都有一个页首,页首中包含引用计数器和一个显示该页是否为脏页的指示器,脏页是指该页包含尚未写入磁盘的修改。SQL 语句每引用一次缓冲区页,引用计数器就增加 1。高速缓冲存储器被定期从头到尾进行扫描。由于高速缓冲存储器全部位于内存中,因此这些扫描非常快而且不需要 I/O。在扫描期间,每个缓冲区页首中的引用计数器被 4 除并废弃余数。当引用计数器变为 0 时,将检查脏页指示器。如果为脏页,则调度写操作将修改写入磁盘。SQL Server 实例使用预写日志,因此当记录修改的日志页第一次写入磁盘时将阻塞写入脏数据页。修改的页已刷新到磁盘后,或者如果该页不是脏页,等等,则释放该页。缓冲区页与它所包含的数据页之间的关联被删除,缓冲区被加入到可用列表内。

  通过这一进程,经常被引用的页保留在内存中,而存有不被引用的页的缓冲区最终返回到可用缓冲区列表。SQL Server 实例根据高速缓冲存储器的大小在内部确定可用缓冲区列表的大小。无法配置该大小。

  当 SQL Server 实例在 Microsoft Windows NT 或 Windows 2000 上运行时,扫描缓冲区、写入脏页和填充可用缓冲区列表的工作主要由个别的工作线程完成。工作线程在调度异步读取后与读取完成之间的间隔时间内执行扫描。线程从中央数据结构获得需要扫描的缓冲池下一部分的地址,然后扫描缓冲池的这个部分,同时执行异步读 I/O 进程。如果必须执行写操作,也将异步调度写操作,而写操作并不影响线程处理完成自身读操作的能力。

  每个实例都有单独的惰性写入器线程扫描高速缓冲存储器。惰性写入器进程每隔一段时间休眠。当它重新启动时,检查可用缓冲区列表的大小。如果可用缓冲区列表低于某个点(取决于高速缓存的大小),惰性写入器进程将扫描高速缓冲存储器以收回未使用的页并写入引用计数为 0 的脏页。在 Windows NT 或 Windows 2000 操作系统中,大部分填充可用缓冲区列表和写入脏页的工作都由个别的线程完成,惰性写入器线程一般没什么事可做。Windows 95 和 Windows 98 不支持异步写入,因此惰性写入器线程完成填充可用缓冲区列表和写入脏页的工作。

  检查点进程还定期扫描高速缓冲存储器,并将任何脏日志或数据页写入磁盘。不同之处是检查点进程不会将缓冲区页放回可用缓冲区列表。检查点进程的工作是使内存中的脏页数减到最小,以减少服务器发生故障时的恢复时间,而不是填充可用缓冲区列表。检查点一般很少会找到要写入磁盘的脏页,因为大部分脏页由两个检查点之间的工作线程或惰性写入器线程写入磁盘。

  日志记录的写入通常由惰性写入器线程异步调度。下列情况除外:

  ·提交操作将事务的所有挂起日志记录强行写入磁盘时。

  ·检查点将所有事务的所有挂起日志记录强行写入磁盘时。

排卵期少量出血
气虚月经不调食疗方法
气血虚会痛经吗
分享到: