Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - SQL 的用法 » 性能提高、诊断和监控 » 关于提高性能的提示 » 与高速缓存有关的性能提示 » 使用高速缓存提高性能

 

高速缓存和内存调控器

SQL Anywhere 数据库服务器使用高速缓存(也称为缓冲池)在内存中临时存储数据库页的映像。这些页通常是表页和索引页,尽管还有若干其它类型的物理页存储在 SQL Anywhere 数据库中。除了这些页之外,数据库服务器还使用两个其它内存池的高速缓存。其中一个池是用于数据库服务器数据结构(例如表示连接、语句和游标的那些数据结构)的虚拟内存。第二个池由用作查询内存的虚拟存储的高速缓存页组成。

查询执行需要内存来高效运行。SQL Anywhere 使用内存调控器来决定每个语句可用于查询执行的查询内存量。内存调控器负责为语句分配查询内存池以保证负载的高效执行。

内存调控器授予各个语句所选页数,该语句随后可将这些页数用于内存密集型查询处理。查询内存池中的内存仍然可以用于其它目的(例如缓冲表或索引页),直到查询处理器使用这些页。使用查询内存的内存密集型查询处理包括所有基于散列的所有运算符(例如非重复散列、散列分组依据、散列连接)以及排序和窗口运算符。

使用以下设置、运算符和统计信息来了解和控制内存调控器如何使用高速缓存:

  • QueryMemMaxUseful 图形式计划运算符   当语句开始执行时,内存调控器使用优化程序的估计值来确定对该语句有用的内存是多少。该估计值会作为 QueryMemMaxUseful 出现在图形式计划中。

  • QueryMemActiveMax 服务器属性   内存调控器会限制可以并发执行的内存密集型请求的数量。基于运行数据库服务器的计算机的性能特性选择该最大值,该限值通过服务器属性 QueryMemActiveMax 进行显示。

  • QueryMemActiveEst 性能监控器统计信息   内存调控器会保留正在运行的并发内存密集型请求数的估计值,该估计值以数据库服务器属性和性能监控器统计信息 QueryMemActiveEst 的形式提供。

  • query_mem_timeout 数据库选项   如果某个内存密集型语句开始执行,而正在执行的并发内存密集型请求的数量已达到最大,则进来的语句会等待现有请求之一释放其指派的内存。query_mem_timeout 数据库选项控制进来的请求等待内存授予的时间长短。缺省设置为 -1,此时请求等待数据库服务器定义的时间段。如果经等待后没有内存授予可用,则可能通过内存不足执行策略(如果针对该计划的内存密集型物理运算符存在该策略),使用少量内存执行该语句的访问计划,这可能会导致执行速度很慢。

  • QueryMemGrantWaiting 服务器属性和性能监控器统计信息   数据库服务器属性和性能监控器统计信息 QueryMemGrantWaiting 会显示正在等待授权的当前请求数。

  • QueryMemGrantWaited 服务器属性和性能监控器统计信息   数据库服务器属性和性能监控器统计信息 QueryMemGrantWaited 会显示请求在授予内存请求之前等待的总次数。

  • QueryMemNeedsGrant 图形式计划运算符   在图形式计划中,QueryMemNeedsGrant 会显示内存调控器认为请求是简单请求(无需内存授予)还是内存密集型请求(需要内存授予)。如果内存调控器将某个请求分类为不需要内存授予的请求,则该请求会立即开始执行。否则,该请求会请求使用查询内存池中的部分内存。

  • QueryMemLikelyGrant 图形式计划运算符   在图形式计划中,QueryMemLikelyGrant 会显示为执行请求可能授予该请求的页数的估计值。

 另请参见